升降机构
升降系统 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
/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 更便捷
- 诊断信息可通过
/diagnosticsTopic 获取
升降系统 ROS2 Topic API 文档 Ver1.0.0
