大学生智能汽车竞赛系列教程 第二章 建图功能包创建教程
一、建图指导
请按照先前教程完成ros的安装、工作空间(gazebo_test_ws)的创建和仿真环境的搭建。
1.1 在gazebo_test_ws/src下创建建图功能包gazebo_map
- 打开终端依次输入如下指令:
cd gazebo_test_ws/src
catkin_create_pkg gazebo_map //功能包创建完毕
cd ..
catkin_make //编译功能包
完成编译后,确认是否将该路径添加到source中
- 打开终端输入如下指令:
sudo gedit ~/.bashrc //若没有安装gedit,则使用install指令安装
下拉文件至末查看是否有如下路径
source ~/gazebo_test_ws/devel/setup.bash
- 若不存在,输入如下指令:
echo "source ~/gazebo_test_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc //使配置的环境变量生效
1.2 在gazebo_map文件夹下创建cfg,launch,map三个文件夹
- 打开终端输入如下指令:
cd gazebo_test_ws/src/gazebo_map
mkdir cfg launch map
cfg文件夹用于存储配置文件,launch文件夹用于存储节点启动文件,map用于存储建图完成后的图片和配置文件(yaml)
1.3 安装建图功能包
- 使用git工具下载cartographer_ros包, 打开终端输入如下指令:
git clone https://github.com/ros2/cartographer_ros
- 如果github存在网络问题可以使用apt命令安装 cartographer_ros包, 打开终端输入如下指令:
sudo apt-get install ros-melodic-cartographer-ros
复制carto包中的demo_revo_lds.launch文件至gazebo_map/launch目录下
复制carto包中的revo_lds.lua文件至gazebo_map/cfg目录下
cp cartographer_ros/cartographer_ros/launch/demo_revo_lds.launch gazebo_test_ws/src/gazebo_map/launch
cp cartographer_ros/cartographer_ros/configuration_files/revo_lds.lua gazebo_test_ws/src/gazebo_map/cfg
1.4 修改相应文件
1.4.1 在gazebo_map/launch目录下打开demo_devo_lds.launch文件
- 打开终端输入如下指令:
sudo gedit gazebo_test_ws/src/gazebo_map/launch/demo_revo_lds.launch
修改
-configuration_directory $(find cartographer_ros)/configuration_files
修改为
-configuration_directory $(find gazebo_map)/cfg
————————————————————————————————
<remap from="scan" to="horizontal_laser_2d" />
修改为
<remap from="scan" to="scan" />
————————————————————————————————
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
修改为
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find gazebo_map)/cfg/demo.rviz" />
————————————————————————————————
删除
<node name="playbag" pkg="rosbag" type="play"
args="--clock $(arg bag_filename)" />
将ucar_plane文件夹中的end_plane和start_plane复制到.gazebo/models下(.gazebo为隐藏文件,如果没有models请自行创建此文件夹)
1.4.2 在gazebo_map/cfg目录下打开revo_lds.lua文件
- 打开终端输入如下指令:
sudo gedit gazebo_test_ws/gazebo_map/cfg/revo_lds.lua
修改
tracking_frame = "horizontal_laser_link",
published_frame = "horizontal_laser_link",
修改为
tracking_frame = "base_link",
published_frame = "base_link",
1.5 启动小车建图
- 打开终端输入如下指令:
roslaunch gazebo_pkg race.launch
roslaunch gazebo_map demo_revo_lds.launch
执行第二条代码时若遇到cartographer包没有安装现象,执行命令
sudo apt-get install ros-melodic-cartographer*
等待安装完毕(若其中还遇到其他功能包缺失现象按照error提示安装即可),重新执行三条指令。
1.5.1 保存Rviz配置
rviz启动后点击左下角add,在topic中选择laserscan,map,在display中选择robotmodel。添加完毕后,点击左上角file—>save config as 文件命名为demo.rviz存储在gazebo_map/cfg目录下
关闭所有终端,重新执行
roslaunch gazebo_pkg race.launch
roslaunch gazebo_map demo_revo_lds.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
1.5.2 保存地图
观察rviz中显示的图像,完成建图后保存地图
rosrun map_server map_saver -f mapname
若所建地图不够好,请自行调整阈值参数。–occ为无法通行的阈值,–free为可通行的阈值。
若–occ过高,则可能出现墙体边缘出现灰色未探索地块;若–occ过低,则无墙体部分可能会被凭空建墙。
若–free过高,则可能出现墙体被认为是*区域;若–free过低,则*区域可能出现灰色未探索地块。
以上情况皆可能影响定位效果,请选手们核对所建地图中墙体(黑)、*区域(白)、未探索区域(灰)是否正确,若不正确,请自行调整阈值重新建图。
具体可见官方wikihttp://wiki.ros.org/map_server
例如
rosrun map_server map_saver --occ 70 --free 30 -f mapname
若无法执行则是map_server没有安装,执行
- 打开终端输入如下指令:
sudo apt-get install ros-melodic-map-server
source ~/.bashrc
重启终端,执行保存建图指令完成建图,保存的地图(xxx.pgm与xxx.yaml文件)一般是保存在根目录下,手动移动至gazebo_map/map目录下,完成建图操作。