激光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

激光slam gazebo仿真环境搭建(一)_第1张图片

  将burger设置到环境变量中

export TURTLEBOT3_MODEL=burger

激光slam gazebo仿真环境搭建(一)_第2张图片

2.启动gazebo自带仿真环境

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

roslaunch turtlebot3_gazebo turtlebot3_world.launch

激光slam gazebo仿真环境搭建(一)_第3张图片

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

激光slam gazebo仿真环境搭建(一)_第4张图片

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

  (1)turtlebot3_stage_4

roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch

激光slam gazebo仿真环境搭建(一)_第5张图片

  (2)turtlebot3_autorace_2020

roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch

激光slam gazebo仿真环境搭建(一)_第6张图片

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)两个包)

激光slam gazebo仿真环境搭建(一)_第7张图片

激光slam gazebo仿真环境搭建(一)_第8张图片

  新建一个ros功能包navigation_ws

mkdir -p ~/navigation_ws/src

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

激光slam gazebo仿真环境搭建(一)_第9张图片

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

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

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

你可能感兴趣的:(slam环境从零配置,机器人,ubuntu,linux)