如何通过ROS2终端命令在Gazebo中移动物体?
解决ROS2 Humble下Gazebo移动立方体的问题
一、修复/set_entity_state服务调用语法错误
你之前的命令报错是因为ROS2中SetEntityState服务的请求结构是嵌套的:请求根节点只有state字段,name、pose、reference_frame都属于state下的EntityState类型字段,不能直接放在根层级。
正确的服务调用命令:
ros2 service call /set_entity_state gazebo_msgs/srv/SetEntityState "{state: {name: 'cube1', pose: {position: {x: 20.0, y: 0.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}, reference_frame: 'world'}}"
- 注意:数值建议加小数点(如
20.0),字符串用单/双引号包裹,确保JSON结构嵌套正确;如果不需要修改姿态,orientation可以保留默认的四元数(w=1.0,其余为0)。
二、用ros2 topic pub实现移动
Gazebo提供了/gazebo/set_entity_state话题(类型为gazebo_msgs/msg/EntityState),可以直接发布话题来移动立方体,命令如下:
ros2 topic pub --once /gazebo/set_entity_state gazebo_msgs/msg/EntityState "{name: 'cube1', pose: {position: {x: 20.0, y: 0.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}, reference_frame: 'world'}"
--once参数表示只发布一次消息;如果需要持续发布(比如保持位置),可以去掉该参数并添加--rate 10(每秒发布10次)。
内容的提问来源于stack exchange,提问作者ErMo
相关产品推荐
相关产品推荐

