【运行背景】
ROS1 20.04 noetic
目录
【运行背景】
【安装步骤】
【安装Rtabmap】
【安装pointcloud-to-laserscan】
【Gazebo仿真】
【小车URDF模型】
【编写launch文件】
【配置Rtabmap】
【Rtabmap配置文件】
【点云转雷达信号】
【整合启动文件】
【运行Rtabmap仿真slam】
【安装步骤】
【安装Rtabmap】
sudo apt install ros-noetic-rtabmap-*
【安装pointcloud-to-laserscan】
sudo apt install ros-noetic-pointcloud-to-laserscan
【Gazebo仿真】
sudo apt install ros-noetic-rtabmap-*
【安装pointcloud-to-laserscan】
sudo apt install ros-noetic-pointcloud-to-laserscan
【Gazebo仿真】
均在spark-slam-gazebo工作空间下
【小车URDF模型】
编写为spark1_description_rtabmap.urdf,Cartographer需要imu和pointcloud的数据,所以添加这两部分的传感器
a)添加深度摄像头
true 20.0 ${60.0*3.14/180.0} R8G8B8 640 480 0.05 5.0 camera true20.0 rgb/image_raw depth/image_raw depth/points rgb/camera_info depth/camera_info upper_kinect_pointcloud_link 0.1 0.0 0.0 0.0 0.0 0.0 0.4
b) 添加imu
true
true
20
true
__default_topic__
imu
imu_link
20
0.0
0 0 0
imu_link
0 0 0 0 0 0
c)确保rviz上点云显示正确,添加虚拟关节,关联到摄像机的link,调整rpy值(rqy分别对应着xyz轴,遵循右手定理),将点云调整到正确位置
将深度摄像头插件中的frameName设为新增加的link(这一部分和上述添加摄像头代码有重合部分)
camera true20.0 rgb/image_raw depth/image_raw depth/points rgb/camera_info depth/camera_info upper_kinect_pointcloud_link 0.1 0.0 0.0 0.0 0.0 0.0 0.4
【编写launch文件】
取名为spark_rtabmap_slam_gazebo_rviz.launch,内容如下:
【配置Rtabmap】
【Rtabmap配置文件】
编写spark_mapping_astrapro.launch文件启动Rtabmap
主要修改rgb/image,depth/image,rgb/camera_info和/scan的相关话题,由于采用仿真环境,摄像机相关话题名称由URDF文件中确定,详细可查看上文深度摄像头部分
【点云转雷达信号】
编写pointcloud2scan.launch
target_frame: camera_link transform_tolerance: 0.01 min_height: 0.0 max_height: 1.0 angle_min: -1.5708 angle_max: 1.5708 angle_increment: 0.0087 scan_time: 0.3333 range_min: 0.45 range_max: 4.0 use_inf: true #concurrency_level affects number of pc queued for processing and the number of threadsused # 0: Detect number of cores # 1: Single threaded # 2: inf : Parallelism level concurrency_level: 1
【整合启动文件】
将上面用到的节点编写到launch文件
再将gazebo仿真和rtabmap结合一起,修改之前的spark_rtabmap_slam_gazebo_rviz.launch文件
【运行Rtabmap仿真slam】
终端输入
roslaunch spark1_description spark_rtab_slam_gazebo_rviz.launch
启动后,添加简易围墙和障碍物
在rviz上查看
通过键盘控制完成建图
将Rtabmap cloud设为不显示
通过map_server保存地图
终端显示保存的位置



