跳到主要内容
版本:V2.0.5.x

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 error

    error 错误字段值定义如下:

    序号说明
    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