bag 包进行处理
bag包进行分析
1
| rosbag info rslidar-outdoor-gps.bag
|
可以看见包的基本信息,主要是看topic的消息类型和名字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| path: rslidar-outdoor-gps.bag version: 2.0 duration: 3:33s (213s) start: Dec 01 2020 15:44:09.49 (1606808649.49) end: Dec 01 2020 15:47:43.48 (1606808863.48) size: 2.1 GB messages: 41623 compression: none [2064/2064 chunks] types: geometry_msgs/QuaternionStamped [e57f1e547e0e1fd13504588ffc8334e2] nav_msgs/Odometry [cd5e73d190d741a2f92e81eda573aca7] sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2] sensor_msgs/LaserScan [90c7ef2dc6895d81024acba2ac42f369] sensor_msgs/NavSatFix [2d3a8cd499b9b4a0249fb98fd05cfa48] sensor_msgs/PointCloud2 [1158d486dd51d683ce2f1be655c3c181] tf2_msgs/TFMessage [94810edda583a504dfda3829e70d7eec] topics: /fix 1070 msgs : sensor_msgs/NavSatFix /front_scan 4127 msgs : sensor_msgs/LaserScan /heading 214 msgs : geometry_msgs/QuaternionStamped /imu 21400 msgs : sensor_msgs/Imu /odom_scout 4279 msgs : nav_msgs/Odometry /rslidar_points 4126 msgs : sensor_msgs/PointCloud2 /tf 6406 msgs : tf2_msgs/TFMessage (2 connections)
|
重新记录部分信息
首先设置
1
| rosparam set use_sim_time true
|
此时表示,ros使用的时间是bag包里面的时间,而不是现在的时间
表示,记录这两个topic的内容。
重新开一个终端,开始播放
1
| rosbag play --clock rslidar-outdoor-gps.bag
|
即可开始录制
cartographer运行实例
模拟一个2d的建图过程
打开文件cartographer_ros/launch/lx_rs1_2d_outdoor.launch
,修改一下bag的地址。编译后
1
| roslaunch catographer_ros lx_rs1_2d_outdoor.launch
|
即可。
在此launch文件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <launch> <arg name="bag_filename" default="/home/kong/lixiang_carto/bagfiles/rslidar-outdoor-gps-notf.bag"/>
<param name="/use_sim_time" value="true" />
<node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args=" -configuration_directory $(find cartographer_ros)/configuration_files -configuration_basename lx_rs16_2d_outdoor.lua" output="screen"> <remap from="points2" to="rslidar_points" /> <remap from="scan" to="front_scan" /> <remap from="odom" to="odom_scout" /> <remap from="imu" to="imu" /> </node>
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros" type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
<node name="rviz" pkg="rviz" type="rviz" required="true" args="-d $(find cartographer_ros)/configuration_files/lx_2d.rviz" />
<node name="playbag" pkg="rosbag" type="play" args="--clock $(arg bag_filename)" />
</launch>
|
还启动了rviz. required="true"
代表一旦rviz关闭,整个launch也要关闭
保存地图
执行脚本文件
其内容为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #!/bin/bash
source install_isolated/setup.bash
map_dir="${HOME}/lixiang_carto/map" map_name="2d-1"
# 检查文件夹是否存在, 如果不存在就创建文件夹 if [ ! -d "$map_dir" ];then echo "文件夹不存在, 正在创建文件夹" mkdir -p $map_dir fi
# finish slam rosservice call /finish_trajectory 0
# make pbstream rosservice call /write_state "{filename: '$map_dir/$map_name.pbstream'}"
# pbstream to map rosrun cartographer_ros cartographer_pbstream_to_ros_map \ -pbstream_filename=$map_dir/$map_name.pbstream \ -map_filestem=$map_dir/$map_name
|
主要修改一下map_dir
,后面的目录,如果要修改为自己的指定目录。会在指定目录生成pbstream,pgm以及yaml文件
纯定位模式
1
| roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
|
修改文件内容lx_rs16_2d_outdoor_localization.launch
,的bag文件名字和pbstream的文件名字。即可
此过程和SLAM是一样的,虽然暂时不知道他在干嘛。知道是需要提前加载地图的,是不保存地图的
读取所有的submap来生成ros的map
3d地图
1
| roslaunch cartographer_ros lx_rs16_3d.launch
|
轨迹保存
使用asset生成3d点云地图
使用如下的命令可以生成pcd文件
1
| roslaunch cartographer_ros assets_writer_3d.launch
|
展示点云
1 2
| sudo apt install pcl-tools pcl xxx.pcd
|