bag包分析-cartographer
Kong Liangqian Lv6

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包里面的时间,而不是现在的时间

1
rosbag record /imu /fix 

表示,记录这两个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>
<!-- bag的地址与名称 -->
<arg name="bag_filename" default="/home/kong/lixiang_carto/bagfiles/rslidar-outdoor-gps-notf.bag"/>

<!-- 使用bag的时间戳 -->
<param name="/use_sim_time" value="true" />

<!-- 启动cartographer -->
<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>

<!-- 生成ros格式的地图 -->
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

<!-- 启动rviz -->
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/lx_2d.rviz" />

<!-- 启动rosbag -->
<node name="playbag" pkg="rosbag" type="play"
args="--clock $(arg bag_filename)" />

</launch>

还启动了rviz. required="true"代表一旦rviz关闭,整个launch也要关闭

保存地图

执行脚本文件

1
./finish_slam_2d.sh

其内容为

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 

轨迹保存

1
./finish_slam_3d.sh

使用asset生成3d点云地图

使用如下的命令可以生成pcd文件

1
roslaunch cartographer_ros assets_writer_3d.launch

展示点云

1
2
sudo apt install pcl-tools
pcl xxx.pcd

 Comments