ROS订阅节点无法获取Twist消息浮点值问题求助
解决ROS订阅节点无法正确提取Twist消息浮点值的问题
你代码里的核心问题是回调函数错误使用了全局初始化的空Twist对象msg,而不是ROS传递过来的消息参数data。那个全局msg是你在listener()里创建的空实例,所有分量默认都是0,所以不管发布端发什么,你输出的都是0,和字符串转换完全无关。
修正后的订阅节点代码
from geometry_msgs.msg import Twist import rospy def callback(data): # 直接使用传入的data参数,这才是发布端发来的Twist消息 rospy.loginfo(f"{rospy.get_caller_id()}") rospy.loginfo(f"Linear: x={data.linear.x}, y={data.linear.y}, z={data.linear.z}") rospy.loginfo(f"Angular: x={data.angular.x}, y={data.angular.y}, z={data.angular.z}") def listener(): rospy.init_node('listener', anonymous=True) rospy.Subscriber('/cmd_vel', Twist, callback) rospy.spin() if __name__ == '__main__': listener()
正确提取浮点值的方法
Twist消息的分量本身就是浮点类型,直接通过以下方式提取即可:
- 线速度分量:
data.linear.x、data.linear.y、data.linear.z - 角速度分量:
data.angular.x、data.angular.y、data.angular.z
这些值可以直接用于计算或打印,不需要额外的字符串转换操作。
内容的提问来源于stack exchange,提问作者Andres V
相关产品推荐
相关产品推荐

