头部关节

升降系统 ROS2 Topic API 参考文档

底层 ROS2 Topic 通信 — /fd_robot/lifting_motor/*

ROS2 底层 Topic 使用 米 (m) 为单位,C++/Python API 内部已做 mm 转换。

1. 升降速度控制 — lift_up / lift_down

Publisher velocity_cmd
Topic:/fd_robot/lifting_motor/velocity_cmd
类型:std_msgs/msg/Float32
字段 类型 说明
data float32 速度值。正值=上升,负值=下降
ROS2 (Python)
import rclpy
from std_msgs.msg import Float32

rclpy.init()
node = rclpy.create_node("lift_velocity_pub")
pub = node.create_publisher(Float32,
    "/fd_robot/lifting_motor/velocity_cmd", 10)

msg = Float32()

# 上升(速度 0.5)
msg.data = 0.5
pub.publish(msg)

# 下降(速度 -0.3)
msg.data = -0.3
pub.publish(msg)
注意:速度模式下,升降驱动约 1s 内未再收到速度命令会自行停止;须 周期性发布(建议间隔 < 500ms)。

2. 升降位置控制 — lift_set_pos

Publisher position_set_speed_cmd + position_cmd
Topic 1:/fd_robot/lifting_motor/position_set_speed_cmd
Topic 2:/fd_robot/lifting_motor/position_cmd
类型:std_msgs/msg/Float32(两个相同)
Topic 字段 类型 说明
position_set_speed_cmd data float32 速度值
position_cmd data float32 目标位置,单位:米 (m)
ROS2 (Python)
import rclpy
from std_msgs.msg import Float32

rclpy.init()
node = rclpy.create_node("lift_position_pub")

speed_pub = node.create_publisher(Float32,
    "/fd_robot/lifting_motor/position_set_speed_cmd", 10)
pos_pub = node.create_publisher(Float32,
    "/fd_robot/lifting_motor/position_cmd", 10)

# 以速度 0.2 移动到 0.1m(100mm)位置
speed_msg = Float32()
speed_msg.data = 0.2
speed_pub.publish(speed_msg)

pos_msg = Float32()
pos_msg.data = 0.1  # 单位:米
pos_pub.publish(pos_msg)
注意:ROS2 底层 Topic 使用 米 (m) 为单位,C++/Python API 内部已做 mm 转换。

3. 升降停止 — lift_stop

Publisher status (motor_stop)
Topic:/fd_robot/lifting_motor/status
类型:std_msgs/msg/String
字段 类型 说明
data string 固定值 "motor_stop"
ROS2 (Python)
import rclpy
from std_msgs.msg import String

rclpy.init()
node = rclpy.create_node("lift_stop_pub")
pub = node.create_publisher(String,
    "/fd_robot/lifting_motor/status", 10)

msg = String()
msg.data = "motor_stop"
pub.publish(msg)

4. 升降位置读取/订阅 — lift_get_current_pos / lift_sub_current_pos

Subscriber current_pose
Topic:/fd_robot/lifting_motor/current_pose
类型:std_msgs/msg/Float32

data — 当前位置高度(float32),单位:米 (m)

ROS2 (Python)
import rclpy
from std_msgs.msg import Float32

rclpy.init()
node = rclpy.create_node("lift_pose_sub")

def pose_callback(msg):
    # 原始数据单位:米,转换为毫米
    pos_mm = msg.data * 1000.0
    node.get_logger().info(
        f"升降位置:{pos_mm:.2f} mm ({msg.data:.3f} m)")

sub = node.create_subscription(
    Float32,
    "/fd_robot/lifting_motor/current_pose",
    pose_callback,
    10)

rclpy.spin(node)
注意:底层 Topic 以 米 (m) 发布,C++/Python API 内部自动转换为 毫米 (mm)。
升降系统 ROS2 Topic API 文档 Ver1.0.0