目录
Gazebo安装配置
创建仿真环境
仿真使用
Rviz查看摄像头采集的信息
Kinect仿真
问题解决:
1.gazebo--SpawnModel: Failure - model name mrobot already exists.
1.设置你的电脑来接收软件
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
2.设置秘钥
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
3.安装Gazebo
sudo apt-get update
sudo apt-get install gazebo11
sudo apt-get install libgazebo11-dev
4.检查你的安装是否有效果=
gazebo
5.打开 /.gazebo文件夹 下载模型
cd ~/.gazebo
git clone https://github.com/osrf/gazebo_models
如果出现fatal连接GitHub失败请使用以下代码
git clone https://gitclone.com/github.com/osrf/gazebo_models
下载时间可能偏久,读者可以选择和我一样另起终端进行其他操作,等到需要使用场景模型的时候大概也已经下载完成。
6.其他关联安装包(不定时更新)
sudo apt-get install ros-noetic-rviz
sudo apt-get install ros-noetic-robot-state-publisher
sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
sudo apt install ros-noetic-moveit
然后运行安装包索引
sudo apt-get update
接下来进行机器人模型的搭建
机器人模型配置
首先进入到mbot_description/urdf/xacro下
cd ~/catkin_ws/src/mbot_description/urdf/xacro
mkdir gazebo
cd gazebo
sudo gedit mbot_base_gazebo.xacro
编辑模型文件
Gazebo/Gray
transmission_interface/SimpleTransmission
hardware_interface/VelocityJointInterface
hardware_interface/VelocityJointInterface
1
Gazebo/Black
false
Gazebo/Blue
Debug
true
/
1
true
true
100.0
true
left_wheel_joint
right_wheel_joint
${wheel_joint_y*2}
${2*wheel_radius}
1
30
1.8
cmd_vel
odom
odom
base_footprint
再编辑mbot_gazebo.xacro
编辑launch文件
cd ~/catkin_ws/src/mbot_description/launch/xacro
mkdir gazebo
cd gazebo
sudo gedit mbot_base_gazebo.launch
配置完成后运行显示模型
roslaunch mbot_description mbot_base_gazebo.launch
注意
由于Ubuntu20.04对应的ros版本为noetic,所以xacro模型文件的宏定义和宏调用方式都需要更改
Ubuntu20.04的mbot_base_gazebo.xacro文件对应的内容如下
Gazebo/Gray
transmission_interface/SimpleTransmission
hardware_interface/VelocityJointInterface
hardware_interface/VelocityJointInterface
1
Gazebo/Black
false
Gazebo/Blue
Debug
true
/
1
true
true
100.0
true
left_wheel_joint
right_wheel_joint
${wheel_joint_y*2}
${2*wheel_radius}
1
30
1.8
cmd_vel
odom
odom
base_footprint
需要更改的地方为
在轮子的宏定义语法以及支撑轮的宏定义语法前添加xacro引用
cylinder_inertial_matrix,
sphere_inertial_matrix
两个个标签引用的时候也需要加上xacro引用
以及mbot_gazebo.xacro文件也需要更改宏定义
launch文件同样需要更改,这里有三个更改方法,一般情况下将
xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_gazebo.xacro'" />
改为xacro 即可
也有其他的解决方法例如将其改为
xacro --i
还有
xacro.py
正常启动后如下所示
这里有两种方法添加场景模型
第一:直接添加
将模型放置到~/.gazebo/models 文件夹下——在gazebo的左侧列表点击“insert”(可以看到里面有很多的模型,我们只需要从列表中拖出我们需要的模型放置到仿真环境中就可以)
https://bitbucket.org/osrf/gazebo_models/downloads/
这里本文开始时的下载如果已经下载完成可以跳过,如果还未下载完成请等待下载完成再进行后续操作。
选择需要的模型直接拖动到场景中搭建即可
注意这一步需要将原本的机器人模型进行删除然后保存。
这里如果显示conectting----说明还未连接完成,等待出现http-----连接完成后即可正常显示模型,再选择需要的模型添加即可。
自定义文件名称和位置即可
建议存放在catkin_ws/src/mbot_descritpion/worlds下
第二:使用Building editor
模型创建:
Edit——Building editor——绘制环境模型——File——Save保存我们的模型文件(自己设置模型文件名字)——Exit Building Editor(退出编辑界面),可以看到我们的仿真环境已经在gazebo中显示;
保存环境模型同第一种方法一致,然后关闭gazebo界面即可。
传感器仿真
cd ~/catkin_ws/src/mbot_description/urdf/xacro
mkdir sensors
cd sensors
sudo gedit camera_gazebo.xacro
Gazebo/Black
30.0
1.3962634
1280
720
R8G8B8
0.02
300
gaussian
0.0
0.007
true
0.0
/camera
image_raw
camera_info
camera_link
0.07
0.0
0.0
0.0
0.0
0.0
cd ~/catkin_ws/src/mbot_description/urdf/xacro/gazebo
sudo gedit mbot_with_camera_gazebo.xacro
在文件中写入以下内容即可
带摄像头的机器人launch启动文件的编写
cd ~/catkin_ws/src/mbot_description/launch/xacro/gazebo
sudo gedit view_mbot_with_camera_gazebo.launch
然后运行显示模型
roslaunch mbot_description view_mbot_with_camera_gazebo.launch
注意如果说出现
[ERROR] [1666006852.591762, 106.467000]: Spawn service failed. Exiting.
[urdf_spawner-6] process has died [pid 35261, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -urdf -model mrobot -param robot_description __name:=urdf_spawner __log:=/home/q/.ros/log/89f24a6e-4e10-11ed-b861-1f202bd9bc85/urdf_spawner-6.log].
log file: /home/q/.ros/log/89f24a6e-4e10-11ed-b861-1f202bd9bc85/urdf_spawner-6*.log
则说明gazebo进程关闭不完全,需要将所有gazebo进程关闭
killall gzserver
然后发现可以正常启动
使用qt可视化工具查看摄像头画面显示
另起终端
rqt_image_view
注意摄像头参数选定
启用键盘控制
roslaunch mbot_teleop mbot_teleop.launch
注意键盘控制按键
这里如果报错无法定位python 软件包
需要进行下载配置python插件
sudo ln -s /usr/bin/python3 /usr/bin/python
然后再允许键盘控制节点即可
如果读者功能包的src目录下没有mbot_teleop功能包,也可下载另键盘控制功能包
cd ~/carkin_ws/src
git clone https://github.com/ros-teleop/teleop_twist_keyboard.git
//然后启用即可
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
注意该teleop_twist_keyboard.py需要更改为可执行的文件
如果不想使用该功能包,想知道如何自主创建mbot_teleop功能包可参考Arbotix+rviz那篇文章mbot_teleop 功能包创建方法
rosrun rviz rviz
首先固定框架(fixed frame)选择base_footprint
然后Add——robotmodel——ok
然后Add——image——ok
然后image——image topic——/camera/image_raw
激光雷达仿真
cd ~/catkin_ws/src/mbot_description/urdf/xacro/sensors
sudo gedit lidar_gazebo.xacro
Gazebo/Black
0 0 0 0 0 0
false
5.5
360
1
-3
3
0.10
6.0
0.01
gaussian
0.0
0.01
/scan
laser_link
然后编写主体xacro文件
cd ~/catkin_ws/src/mbot_description/urdf/xacro/gazebo
sudo gedit mbot_with_laser_gazebo.xacro
内容如下所示
然后编写launch 启动文件
cd ~/catkin_ws/src/mbot_description/launch/xacro/gazebo
sudo gedit view_mbot_with_laser_gazebo.launch
然后启用键盘控制
roslaunch mbot_teleop mbot_teleop.launch
rviz查看雷达采集信息
rosrun rviz rviz
需要注意的地方与刚才类似
首先固定框架(fixed frame)选择base_footprint
然后Add——robotmodel——ok
然后Add——laserscan——ok
然后laserscan——topic——scan
在图中的红色线条即为雷达检测到的障碍物,由于我的小车卡在消防车和救护车之间懒得动了,就不附图说明了,红色线条很淡,建议将小车周围拿障碍物包满。
方法跟上面摄像头和激光雷达实现的方法类似,这里就不多加说明了,直接给出结果显示了。
gazebo显示
cd ~/catkin_ws/src/mbot_description/urdf/xacro/sensors
sudo gedit kinect_gazebo.xacro
true
20.0
${60.0*M_PI/180.0}
R8G8B8
640
480
0.05
8.0
${prefix}
true
10
rgb/image_raw
depth/image_raw
depth/points
rgb/camera_info
depth/camera_info
${prefix}_frame_optical
0.1
0.0
0.0
0.0
0.0
0.0
0.4
然后编写主体xacro文件
cd ~/catkin_ws/src/mbot_desctiption/urdf/xacro/gazebo
sudo gedit mbot_with_kinect_gazebo.xacro
然后编写launch 启动文件
cd ~/catkin_ws/src/mbot_description/launch/xacro/gazebo
sudo gedit view_mbot_with_kinect_gazebo.launch
运行后如下所示
查看kinect采集到的信息
rosrun rviz rviz
注意:
首先固定框架(fixed frame)选择base_footprint
然后Add——robotmodel——ok
然后Add——pointcloud2——ok
然后pointcloud2——topic——/kinect/depth/points
以上就是本节内容,关于Gazebo物理仿真平台搭建已经全部完成。
roslaunch gazebo_ros empty_world.launch
在开启后的gazebo界面中选中mrobot模型delete删除即可
然后退出。
在上述模型创建且.world 保存前需要把机器人模型删除再保存,不然会出现模型重名报错。
2. [ERROR] [1666006852.591762, 106.467000]: Spawn service failed. Exiting.
[urdf_spawner-6] process has died [pid 35261, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -urdf -model mrobot -param robot_description __name:=urdf_spawner __log:=/home/q/.ros/log/89f24a6e-4e10-11ed-b861-1f202bd9bc85/urdf_spawner-6.log].
log file: /home/q/.ros/log/89f24a6e-4e10-11ed-b861-1f202bd9bc85/urdf_spawner-6*.log
将所有gazebo进程关闭再重启即可
killall gzserver