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

引言

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

第一部分 搭建gazebo仿真环境

使用gazebo的building_editor搭建地图

使用launch文件加载world文件

<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仿真都是让你直接运行了这些文件,要学会自己看这些文件,模仿,然后就可以使用到自己的项目中了。

<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可以看到机器人出生在了原点
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)
使用rostopic listrqt_graphrosrun rqt_tf_tree rqt_tf_tree 等命令观察一下,以后调试可以经常使用这些东西进行观察
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)

第三部分 启动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,即将世界坐标系设置为地图坐标
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)
我们可以看到,是gazebo这个环境直接给gmapping节点提供了scan这个雷达数据的topic
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)

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

键盘控制机器人

使用命令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保存构建的地图
SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)
保存下来有两个文件,一个是pgm文件,就是构建的地图,是一张0-255的灰度图。另一个yaml文件是描述地图的,resolution=0.05代表一个像素格0.05米,origin代表图片左下方像素点代表的坐标。
这样,我们第一课的任务就完成了。

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月28日 下午12:56
下一篇 2023年3月28日 下午1:00

相关推荐