玄雅通信接口SDK
玄雅通信接口SDK(XuanYa_Comm.py)是Gloria-M系列机械臂的Python通信库,提供了电机控制的高级封装接口。
1. 概述
MotorComm 类是基于DM电机CAN通信协议的高级封装,提供了便于使用的电机状态读取和控制接口。该类主要用于:
- 读取电机位置、速度和扭矩等状态信息
- 提供不同单位的数据转换(弧度/角度)
- 支持百分比位置表示(0-100%)
2. 主要功能
2.1 位置读取
getPosRad(Motor)
获取电机位置(弧度)
pos_rad = motor_comm.getPosRad(motor1) # 返回弧度值
getAngle(Motor)
获取电机位置(度)
pos_deg = motor_comm.getAngle(motor1) # 返回角度值(度)
getAngle100(Motor)
获取电机位置百分比(0-100%)
pos_percent = motor_comm.getAngle100(motor1) # 返回0-100的百分比
说明:
- 基于
gloria_max = 2.9弧度作为100%位置 - 自动进行范围限制:
- pos ≤ 0 → 返回 0.0%
- pos ≥ 2.9 → 返回 100.0%
- 0 < pos < 2.9 → 返回线性映射值
2.2 速度读取
getVelRad(Motor)
获取电机速度(弧度/秒)
vel_rad = motor_comm.getVelRad(motor1) # 返回 rad/s
getVel(Motor)
获取电机速度(度/秒)
vel_deg = motor_comm.getVel(motor1) # 返回 °/s
转换公式: 度/秒 = 弧度/秒 × (30.0 / π)
2.3 扭矩读取
getTorque(Motor)
获取电机扭矩(Nm)
torque = motor_comm.getTorque(motor1) # 返回扭矩值 (Nm)
2.4 温度读取
getTMos(Motor)
获取电机MOS管温度
temp_mos = motor_comm.getTMos(motor1) # 返回MOS管温度
getTRoto(Motor)
获取电机转子温度
temp_rotor = motor_comm.getTRoto(motor1) # 返回转子温度
2.5 工具函数
rad_to_angle(rad)
弧度转角度的工具函数
angle = motor_comm.rad_to_angle(1.57) # 1.57弧度 → 90度
3. 使用示例
3.1 基础初始化
from XuanYa_Comm import MotorComm
from DM_CAN import Motor, DM_Motor_Type
# 创建通信对象
motor_comm = MotorComm()
# 创建电机对象
motor1 = Motor(DM_Motor_Type.DM4310, 0x02, 0x202)
3.2 状态监控示例
# 实时监控电机状态
while True:
# 获取位置信息
pos_percent = motor_comm.getAngle100(motor1)
pos_angle = motor_comm.getAngle(motor1)
# 获取速度信息
velocity = motor_comm.getVel(motor1)
# 获取扭矩信息
torque = motor_comm.getTorque(motor1)
# 获取温度信息
temp_mos = motor_comm.getTMos(motor1)
temp_rotor = motor_comm.getTRoto(motor1)
print(f"位置: {pos_percent:.1f}% ({pos_angle:.1f}°)")
print(f"速度: {velocity:.2f}°/s")
print(f"扭矩: {torque:.3f}Nm")
print(f"温度: MOS={temp_mos}°C, 转子={temp_rotor}°C")
time.sleep(0.1)
4. 重要参数
4.1 位置范围
- 最大位置:
gloria_max = 2.9弧度 (≈166.2度) - 百分比映射: 0弧度 → 0%, 2.9弧度 → 100%
4.2 单位转换
- 角度转换: 弧度 × (180/π) = 度
- 速度转换: 弧度/秒 × (30/π) = 度/秒
5. 注意事项
- 依赖关系: 该模块依赖于
DM_CAN.py模块 - 串口配置: 默认波特率为921600
- 温度监控: 建议定期监控MOS管和转子温度,避免过热
- 位置限制: 使用
getAngle100()可以直观地了解电机位置百分比 - 异常处理: 在实际应用中应添加适当的异常处理机制
6. 故障排除
6.1 常见问题
- 通信失败: 检查串口连接和波特率设置
- 位置读取异常: 确认电机已正确使能
- 温度过高: 检查电机负载和散热情况
6.2 调试建议
- 使用
getAngle100()函数便于观察位置变化 - 监控温度信息预防过热保护
- 检查速度和扭矩是否在合理范围内
使用建议
建议在实际应用中结合电机控制和状态监控功能,实现完整的闭环控制系统。