• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

教程一Jackal底盘模型搭建ROS Gazebo仿真

武飞扬头像
stan-coder
帮助3

一、创作背景

        现在到网上搜索“Gazebo小车仿真”这个关键词,出来的内容要么就是Turtlebot系列或者Husky系列,要么就是从零搭建自己的小车模型。。。那么如果你既不想使用Turtlebot这种虽复杂但过于小巧的底盘模型,又不想使用博主们自己编写搭建的接地气小车模型的话,那么本教程即将为你带来一个颜值还算过得去,描述文件结构清晰简洁的底盘模型——Jackal四轮差速底盘!

学新通

二、环境依赖

官方推荐的是Ubuntu16.04 ROS Kinetic系统版本组合

我这边使用的是Ubuntu18.04 ROS Melodic系统版本组合

所以本教程只能保证在最高为ROS Melodic版的环境下完美复现,如果你使用的是ROS Noetic等更新的版本,则不保证能够使用该模型。望知悉!以免做无用功。当然,如果有朋友使用本教程,在Ubuntu20.04 Noetic版本上成功复现的,也请不吝回复,让更多朋友知道

三、代码链接

 完整工程在 multi_jackal_simulate.zip 这个压缩包

https://github.com/RustSon/multi_jackal_simulate学新通https://github.com/RustSon/multi_jackal_simulate

四、部署流程

1、把下载下来的代码解压到一个空的工作空间,比如我这里叫做 jackal_ws/src:

  1.  
    └── jackal_ws/src
  2.  
    ├── multi_jackal_base
  3.  
    ├── multi_jackal_control
  4.  
    ├── multi_jackal_description
  5.  
    ├── multi_jackal_nav
  6.  
    ├── multi_jackal_tutorials
  7.  
    ├── navigation-melodic-devel
  8.  
    ├── navigation_msgs
  9.  
    └── README.md

2、安装一些必要的依赖:

  1.  
    cd jackal_ws
  2.  
     
  3.  
    sudo apt-get install ros-melodic-controller-manager ros-melodic-interactive-marker-twist-server ros-melodic-robot-localization ros-melodic-robot-state-publisher ros-melodic-tf ros-melodic-urdf ros-melodic-xacro ros-melodic-gazebo-ros-control ros-melodic-hector-gazebo-plugins ros-melodic-joint-state-controller ros-melodic-diff-drive-controller ros-melodic-lms1xx ros-melodic-pointgrey-camera-driver ros-melodic-pointgrey-camera-description ros-melodic-teb-local-planner
  4.  
     
  5.  
    catkin_make -j4

因为我这里给的工程里面包含了 navigation 导航包,而我上面安装的依赖里是没有包含导航包的依赖项的,如果编译报错,你可以根据错误提示,自行安装相应的ros依赖包。当然,如果你觉得这样过于麻烦,也可以使用下面这条命令一键完成:

sudo apt-get install ros-melodic-navigation

3、不出意外,你现在已经编译通过了。如果你之前从未使用过 Gazebo 进行仿真演练,那么请先下载必要的一些模型文件到本地;如果你已经使用过一些比较复杂的仿真场景了,那么这一步无需进行

  1.  
    cd ~/.gazebo/
  2.  
    mkdir models
  3.  
    cd models
  4.  
    wget http://file.ncnynl.com/ros/gazebo_models.txt
  5.  
    wget -i gazebo_models.txt
  6.  
    ls model.tar.g* | xargs -n1 tar xzvf

4、准备工作已经完成,现在开始打开仿真:

  1.  
    加载一个底盘,运行:
  2.  
    cd jackal_ws/
  3.  
    source devel/setup.bash
  4.  
    roslaunch multi_jackal_tutorials one_jackal.launch
  5.  
     
  6.  
    加载三个底盘,运行:
  7.  
    cd jackal_ws/
  8.  
    source devel/setup.bash
  9.  
    roslaunch multi_jackal_tutorials three_jackal.launch

5、终端出现以下红字错误,无需理睬,可正常使用:

学新通

 6、如下图所示,此时你应该可以看到 Gazebo 和 Rviz 都已经打开:

学新通

学新通

 7、同时终端会一直刷屏以下黄色警告:

学新通

 8、这些都是正常现象,因为我们还没有给小车导航包一个可以使用的地图信息,这个时候我们可以选择两种方式给小车提供地图:

方法一:

        利用map_server加载发布地图信息(此处不着重讲该方法,不过需要map文件的可以私信我并留下你的邮箱,我会在查看后一个一个地发送)

