Gazebo中获得任意model的groundtruth的pose

本文介绍如何在Gazebo中使用ROS Plugin libgazebo_ros_p3d来获取模型的位置信息。通过在URDF或SDF文件中配置该插件,并设置参数如更新频率、模型名称等,可以实现在ROS节点中订阅/ground_truth/state主题来接收模型的实时位置数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,我们可以在模型的urdf文件或者sdf文件中加入下面这段代码,这是给模型加入一个ros plugin——libgazebo_ros_p3d

<gazebo>
  <plugin name="p3d_base_controller" filename="libgazebo_ros_p3d.so">
    <alwaysOn>true</alwaysOn>
    <updateRate>50.0</updateRate>
    <bodyName>base_link</bodyName>
    <topicName>ground_truth/state</topicName>
    <gaussianNoise>0.01</gaussianNoise>
    <frameName>world</frameName>
    <xyzOffsets>0 0 0</xyzOffsets>
    <rpyOffsets>0 0 0</rpyOffsets>
  </plugin>
</gazebo>

2、加入之后,启动gazebo,加载好了模型之后,在console中敲

rostopic list

3、然后就会出现**/groundtruth/state**这个topic,这个topic发布的数据类型为:nav_msgs/odometry。然后在ros node中订阅这个topic就可以收到这个model的pose了。

4、注意:对于nav_msgs/odometry 中的位置,是通过层层的消息类型定义得到的。

      例:const  nav_msgs::Odometry::ConstPtr& msg

      获得gazebo 中x,y,z的坐标为:

(msg->pose).pose.position.x
(msg->pose).pose.position.y
(msg->pose).pose.position.z

 

src/exploration/mbplanner_ros/mbplanner/launch/mbplanner_m100_sim.launch文件内容如下 <launch> <!-- All settings --> <arg name="robot_name" default="m100"/> <arg name="gazebo_gui_en" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="rviz_en" default="true" /> <arg name="launch_prefix" default=""/> <!-- gdb -ex run //args | xterm -e gdb -args--> <param name="use_sim_time" value="$(arg use_sim_time)"/> <!-- Config files --> <arg name="mbplanner_config_file" default="$(find mbplanner)/config/mbplanner_config.yaml"/> <arg name="global_planner_config_file" default="$(find global_planner)/config/global_planner_config.yaml"/> <arg name="voxblox_config_file" default="$(find mbplanner)/config/voxblox_sim_config.yaml"/> <arg name="octomap_config_file" default="$(find mbplanner)/config/octomap_sim_config.yaml"/> <arg name="map_config_file" default="$(arg voxblox_config_file)"/> <arg name="world_file" default="$(find planner_gazebo_sim)/worlds/pittsburgh_mine.world"/> <arg name="pci_file" default="$(find mbplanner)/config/planner_control_interface_sim_config.yaml"/> <node pkg="tf" type="static_transform_publisher" name="tf_53" args="0 0 0 0 0 0 world navigation 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_1" args="0.0 0 0.12 0 -1.2 -0.0 $(arg robot_name)/vi_sensor/base_link fcu 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_2" args="0.015 0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_depth_optical_center_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_3" args="0.015 0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_left_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_4" args="0.015 -0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_right_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_5" args="0 0 0.05 0.0 0.0 0.0 $(arg robot_name)/base_link $(arg robot_name)/$(arg robot_name)/velodyne 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_6" args="0.0 0 0.12 0.0 -1.2 -0.0 $(arg robot_name)/base_link $(arg robot_name)/vi_sensor/base_link 1" /> <!-- ROS Gazebo --> <env name="GAZEBO_MODEL_PATH" value="${GAZEBO_MODEL_PATH}:$(find planner_gazebo_sim)/models"/> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(arg world_file)" /> <arg name="gui" value="$(arg gazebo_gui_en)" /> <arg name="use_sim_time" value="$(arg use_sim_time)"/> <arg name="paused" value="false" /> <arg name="verbose" value="false"/> </include> <group ns="$(arg robot_name)"> <node name="img_throttler" type="throttle" pkg="topic_tools" args="messages vi_sensor/camera_depth/depth/points 5 vi_sensor/camera_depth/depth/points_throttled" /> <node name="odo_throttler" type="throttle" pkg="topic_tools" args="messages ground_truth/odometry 100 ground_truth/odometry_throttled" /> <!-- MAV launch --> <include file="$(find rotors_gazebo)/launch/spawn_mav.launch"> <arg name="mav_name" value="$(arg robot_name)" /> <arg name="model" value="$(find rotors_description)/urdf/m100.gazebo" /> <arg name="enable_ground_truth" value="true" /> <arg name="x" value="0.0"/> <arg name="y" value="0.0"/> <arg name="z" value="1.5"/> </include> <!-- Position controller --> <node name="lee_position_controller_node" pkg="rotors_control" type="lee_position_controller_node" output="screen"> <rosparam command="load" file="$(find rotors_gazebo)/resource/lee_controller_$(arg robot_name).yaml" /> <rosparam command="load" file="$(find rotors_gazebo)/resource/$(arg robot_name).yaml" /> <remap from="odometry" to="odometry_sensor1/odometry" /> </node> </group> <arg name="odometry_topic" default="$(arg robot_name)/ground_truth/odometry_throttled"/> <node name="pose_throttler" type="throttle" pkg="topic_tools" args="messages $(arg robot_name)/ground_truth/pose_with_covariance 10 /msf_core/pose" /> <!-- Motion Primitive based planning --> <node pkg="mbplanner" type="mbplanner_node" name="mbplanner_node" output="screen"> <remap from="odometry" to="$(arg odometry_topic)" /> <remap from="pointcloud" to="/velodyne_points" /> <rosparam command="load" file="$(arg mbplanner_config_file)" /> <rosparam command="load" file="$(arg map_config_file)" /> </node> <!-- Global Planner --> <node pkg="global_planner" type="global_planner_node" name="global_planner_node" output="screen" launch-prefix="$(arg launch_prefix)"> <remap from="odometry" to="$(arg odometry_topic)" /> <!-- For Voxblox: --> <!-- Use tsdf map topics if tsdf is being used and commnet the esdf topic--> <remap from="global_planner_node/tsdf_map_in" to="mbplanner_node/tsdf_map_out"/> <!-- <remap from="global_planner_node/esdf_map_in" to="mbplanner_node/esdf_map_out"/> --> <!-- --> <!-- For Octomap: --> <remap from="input_octomap" to="mbplanner_node/octomap_binary"/> <!-- --> <rosparam command="load" file="$(arg global_planner_config_file)" /> <rosparam command="load" file="$(arg map_config_file)" /> </node> <node pkg="pci_mav" type="pci_mav_ros_node" name="pci_mav_ros_node" output="screen"> <remap from="command/trajectory" to="$(arg robot_name)/command/trajectory" /> <remap from="planner_server" to="mbplanner" /> <remap from="planner_homing_server" to="global_planner/homing" /> <remap from="mbplanner/global" to="global_planner/global" /> <remap from="odometry" to="$(arg odometry_topic)"/> <rosparam command="load" file="$(arg pci_file)" /> </node> <!-- <include file="$(find aerial_control_ui)/launch/m100_ui.launch"/> --> <group if="$(arg rviz_en)"> <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find mbplanner)/config/rviz/$(arg robot_name)_sim_mbplanner.rviz" /> </group> </launch>,帮我查看是否有目标位置相关的设置
最新发布
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值