系统版本:ubuntu20.04
ros版本:noetic
运行下面命令,安装gazebo相关的ros包(默认已经安装了ros,没安装的根据自己的ubuntu版本安装对应的ros版本,ubuutu16.04–>kinetic,ubuntu18.04–>melodic,ubuntu20.04–>noetic)
# 安装和gazebo相关的包
sudo apt-get install ros-noetic-turtlebot3-*
sudo apt-get install ros-noetic-gazebo-ros-pkgs
sudo apt-get install ros-noetic-teleop-twist-keyboard
安装完毕后,需要设置默认的turtlebot3的类型(turtlebot3有burger、waffle_pi和waffle三款,随便设置一个都可以,我用的burger),运行下面命令,将burger设置到环境变量中
sudo gedit ~/.bashrc
将burger设置到环境变量中
export TURTLEBOT3_MODEL=burger
另起一个终端,就可以启动gazebo自带的仿真环境了,例如启动turtlebot3_world,就可以看到下面的界面。
roslaunch turtlebot3_gazebo turtlebot3_world.launch
gazebo还有很多自带的slam仿真环境,在终端中输入roslaunch turtlebot3_gazebo
,再按Tab
键,就可以看到所有自带的gazebo仿真环境
任意开启几个仿真环境展示:
(1)turtlebot3_stage_4
roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch
(2)turtlebot3_autorace_2020
roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch
1.取消发布gazebo自带odom数据非常关键,因为后续使用catographer纯定位时,gazebo自带的odom(里程计)数据效果很差,想使用cartographer自带的激光里程计来替换掉它,需要下载turtlebot3源码(主要包含turtlebot3(https://github.com/ROBOTIS-GIT/turtlebot3)和turtlebot3_simulations(https://github.com/ROBOTIS-GIT/turtlebot3_simulations)两个包)
新建一个ros功能包navigation_ws
mkdir -p ~/navigation_ws/src
再将turtlebot3和turtlebot3_simulations两个包放在navigation_ws/src
目录下,如下图所示
再在~/navigation/
目录下运行catkin_make
编译即可,至此源码安装,编译完成,如想运行源码环境下的turtlebot仿真环境,先source
,在roslaunch
启动turtlebot3_stage_4的仿真环境,运行后的界面如上面的turtlebot3_stage_4.launch一样。
cd ~/navigation
source devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch
接下来,非常关键,影响后续定位和导航效果
2.turtlebot3中的odom不好用,因此常常需要取消它的odom topic发布,主要有以下几步:
①需要在github下载turtlebot3
的源码(尽量不要去改系统中安装turtlebot3的文件,一旦后面记不住改的哪,就会出问题)。
②修改turtlebot3-/turtlebot3_description/urdf/ turtlebot3_burger.gazebo.xacro
修改gazebo发布的odom的topic名字,初始设置为odom。
设置odom->base_footprint的tf发布,不发布就设置为false。
<gazebo>
<plugin name="turtlebot3_burger_controller" filename="libgazebo_ros_diff_drive.so">
<commandTopic>cmd_velcommandTopic>
<odometryTopic>odom1odometryTopic> # 修改gazebo发布的odom的topic名字,初始设置为odom
<odometryFrame>odomodometryFrame>
<odometrySource>worldodometrySource>
<publishOdomTF>falsepublishOdomTF> # 设置odom->base_footprint的tf发布,不发布就设置为false
<robotBaseFrame>base_footprintrobotBaseFrame>
<publishWheelTF>falsepublishWheelTF>
<publishTf>truepublishTf>
<publishWheelJointState>truepublishWheelJointState>
<legacyMode>falselegacyMode>
<updateRate>30updateRate>
<leftJoint>wheel_left_jointleftJoint>
<rightJoint>wheel_right_jointrightJoint>
<wheelSeparation>0.160wheelSeparation>
<wheelDiameter>0.066wheelDiameter>
<wheelAcceleration>1wheelAcceleration>
<wheelTorque>10wheelTorque>
<rosDebugLevel>narosDebugLevel>
plugin>
gazebo>
③修改turtlebot3_simulations/turtlebot3_gazebo/launch/turtlebot3_stage_4.launch(这里我是以turtlebot3_stage_4仿真环境为例修改的,其他的仿真环境也是如此修改)。
# 只改这一句,将后面turtlebot3_burger.urdf.xacro的路径替换为上面修改的绝对路径。
<launch>
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="x_pos" default="-0.7"/>
<arg name="y_pos" default="0.0"/>
<arg name="z_pos" default="0.0"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_stage_4.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
include>
<param name="robot_description" command="$(find xacro)/xacro --inorder /home/.../navigation_ws/src/turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro" /> # 只改这一句,将后面turtlebot3_burger.urdf.xacro的路径替换为上面修改的绝对路径
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model turtlebot3_burger -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
launch>
至此turtlebot3自带的odom屏蔽完成,后面运行turtlebot3_stage_4.launch,gazebo就不会发布odom->base_footprint的topic。其余的仿真环境也是这样修改。