Skip to main content
Version: V2.0.5.1

8.7 Arm Joints


8.7.1 Status Interface

1. Arm Joint Status

  • Description: Obtain the status of both arm joints, including current position, speed, current, and temperature. Applicable to all Walker Tienkung models.

  • Communication type: topic

  • Topic name: /arm/status

  • Message definition: bodyctrl_msgs::msg::MotorStatusMsg

  • Message format:

    std_msgs/Header header
    MotorStatus[] status

    # MotorStatus definition:
    uint16 name # MotorName
    float32 pos # rad
    float32 speed # rad
    float32 current # A
    float32 temperature
    uint32 error

    error field definition:

    ValueDescription
    33072Device offline
    33073Joint position out of range
    1Motor over‑temperature
    2Over‑current
    3Under‑voltage
    4Joint MOS over‑temperature
    5Stall
    6Over‑voltage
    7Phase loss
    8Encoder error

8.7.2 Control Interfaces

warning

The arm joints can be controlled by custom programs under any of the following two conditions:

  1. After stopping the auto-start service (sudo systemctl stop proc_manager.service), manually start only the body service (ros2 launch body_control body.launch.py), and do not start the locomotion control service.

  2. Ensure that proc_manager.service is running normally, complete the self-check by pressing A, and then use the remote controller to manually enter upper-body (half-body) control mode (G middle + E middle + F down, then long press A, hear a short beep, then the robot is in half-body control mode. Currently supported only on TienKung Walker Wujiang, and requires software version 2.0.5.2 or above).

1. Position Mode

  • Description: Position control interface for arm joints. Requires desired position, desired speed, and maximum current. Applicable to all Walker Tienkung models.

  • Communication type: topic

  • Topic name: /arm/cmd_pos

  • Message definition: bodyctrl_msgs::msg::CmdSetMotorPosition

  • Message format:

    std_msgs/Header header
    SetMotorPosition[] cmds

    # SetMotorPosition.msg
    uint16 name # MotorName
    float32 pos # rad
    float32 spd # rad/s
    float32 cur # A
  • Example commands:

    ros2 topic pub /arm/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{cmds: [{name: 12, pos: 0.3, spd: 0.2, cur: 8.0}]}"

    ros2 topic pub /arm/cmd_pos bodyctrl_msgs/msg/CmdSetMotorPosition "{cmds: [{name: 22, pos: -0.3, spd: 0.2, cur: 8.0}]}"

2. Hybrid Force‑Position Mode

  • Description: Hybrid force‑position control interface for arm joints. Requires desired position, desired speed, feed‑forward torque, and kp/kd gains. Applicable to all Walker Tienkung models.

  • Communication type: topic

  • Topic name: /arm/cmd_ctrl

  • Message definition: bodyctrl_msgs::msg::CmdMotorCtrl

  • Message format:

    std_msgs/Header header
    MotorCtrl[] cmds

    # MotorCtrl.msg
    uint16 name
    float32 kp
    float32 kd
    float32 pos
    float32 spd
    float32 tor
  • Example commands:

    ros2 topic pub /arm/cmd_ctrl bodyctrl_msgs/msg/CmdMotorCtrl "{cmds: [{name: 13, kp: 30.0, kd: 10.0, pos: 0.2, spd: 0.0, tor: 0.0}]}"

    ros2 topic pub /arm/cmd_ctrl bodyctrl_msgs/msg/CmdMotorCtrl "{cmds: [{name: 23, kp: 30.0, kd: 10.0, pos: 0.2, spd: 0.0, tor: 0.0}]}"

3. Velocity Mode

  • Description: Velocity control interface for arm joints. Requires desired speed and maximum current. Applicable to all Walker Tienkung models.

  • Note: Once this message is published, the motor will continue to run at the specified speed until a message with spd = 0.0 is received on the same topic. Use with caution.

  • Communication type: topic

  • Topic name: /arm/cmd_vel

  • Message definition: bodyctrl_msgs::msg::CmdSetMotorSpeed

  • Message format:

    std_msgs/Header header
    SetMotorSpeed[] cmds

    # SetMotorSpeed.msg
    uint16 name # MotorName
    float32 spd # rad/s
    float32 cur # A

4. Current mode

  • Description: The current control interface of the joint requires the supply of the desired current.

  • Communication type: topic

  • Topic name: /arm/cmd_current

  • Message definition: bodyctrl_msgs::msg::CmdSetMotorCurTor

  • Message format:

    std_msgs/Header header
    SetMotorCurTor[] cmds

    #SetMotorCurTor.msg
    uint16 name # MotorName
    float32 cur_tor
    uint8 ctrl_status

5. Arm Joint Zeroing

  • Description: Zeroing interface for arm joints. When this interface is called, the current position of the specified arm motors is set as the zero position. When the D button on the remote controller is used to return to zero, those joints will move to this position. Typically used together with a dedicated zeroing tool; use with caution if such a tool is not available. Applicable to all Walker Tienkung models.

  • Communication type: topic

  • Topic name: /arm/cmd_set_zero

  • Message definition: std_msgs::msg::String

  • Message format:

    Send joint IDs as a string to perform zeroing.
    Arm joint IDs:
    Left arm: 11–17
    Right arm: 21–27