最近在学习ros进行仿真模拟,必不可少的要使用到gazebo。在跟随YouTube上一个博主的视频学习从头开始使用gazebo时遇到一系列问题,准备记录下来
(1)尝试使用gazebo_ros生成一个urdf model时卡在Waiting for service /gazebo/spawn_urdf_model命令
在.launch文件中的<launch>标签中添加如下代码行,重新运行即可解决问题
<!-- these are the arguments you can pass this launch file, for example paused:=true -->
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<!-- We resume the logic in empty_world.launch -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
<!-- arg name="world_name" value="$(find task_1)/world/tutorial_testing.world"/ -->
</include>
解决问题原贴:https://answers.gazebosim.org//question/3468/problems-to-spawn-an-urdf-model-with-gazebo_ros/
(2)gazebo无法加载.world文件中的模型,表现为加载失败、黑屏、空白世界等现象
可在运行gazebo时加入--verbose参数,查询运行log,如提示[Err] [Visual.cc:3043] No mesh specified,即表明模型加载失败,问题原因表现为在gazebo官网下载model失败,为网络问题。具体解决办法是直接将官网的model下载至本地直接加载,具体方法见https://blog.youkuaiyun.com/crp997576280/article/details/102783082,建议直接网盘下载并将模型解压至~/.gazebo/models中。
(3)如何向正在运行的gazebo中实时加入模型
事先写好模型的spawn.launch文件,代码形如下方所示:
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<param name="robot_description" command="$(find xacro)/xacro.py --inorder '$(find m2wr_description)/urdf/m2wr.xacro'"/>
<arg name="x" default="0"/>
<arg name="y" default="0"/>
<arg name="z" default="0.5"/>
<node name="m2wr_spawn" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -param robot_description -model m2wr -x $(arg x) -y $(arg y) -z $(arg z)"/>
</launch>
若直接roslaunch该文件会出现(1)中的问题,问题的关键就是此文件中的node未启动,而该node会在gazebo运行时自动启动,但是如果直接在命令行中键入 gazebo 来启动gazebo的话,/gazebo/spawn_urdf_model这个service仍然不会启动。
解决办法就是使用 rosrun gazebo_ros gazebo 来代替 gazebo 命令(要提前启动roscore才能使用rosrun),gazebo相关超参仍然有效。
解决问题原贴:https://answers.ros.org/question/276753/urdf-spawn-into-gazebo-world-error/
(4)关于所写python脚本运行时出现import-im6.q16: not authorized `rospy' @ error/constitute.c/WriteImage/1037. from: can't read /var/mail/sensor_msgs.msg 等等类似的信息
记得在python脚本最前面加上#! /usr/bin/env python 空格一定要记得加!意思是告诉操作系统该由哪个解释器来解释脚本。
解决原贴:https://answers.ros.org/question/306065/error-on-import-ros-packages/