激光slam gazebo仿真环境搭建(一)

激光slam gazebo仿真环境搭建

系统版本:ubuntu20.04

ros版本:noetic

1.安装gazebo

运行下面命令,安装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

在这里插入图片描述

2.启动gazebo自带仿真环境

另起一个终端,就可以启动gazebo自带的仿真环境了,例如启动turtlebot3_world,就可以看到下面的界面。

roslaunch turtlebot3_gazebo turtlebot3_world.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqGfwE5D-1667215370909)(D:\2资料\个人资料\2MD文档\图片\gazebo_world.jpg)]

gazebo还有很多自带的slam仿真环境,在终端中输入roslaunch turtlebot3_gazebo,再按Tab键,就可以看到所有自带的gazebo仿真环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noEx7h9d-1667215370909)(D:\2资料\个人资料\2MD文档\图片\gazebo仿真环境命令.jpg)]

任意开启几个仿真环境展示:

(1)turtlebot3_stage_4

roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ja2nT2pS-1667215370910)(D:\2资料\个人资料\2MD文档\图片\stage4.png)]

(2)turtlebot3_autorace_2020

roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BYlI5OxJ-1667215370910)(D:\2资料\个人资料\2MD文档\图片\autorace_2020.png)]

3.取消发布gazebo自带odom数据(很关键)

1.取消发布gazebo自带odom数据非常关键,因为后续使用catographer纯定位时,gazebo自带的odom(里程计)数据效果很差,想使用cartographer自带的激光里程计来替换掉它,需要下载turtlebot3源码(主要包含turtlebot3(https://github.com/ROBOTIS-GIT/turtlebot3)和turtlebot3_simulations(https://github.com/ROBOTIS-GIT/turtlebot3_simulations)两个包)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EcYAYTe4-1667215370911)()]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKOCkDYG-1667215370911)(D:\2资料\个人资料\2MD文档\图片\turtlebot3_simulations wang zhi.png)]

新建一个ros功能包navigation_ws

mkdir -p ~/navigation_ws/src

再将turtlebot3和turtlebot3_simulations两个包放在navigation_ws/src目录下,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-199HjpEE-1667215370912)(D:\2资料\个人资料\2MD文档\图片\turtlebot3 code.jpg)]

再在~/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

<odometryTopic>odom1</odometryTopic> 修改gazebo发布的odom的topic名字,初始设置为odom。

<publishOdomTF>false</publishOdomTF> 设置odom->base_footprint的tf发布,不发布就设置为false。

  <gazebo>
    <plugin name="turtlebot3_burger_controller" filename="libgazebo_ros_diff_drive.so">
      <commandTopic>cmd_vel</commandTopic>
      <odometryTopic>odom1</odometryTopic> # 修改gazebo发布的odom的topic名字,初始设置为odom
      <odometryFrame>odom</odometryFrame>
      <odometrySource>world</odometrySource>
      <publishOdomTF>false</publishOdomTF>  # 设置odom->base_footprint的tf发布,不发布就设置为false
      <robotBaseFrame>base_footprint</robotBaseFrame>
      <publishWheelTF>false</publishWheelTF>
      <publishTf>true</publishTf>
      <publishWheelJointState>true</publishWheelJointState>
      <legacyMode>false</legacyMode>
      <updateRate>30</updateRate>
      <leftJoint>wheel_left_joint</leftJoint>
      <rightJoint>wheel_right_joint</rightJoint>
      <wheelSeparation>0.160</wheelSeparation>
      <wheelDiameter>0.066</wheelDiameter>
      <wheelAcceleration>1</wheelAcceleration>
      <wheelTorque>10</wheelTorque>
      <rosDebugLevel>na</rosDebugLevel>
    </plugin>
  </gazebo>

③修改turtlebot3_simulations/turtlebot3_gazebo/launch/turtlebot3_stage_4.launch(这里我是以turtlebot3_stage_4仿真环境为例修改的,其他的仿真环境也是如此修改)。

<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的路径替换为上面修改的绝对路径。

<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。其余的仿真环境也是这样修改。


版权声明:本文为qq_38879360原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。