ROS SLAM建图
  2HYj5KnVjsQP 2023年11月12日 36 0


零、前言

工作空间:/home/gfp/demo06_ws_7_2

新加文件

nav01_slam.launch

主要功能包

gmapping(首次需安装)

核心节点

slam_gmapping,该节点包含“订阅的Topic、发布的Topic、服务、相关参数” gmapping节点相关launch文件:具体就是配置上面说的这几项的配置。详细见网站。

代码

<launch>
    <param name="use_sim_time" value="true"/>
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"> <!--gmapping包的核心节点就叫slam_gmapping,name随便取的-->
    <remap from="scan" to="scan"/>  <!--雷达发布消息时,就叫scan-->

    <!-- 二、【坐标系设置】 -->
    <param name="base_frame" value="base_footprint"/><!--机器人基坐标系base_frame,必须设置为底盘坐标系base_footprint-->
    <param name="map_frame" value="map"/> <!--地图坐标系,设置为map或者随便写一个都可以-->
    <param name="odom_frame" value="odom"/> <!--里程计坐标系-,设置为odom或者随便写一个都可以-->

    <!-- 【各个参数设置】 -->
    <param name="map_update_interval" value="5.0"/> <!--地图更新时间 5s-->
    <param name="maxUrange" value="16.0"/><!--雷达最大扫描距离 16m-->
    <!-- 下面可以使用默认值 -->
    <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="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.5"/>
    <param name="temporalUpdate" value="3.0"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="30"/>
    <param name="xmin" value="-50.0"/>
    <param name="ymin" value="-50.0"/>
    <param name="xmax" value="50.0"/>
    <param name="ymax" value="50.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"/>
    </node>

    <!-- 坐标系变换 -->
    <node pkg="joint_state_publisher" name="joint_state_publisher" type="joint_state_publisher" /> <!--Rviz显示机器人模型时使用-->
    <node pkg="robot_state_publisher" name="robot_state_publisher" type="robot_state_publisher" /> <!-- 坐标变换:雷达坐标系→基坐标系-->

    <node pkg="rviz" type="rviz" name="rviz" />
    <!-- 可以保存 rviz 配置并后期直接使用-->

    <!-- <node pkg="rviz" type="rviz" name="rviz" args="-d $(find nav_demo)/config/nav_test.rviz" /> -->

    </launch>


一、启动ros核心,以及添加环境变量

roscore(只需启动一次) source ./devel/setup.bash (每个终端都需要,并在工作空间source才起效)


二、先启动 Gazebo 仿真环境(此过程略)

roslaunch urdf02_gazebo demo03_env.launch(这个是自己写的仿真环境文件,仅用于仿真)


三、然后再启动地图绘制的 launch 文件:

roslaunch 包名 launch文件名 roslaunch nav_demo nav01_slam.launch(详见上面代码部分)


四、启动键盘键盘控制节点,用于控制机器人运动建图

rosrun teleop_twist_keyboard teleop_twist_keyboard.py (安装指令:sudo apt-get install ros-melodic-teleop-twist-keyboard )


五、在 rviz 中添加组件,显示栅格地图


1. 在rviz中添加机器人模型:

ROS SLAM建图_自定义

2. 添加雷达数据

ROS SLAM建图_坐标变换_02


3. 添加TF组件(可加可不加)

ROS SLAM建图_工作空间_03


odmo就是底盘发送的里程计相关的坐标变换

map就是slam发布的坐标系变换

在初始位置时,base_footprint和上面odmo以及map三者是基本重合的,但满足“base_footprint指向odom,odom指向map的关系”。

随着车子的行走,odom和map会偏移的越来越多。

4. 通过slam构建地图

ROS SLAM建图_自定义_04


注意区分:一个是话题,另一个是根坐标系。

  1. **Map中的Topic选择/map:**这是一个Topic(slam_gmapping节点发布的Topic),是固定的,不可自定义的。

ROS SLAM建图_工作空间_05

  1. **Global Options中的Fixed Frame选择map:**这个是根坐标系。自定义名称为map。

ROS SLAM建图_自定义_06

5. 将配置另存为一个rviz文件,方便以后直接调用

ROS SLAM建图_自定义_07

6. 绘制地图

在rviz中,让小车绕着地图走一圈(通过键盘节点控制运动,rviz和gazebo会同步运动),地图就能绘制完毕了。

ROS SLAM建图_工作空间_08


ROS SLAM建图_自定义_09

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读