【ROS】入门(二)
什么是SLAM
同时定位与地图创建,通过激光雷达对障碍物的扫射绘成栅格地图,将栅格地图的特征(参照物)进行匹配和拼接,就可以完成建图啦!
Hector_Mapping初体验
在index.ros.rog中搞清楚Hector_Mapping的发布话题的订阅话题:
在终端下载功能包
$ sudo apt install ros-noetic-hector-mapping
过程
$ roslaunch wpr_simulation wpb_stage_slam.launch
$ rosrun hector_mapping hector_mapping
$ rosrun rviz rviz
$ rosrun rqt_robot_steering rqt_robot_steering
通过launch文件启动Hector_Mapping
在catkin_ws/src/中新建一个软件包slam_pkg
$ catkin_create_pkg slam_pkg roscpp rospy std_msgs
在VScode中的slam_pkg中创建一个launch文件
将要创建的launch文件放在launch文件夹中
<launch>
<include file="$(find wpr_simulation)/launch/wpb_stage_slam.launch">
<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<param name="map_update_distance_thresh" value="0.1"/> ##修改hector_mapping功能包的参数,在ros index中可以找到对应参数名
<param name="map_update_angle_thresh" value="0.1"/>
<param name="map_pub_period" value="0.1"/>
</node>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find slam_pkg)/rviz/slam.rviz"/>
<node pkg="rqt_robot_steering type="rqt_robot_steering" name="rqt_robot_steering"/>
</launch>
初识ROS的TF系统
TF是TransForm的缩写,主要描述的是两个坐标系的空间关系,可以理解为坐标系变换,如下地图坐标系和机器人坐标系的距离(x,y)和角度偏移量(z)就属于一个坐标系
TF的消息结构:
tf树:
里程计在激光雷达SLAM中的作用
里程计
一种软件算法,根据电机的转动数据,计算机器人的位移信息
Gmapping核心算法
先使用里程计推算机器人的位移,然后通过雷达点云贴合障碍物轮廓,修正里程计误差的方法
Gmapping的使用
Subscribed Topic
①tf(tf/tfMessage)
雷达坐标系——>base_link
base_link——>odom
②scan(sensor_msgs/LaserScan)
Published Topic
①map_metadata(nav_msgs/MapMetaData)
②map(nav_msgs/OccupancyGrid)
③~entropy(std_msgs/Float64)
Provided tf Transforms
map——>odom
地图的保存和加载
功能包:map_server
保存
rosrun map_server map_saver #在主文件夹中运行
加载
rosrun map_server map_server mymap.yaml
rosrun map_server map_saver #在主文件夹中运行
### 加载
rosrun map_server map_server mymap.yaml