8.6 腰部关节
8.6.1 状态获取接口
1. 获取腰部关节信息
-
说明:获取腰部关节的状态信息,其中包含关节的当前位置、速度、电流、温度和告警,适用于天工行者·无界和天工行者·无疆。
-
控制方式:topic
-
话题名称:
/waist/status -
数据定义位置:
bodyctrl_msgs::msg::MotorStatusMsg.msg -
数据格式:
std_msgs/Header header
MotorStatus[] status
MotorStatus # 定义如下:
uint16 name # MotorName
float32 pos # rad
float32 speed # rad
float32 current # A
float32 temperature # Mos温度
uint32 errorerror 错误字段值定义如下:
序号 说明 error = 33072, 设备掉线 error = 33073, 关节位置超限 error = 1, 关节电机过温 error = 2, 过流 error = 3, 电压过低 error = 4, 关节 mos 过温 error = 5, 堵转 error = 6, 电压过高 error = 7, 缺相 error = 8, 编码器错误
8.6.2 控制接口
注意
腰部关节需要关闭自启动服务后(
sudo systemctl stop proc_manager.service),然后仅手动启动本体服务(ros2 launch body_control body.launch.py),不能启动运控服务,这种条件下关节电机才受这些接口控制。而在运控服务启动的情况下,所有的关节电机优先受运控服务控制。1. 位置模式
-
说明:关节的位置控制接口,需要提供期望位置、期望速度、最大电流,适用于天工行者·无界和天工行者·无疆。
-
控制方式:topic
-
话题名称:
/waist/cmd_pos -
数据定义位置:
bodyctrl_msgs::msg::CmdSetMotorPosition.msg -
数据格式:
std_msgs/Header header
SetMotorPosition[] cmds
# SetMotorPosition.msg
uint16 name # MotorName
float32 pos # rad
float32 spd # rad/s
float32 cur # A -
示例命令:
ros2 topic pub /waist/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{header: {stamp: {sec: 0, nanosec: 0 }, frame_id: ''},cmds: [{name: 31, pos: -0.3, spd: 0.2, cur: 8.0 }]}"
ros2 topic pub /waist/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{header: {stamp: {sec: 0, nanosec: 0 }, frame_id: ''},cmds: [{name: 31, pos: 0.0, spd: 0.2, cur: 8.0 }]}"
# 使用ros2 topic pub命令时也可以省略header,本文档后续包含header的命令都暂时省略header:
ros2 topic pub /waist/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{cmds: [{name: 31, pos: -0.3, spd: 0.2, cur: 8.0 }]}"
ros2 topic pub /waist/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{cmds: [{name: 31, pos: 0.0, spd: 0.2, cur: 8.0 }]}"
2. 力位混合模式
-
说明:关节的力位混合控制接口,需要提供期望位置、期望速度、前馈力矩、kp、kd系数,适用于天工行者·无界和天工行者·无疆。
-
控制方式:topic
-
话题名称:
/waist/cmd_ctrl -
数据定义位置:
bodyctrl_msgs::msg::CmdMotorCtrl.msg -
数据格式:
std_msgs/Header header
MotorCtrl[] cmds
# MotorCtrl.msg
uint16 name
float32 kp
float32 kd
float32 pos
float32 spd
float32 tor -
示例命令:
ros2 topic pub /waist/cmd_ctrl bodyctrl_msgs/msg/CmdMotorCtrl "{cmds: [{name: 31,kp: 30.0,kd: 10.0,pos: -0.5,spd: 0.0,tor: 0.0}]}"
ros2 topic pub /waist/cmd_ctrl bodyctrl_msgs/msg/CmdMotorCtrl "{cmds: [{name: 31,kp: 30.0,kd: 10.0,pos: 0.0,spd: 0.0,tor: 0.0}]}"
3. 速度模式
-
说明:关节的速度控制接口,需要提供期望速度、最大电流,适用于天工行者·无界和无疆。
-
控制方式:topic
-
话题名称:
/waist/cmd_vel -
数据定义位置:
bodyctrl_msgs::msg::CmdSetMotorSpeed.msg -
数据格式:
std_msgs/Header header
SetMotorSpeed[] cmds
#SetMotorSpeed.msg
uint16 name # MotorName
float32 spd # rad/s
float32 cur # A
4. 腰部关节标零
-
说明:腰部关节的标零接口,调用此接口时会将腰部电机当前位置设置为零位,需要配合标零工具使用,没有标零工具时请谨慎使用,适用于天工行者·无界和天工行者·无疆。
-
控制方式:topic
-
话题名称:
/waist/cmd_set_zero -
数据定义位置:
std_msgs::msg::String -
数据格式:
以字符串形式发送关节的id实现标零;
腰部关节id:31