SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)

引言

这是一段比较完整的教程。将分为四篇文章四部分内容:

  • 搭建gazebo仿真环境,并且在虚拟环境中运行slam算法,保存环境地图
  • 使用map_merge,多个机器人同时slam建图
  • 使用map_server打开保存的地图,并且使acml定位和move_base进行自主导航
  • 使用explore_lite功能包实现机器人边自主导航,边构建地图
    PS:文章内容不包括相应功能包的安装,使用的环境是melodic,如果有版本不一致,可能需要做小的修改
    github

第一部分 搭建gazebo仿真环境

使用gazebo的building_editor搭建地图

  • 打开building_editor
    在这里插入图片描述
  • 点击左侧的Wall,在白板上画出二维地图,就会自动生成三维地图了。如果希望构建更复杂,比如带坡度的地图,也可以使用三维建模软件设计后,导入到gazebo中这里就不认真介绍了
    在这里插入图片描述
  • 退出editor并点击save,建议拖动三维模型,使坐标原点在地图中,不然之后设置机器人出生点时会很不便利
    在这里插入图片描述
  • 最后退出gazebo并保存地图为xxx.world文件,如果使用虚拟机,会遇到保存界面卡住的情况,这时候最小化窗口再打开可以解决问题。

使用launch文件加载world文件

  • 先创建功能包,我取名为gazebo_tutorials
  • 添加两个文件夹launch和world,将你刚刚保存的world文件保存在world文件夹中
  • 创建launch文件,我将它取名为create_world.launch
<launch>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
     <arg name="world_name" value="$(find gazebo_tutorials)/world/maze.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>  
</launch>

catkin_make编译一下,使用命令roslaunch gazebo_tutorials create_world.launch 即可启动仿真环境

第二部分 放入你的机器人

你可以为自己的机器人建模,导出urdf模型,但是为了通用性,我们这里直接使用turtlebot3的模型。
使用turtlebot我参考了/opt/ros/melodic/share/turtlebot3_gazebo文件夹下的文件,里面包含了发行包的示例文件,你去网上搜gazebo仿真都是让你直接运行了这些文件,要学会自己看这些文件,模仿,然后就可以使用到自己的项目中了。

  • 写一个名为place_robot.launch的文件放置机器人,TURTLEBOT3_MODEL是你自己设置的turtlebot种类,你可以使用export TURTLEBOT3_MODEL=buger设置机器人种类为buger,对应了burger的模型
<launch>
    <!-- 机器人初始化位置参数 -->
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="robot_name"  default="tb3_0"/>
  <arg name="robot_x_pos" default="0.0"/>
  <arg name="robot_y_pos" default="0.0"/>
  <arg name="robot_z_pos" default=" 0.0"/>
  <arg name="robot_yaw"   default=" 0.0"/>
  <!-- 创建机器人 -->
  <group ns = "$(arg robot_name)">
    <!-- 导入机器人参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />
    <!-- 机器人位置发布节点 -->
    <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen">
      <param name="publish_frequency" type="double" value="50.0" />
      <param name="tf_prefix" value="$(arg robot_name)" />
    </node>
    <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model $(arg robot_name) -x $(arg robot_x_pos) -y $(arg robot_y_pos) -z $(arg robot_z_pos) -Y $(arg robot_yaw) -param robot_description" />
  </group>    

</launch>

roslaunch gazebo_tutorials place_robot.launch可以看到机器人出生在了原点
在这里插入图片描述
使用rostopic listrqt_graphrosrun rqt_tf_tree rqt_tf_tree 等命令观察一下,以后调试可以经常使用这些东西进行观察
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外,我们可以使用roslaunch gazebo_tutials place_robot.launch robot_name:=tb3_1 robot_x_pos:=1.0命令创建不同位置的第二、三台机器人,我们到最后一篇再做这些事情,现在先保持一台机器人。

第三部分 启动SLAM

我在仓库中配置了gmapping和cartorgrapher算法的配置文件,这里只放最常用的gmapping算法的配置文件,看到终端开始打印数据,即开启成功。

<launch>
  <arg name="ns" default="tb3_0"/>
  <!-- Gmapping -->
  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen" ns="$(arg ns)">
    <param name="base_frame" value="$(arg ns)/base_footprint"/>
    <param name="odom_frame" value="$(arg ns)/odom"/>
    <param name="map_frame"  value="$(arg ns)/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="4.0"/>
    <param name="minimumScore" value="100"/>
    <param name="linearUpdate" value="0.2"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="0.5"/>
    <param name="delta" value="0.05"/>
    <param name="lskip" value="0"/>
    <param name="particles" value="120"/>
    <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="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
  </node>
</launch>

在终端运行rviz,点击左下角add,在by topic中找到map添加进去,即可看到构建的地图,rviz也可以保存配置,这里先不保存,等后面多台机器人的时候再详细讲,包括坐标的显示、坐标系的选择等。
fixed_frame选择为tb3_0/map,即将世界坐标系设置为地图坐标
在这里插入图片描述
我们可以看到,是gazebo这个环境直接给gmapping节点提供了scan这个雷达数据的topic
在这里插入图片描述

第四部分 使用键盘控制构建地图并保存

键盘控制机器人

使用命令ROS_NAMESPACE=tb3_0 rosrun teleop_twist_keyboard teleop_twist_keyboard.py 即可,没有这个控制包的可以去装一个,根据提示操作即可,如果机器人运动和你期望不一样,可以减慢机器人的速度再尝试。

保存地图

使用命令将ROS_NAMESPACE=tb3_0 rosrun map_server map_saver -f ~/catkin_ws/src/gazebo_tutorials/map/map保存构建的地图
在这里插入图片描述
保存下来有两个文件,一个是pgm文件,就是构建的地图,是一张0-255的灰度图。另一个yaml文件是描述地图的,resolution=0.05代表一个像素格0.05米,origin代表图片左下方像素点代表的坐标。
这样,我们第一课的任务就完成了。

  • 21
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
SLAM精度评估中的EVO是指使用EVO工具来评估SLAM系统的轨迹误差。EVO是一个开源的工具,用于评估SLAM系统的性能。它提供了一系列命令和功能,可以计算和可视化SLAM系统的轨迹误差。 在EVO中,有几个常用的命令可以用来评估SLAM系统的轨迹误差。其中,evo_traj命令用于评估轨迹误差,可以使用手写的ATE(绝对位姿误差)和RPE(相对位姿误差)来比较SLAM系统的性能。\[1\] 相对位姿误差主要用于比较运动(姿态增量),而不是进行绝对位姿的比较。相对位姿误差可以给出局部精度,例如SLAM系统每米的平移或旋转漂移量。可以使用evo_rpe命令来计算相对位姿误差,并通过设置参数来进行可视化和保存结果。\[2\] 另外,evo_ape命令可以用于计算ATE(绝对位姿误差),并提供了可视化和保存结果的功能。可以使用该命令来评估SLAM系统在KITTI数据集上的性能。\[3\] 总之,EVO是一个用于评估SLAM系统性能的工具,可以通过计算和可视化轨迹误差来评估SLAM系统的精度。可以使用evo_traj、evo_rpe和evo_ape等命令来进行评估和分析。 #### 引用[.reference_title] - *1* *2* [SLAM精度测评——EVO进阶](https://blog.csdn.net/Darlingqiang/article/details/123534388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ros中SLAM的EVO、APE测评——SLAM精度测评(一)](https://blog.csdn.net/Yangy_Jiaojiao/article/details/124419966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值