【教程一】基于Jackal底盘模型搭建ROS Gazebo仿真

一、创作背景

        现在到网上搜索“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_simulatehttps://github.com/RustSon/multi_jackal_simulate

四、部署流程

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

└── jackal_ws/src
    ├── multi_jackal_base
    ├── multi_jackal_control
    ├── multi_jackal_description
    ├── multi_jackal_nav
    ├── multi_jackal_tutorials
    ├── navigation-melodic-devel
    ├── navigation_msgs
    └── README.md

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

cd jackal_ws

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

catkin_make -j4

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

sudo apt-get install ros-melodic-navigation

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

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

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

加载一个底盘,运行:
cd jackal_ws/
source devel/setup.bash
roslaunch multi_jackal_tutorials one_jackal.launch

加载三个底盘,运行:
cd jackal_ws/
source devel/setup.bash
roslaunch multi_jackal_tutorials three_jackal.launch

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

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

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

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

方法一:

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

方法二:

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

首先安装gmapping工具包:
sudo apt-get install ros-melodic-gmapping

其次,进入 jackal_ws/src/multi_jackal_tutorials/launch 文件目录下:
gedit gmapping.launch
将下方内容复制到该launch中,并保存

另开终端,启动建图:
source devel/setup.bash
roslaunch multi_jackal_tutorials gmapping.launch
<launch>
  <arg name="robot_num" value="1"/>
  <arg name="robot_name" value="robot_$(arg robot_num)"/>
  <arg name="scan" default="/$(arg robot_name)/front/scan" />     <!-- 根据自己发布scan名称进行修改 -->
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
        <param name="base_frame" value="$(arg robot_name)/base_link"/>     <!-- 根据自己的基座标系名称进行修改 -->
        <param name="odom_frame" value="$(arg robot_name)/odom"/>     <!-- 根据自己的里程计坐标系名称进行修改 -->
        <param name="map_update_interval" value="0.01"/>
        <!-- Set maxUrange < actual maximum range of the Laser -->
        <param name="maxRange" value="8.0"/>
        <param name="maxUrange" value="7.5"/>
        <param name="sigma" value="0.05"/>
        <param name="kernelSize" value="1"/>
        <param name="lstep" value="0.05"/>
        <param name="astep" value="0.05"/>
        <param name="iterations" value="5"/>
        <param name="lsigma" value="0.075"/>
        <param name="ogain" value="3.0"/>
        <param name="lskip" value="0"/>
        <param name="minimumScore" value="10.0"/>
        <param name="srr" value="0.01"/>
        <param name="srt" value="0.02"/>
        <param name="str" value="0.01"/>
        <param name="stt" value="0.02"/>
        <param name="linearUpdate" value="0.05"/>
        <param name="angularUpdate" value="0.05"/>
        <param name="temporalUpdate" value="-1.0"/>
        <param name="resampleThreshold" value="0.5"/>
        <param name="particles" value="80"/>
        <param name="xmin" value="-2.0"/>
        <param name="ymin" value="-2.0"/>
        <param name="xmax" value="2.0"/>
        <param name="ymax" value="2.0"/>
        <param name="delta" value="0.05"/>
        <param name="llsamplerange" value="0.01"/>
        <param name="llsamplestep" value="0.01"/>
        <param name="lasamplerange" value="0.005"/>
        <param name="lasamplestep" value="0.005"/>
        <remap from="scan" to="$(arg scan)"/>
    </node>
</launch>

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

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

五、高级选项

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

<?xml version="1.0"?>

<launch>
  <arg name="ns"        default="robot_1"/>
  <arg name="config"    default="front_laser"/>
  <arg name="config_id" default="0"/>
  <arg name="world"     default="multi_robot_world_2.world"/> <!-- turtlebot3_house multi_robot_world_2 -->
  <arg name="gui"       default="true"/>
  <arg name="rviz"      default="true"/>

  <!-- Start Gazebo. -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="use_sim_time" value="true"/>
    <arg name="gui"          value="$(arg gui)"/>
    <arg name="world_name"   value="$(find multi_jackal_tutorials)/worlds/$(arg world)"/>
  </include>
  
  <!-- Spawn the robot. -->
  <include file="$(find multi_jackal_base)/launch/jackal_base.launch">
    <arg name="ns"            value="$(arg ns)"/>
    <arg name="config"        value="$(arg config)"/>
    <arg name="config_id"     value="$(arg config_id)"/>
    <arg name="use_move_base" value="true"/>
  </include>
  
  <!-- View in RVIZ. -->
  <group if="$(arg rviz)">
    <node name="rviz" pkg="rviz" type="rviz" ns="$(arg ns)" args="-d $(find multi_jackal_tutorials)/rviz/one_jackal.rviz" >
      <remap from="/move_base_simple/goal" to="/$(arg ns)/move_base_simple/goal"/>
    </node>
  </group>

</launch>

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

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

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

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值