ros2 使用gazebo仿真,使用gazebo_ros_state插件重置机器人位置
使用方法
- 创建world文件
使用gazebo创建环境,并保存为.world文件 - 修改呢个.world文件, 在<world name=‘default’>标签后添加以下代码
<world name='default'>
<plugin name="gazebo_ros_state" filename="libgazebo_ros_state.so">
<ros>
<namespace>/demo</namespace>
<remapping>model_states:=model_states_demo</remapping>
<remapping>link_states:=link_states_demo</remapping>
</ros>
<update_rate>1.0</update_rate>
</plugin>
- 检查是否成功
gzserver world文件路径 --verbose
若显示
➜ world git:(humble) ✗ gzserver empty.world --verbose
Gazebo multi-robot simulator, version 11.10.2
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 10.63.148.239
[Msg] Loading world file [/home/xianzhou/ros2_omni_gazebo/src/axebot/axebot_description/world/empty.world]
[INFO] [1714533011.064067638] [gazebo_ros_node]: ROS was initialized without arguments.
[INFO] [1714533011.190777834] [demo.gazebo_ros_state]: Publishing states of gazebo models at [/demo/model_states_demo]
[INFO] [1714533011.191198557] [demo.gazebo_ros_state]: Publishing states of gazebo links at [/demo/link_states_demo]
此时查询节点
ros2 node info /demo/gazebo_ros_state
➜ world git:(humble) ✗ ros2 node info /demo/gazebo_ros_state
/demo/gazebo_ros_state
Subscribers:
/clock: rosgraph_msgs/msg/Clock
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/demo/link_states_demo: gazebo_msgs/msg/LinkStates
/demo/model_states_demo: gazebo_msgs/msg/ModelStates
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
Service Servers:
/demo/gazebo_ros_state/describe_parameters: rcl_interfaces/srv/DescribeParameters
/demo/gazebo_ros_state/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/demo/gazebo_ros_state/get_parameters: rcl_interfaces/srv/GetParameters
/demo/gazebo_ros_state/list_parameters: rcl_interfaces/srv/ListParameters
/demo/gazebo_ros_state/set_parameters: rcl_interfaces/srv/SetParameters
/demo/gazebo_ros_state/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
/demo/get_entity_state: gazebo_msgs/srv/GetEntityState
/demo/set_entity_state: gazebo_msgs/srv/SetEntityState
Service Clients:
Action Servers:
Action Clients:
然后就可以通过/demo/get_entity_state获取状态和/demo/set_entity_state设置状态啦
如果什么错误也不报或者有其他奇怪问题
- 在你用的环境里随便打开个终端进入python
python
- 试试这个
import ctypes
so = ctypes.cdll.LoadLibrary
lib = so("/opt/ros/humble/lib/libgazebo_ros_state.so")
可能遇到的问题
出现version 'GLIBCXX_3.4.29' not found
- 查询当前运行环境有的版本
若为系统环境则
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
若为anaconda环境则
strings /home/你的用户名/anaconda3/envs/你的环境名/lib/libstdc++.so.6 | grep GLIBCXX
- (anaconda)没有相应版本,尝试以下代码
conda install -c anaconda libstdcxx-ng
conda install libgcc
- (系统环境)没有相应版本,看这个。如果anaconda在第二步后仍不行也可用这个办法。
- 再次从第一步检查是否有相应版本
- 我出现了两次,GLIBCXX_3.4.30也没有,按照一样的步骤再来一次就行了