gazebo小车模型创建及仿真详见之前博客
参考链接
- 安装 gmapping 包(用于构建地图):
sudo apt install ros-melodic-gmapping
- 安装地图服务包(用于保存与读取地图):
sudo apt install ros-melodic-map-server
- 安装 navigation 包(用于定位以及路径规划):
sudo apt install ros-melodic-navigation
按下图结构在 nav_demo 下依次创建
文件夹: config(也可按照步骤之后创建)、map(也可按照步骤之后创建)、launch
文件:nav01_slam.launch、nav02_map_save.launch、nav03_map_server.launch
<launch> <!-- 仿真环境下,将该参数设置为true --> <param name="use_sim_time" value="true"/> <!-- gmapping --> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"> <!-- 设置雷达话题 --> <remap from="scan" to="scan"/> <!-- 关键参数:坐标系 --> <param name="base_frame" value="base_footprint"/><!--底盘坐标系--> <param name="map_frame" value="map"/> <param name="odom_frame" value="odom"/> <!--里程计坐标系--> <param name="map_update_interval" value="5.0"/> <param name="maxUrange" value="16.0"/> <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" /> <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 my_nav_sum)/rviz/gmapping.rviz"/> --> </launch>
复制
source ./devel/setup.bash
roslaunch mycar environment.launch
复制
source ./devel/setup.bash
roslaunch nav_demo nav01_slam.launch
复制
rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.3 _turn:=0.5
复制
每隔 5s 更新一次地图
<launch> <arg name="filename" value="$(find nav_demo)/map/nav" /> <node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" /> </launch>
复制
在 nav_demo 下新建文件夹 map
新建终端,保存地图
source ./devel/setup.bash
roslaunch nav_demo nav02_map_save.launch
复制
# 1、声明地图图片资源的路径
image: /home/yehuo/mycar_ws/src/nav_demo/map/nav.pgm
# 2、地图刻度尺单位是 米/像素
resolution: 0.050000
# 3、地图的位姿(按照右手坐标系,地图右下角相对于 rviz 中原点的位姿)
# 值1:x方向上的偏移量
# 值2:y方向上的偏移量
# 值3:地图的偏航角度(单位:弧度)
origin: [-50.000000, -50.000000, 0.000000]
# 地图中的障碍物判断:
# 最终显示结果:白色是可通行区域,黑色是障碍物,蓝灰是未知区域
# 判断规则:
# 1、地图中的每个像素都有取值 [0,255] 255:白色 0:黑色
# 2、根据像素值计算一个比例: p = (255 - 像素值)/ 255 ==> 0:白色 1:黑色
# 3、判断是否是障碍物, p > occupied_thresh 就是障碍物
# p < free_thresh 就无障碍物
# 4、占用阈值
occupied_thresh: 0.65
# 5、空闲阈值
free_thresh: 0.196
# 6、取反(1:黑的区域变白的,白的区域变黑的)
negate: 0
复制
<launch> <!-- 设置地图的配置文件 --> <arg name="map" default="nav.yaml" /> <!-- 运行地图服务器,并且加载设置的地图--> <node name="map_server" pkg="map_server" type="map_server" args="$(find nav_demo)/map/$(arg map)"/> </launch>
复制
读取地图
source ./devel/setup.bash
roslaunch nav_demo nav03_map_server.launch
复制
打开一个新的终端,启动 rviz