升降机构

升降系统 ROS2 Topic API 参考文档

底层 ROS2 Topic 通信 — 升降电机 /fd_robot/lifting_motor/*

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

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

Publisher velocity_cmd
/fd_robot/lifting_motor/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
/fd_robot/lifting_motor/position_set_speed_cmd
/fd_robot/lifting_motor/position_cmd
Topic:/fd_robot/lifting_motor/position_set_speed_cmd
    /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) 为单位。

3. 升降停止 — lift_stop

Publisher status (motor_stop)
/fd_robot/lifting_motor/status
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
/fd_robot/lifting_motor/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,无需经过 C++/Python API 封装
  • C++/Python API 已自动完成 m→mm 单位转换,直接使用 API 更便捷
  • 诊断信息可通过 /diagnostics Topic 获取
升降系统 ROS2 Topic API 文档 Ver1.0.0