方法二:

        利用建图工具包进行实时建图并发布地图信息(开源的建图工具包有Cartographer、Gmapping、Hector等,我推荐使用Cartographer进行建图,后面教程二也会重点讲解这部分,这里为了快速跑起我们的底盘模型,将采用比较简单的Gmapping进行建图)

  1.  
    首先安装gmapping工具包:
  2.  
    sudo apt-get install ros-melodic-gmapping
  3.  
     
  4.  
    其次,进入 jackal_ws/src/multi_jackal_tutorials/launch 文件目录下:
  5.  
    gedit gmapping.launch
  6.  
    将下方内容复制到该launch中,并保存
  7.  
     
  8.  
    另开终端,启动建图:
  9.  
    source devel/setup.bash
  10.  
    roslaunch multi_jackal_tutorials gmapping.launch
  1.  
    <launch>
  2.  
    <arg name="robot_num" value="1"/>
  3.  
    <arg name="robot_name" value="robot_$(arg robot_num)"/>
  4.  
    <arg name="scan" default="/$(arg robot_name)/front/scan" /> <!-- 根据自己发布scan名称进行修改 -->
  5.  
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
  6.  
    <param name="base_frame" value="$(arg robot_name)/base_link"/> <!-- 根据自己的基座标系名称进行修改 -->
  7.  
    <param name="odom_frame" value="$(arg robot_name)/odom"/> <!-- 根据自己的里程计坐标系名称进行修改 -->
  8.  
    <param name="map_update_interval" value="0.01"/>
  9.  
    <!-- Set maxUrange < actual maximum range of the Laser -->
  10.  
    <param name="maxRange" value="8.0"/>
  11.  
    <param name="maxUrange" value="7.5"/>
  12.  
    <param name="sigma" value="0.05"/>
  13.  
    <param name="kernelSize" value="1"/>
  14.  
    <param name="lstep" value="0.05"/>
  15.  
    <param name="astep" value="0.05"/>
  16.  
    <param name="iterations" value="5"/>
  17.  
    <param name="lsigma" value="0.075"/>
  18.  
    <param name="ogain" value="3.0"/>
  19.  
    <param name="lskip" value="0"/>
  20.  
    <param name="minimumScore" value="10.0"/>
  21.  
    <param name="srr" value="0.01"/>
  22.  
    <param name="srt" value="0.02"/>
  23.  
    <param name="str" value="0.01"/>
  24.  
    <param name="stt" value="0.02"/>
  25.  
    <param name="linearUpdate" value="0.05"/>
  26.  
    <param name="angularUpdate" value="0.05"/>
  27.  
    <param name="temporalUpdate" value="-1.0"/>
  28.  
    <param name="resampleThreshold" value="0.5"/>
  29.  
    <param name="particles" value="80"/>
  30.  
    <param name="xmin" value="-2.0"/>
  31.  
    <param name="ymin" value="-2.0"/>
  32.  
    <param name="xmax" value="2.0"/>
  33.  
    <param name="ymax" value="2.0"/>
  34.  
    <param name="delta" value="0.05"/>
  35.  
    <param name="llsamplerange" value="0.01"/>
  36.  
    <param name="llsamplestep" value="0.01"/>
  37.  
    <param name="lasamplerange" value="0.005"/>
  38.  
    <param name="lasamplestep" value="0.005"/>
  39.  
    <remap from="scan" to="$(arg scan)"/>
  40.  
    </node>
  41.  
    </launch>
学新通

9、此刻可以看到Rviz已开始出现正常的地图,同时终端的黄色警告也停止了跳动

学新通

 10、接下来你可以可以快乐的玩耍Jackal模型啦!比如在Rviz上点击一个Goal,底盘就会自动导航过去了。

五、高级选项

打开 jackal_ws/src/multi_jackal_tutorials/launch/one_jackal.launch 文件:

  1.  
    <?xml version="1.0"?>
  2.  
     
  3.  
    <launch>
  4.  
    <arg name="ns" default="robot_1"/>
  5.  
    <arg name="config" default="front_laser"/>
  6.  
    <arg name="config_id" default="0"/>
  7.  
    <arg name="world" default="multi_robot_world_2.world"/> <!-- turtlebot3_house multi_robot_world_2 -->
  8.  
    <arg name="gui" default="true"/>
  9.  
    <arg name="rviz" default="true"/>
  10.  
     
  11.  
    <!-- Start Gazebo. -->
  12.  
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
  13.  
    <arg name="use_sim_time" value="true"/>
  14.  
    <arg name="gui" value="$(arg gui)"/>
  15.  
    <arg name="world_name" value="$(find multi_jackal_tutorials)/worlds/$(arg world)"/>
  16.  
    </include>
  17.  
     
  18.  
    <!-- Spawn the robot. -->
  19.  
    <include file="$(find multi_jackal_base)/launch/jackal_base.launch">
  20.  
    <arg name="ns" value="$(arg ns)"/>
  21.  
    <arg name="config" value="$(arg config)"/>
  22.  
    <arg name="config_id" value="$(arg config_id)"/>
  23.  
    <arg name="use_move_base" value="true"/>
  24.  
    </include>
  25.  
     
  26.  
    <!-- View in RVIZ. -->
  27.  
    <group if="$(arg rviz)">
  28.  
    <node name="rviz" pkg="rviz" type="rviz" ns="$(arg ns)" args="-d $(find multi_jackal_tutorials)/rviz/one_jackal.rviz" >
  29.  
    <remap from="/move_base_simple/goal" to="/$(arg ns)/move_base_simple/goal"/>
  30.  
    </node>
  31.  
    </group>
  32.  
     
  33.  
    </launch>
学新通

最前面的六个参数都是可以改变的,分别可以有以下选择:

  1.  
    ns :这个是机器人前缀,可随意更改,只要保证 gmapping.launch 中的 robot_name 和它对应上即可
  2.  
    config :可以选择 base 、twocams、front_laser、alvartags、front_bumblebee2等等
  3.  
    config_id :这个通常是 0
  4.  
    world :可以选择 empty、multi_robot_world_2、stuff、turtlebot3_house等等
  5.  
    gui :是否开启 Gazebo界面
  6.  
    rviz :是否开启 Rviz

当然,子目录层级中的一些launch文件里也是有很多可选配置,后续教程如果用上,会一个一个地进行讲解。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfbcbhj
系列文章
更多 icon
同类精品
更多 icon
继续加载