A-loam运行kitti及轨迹保存

慈云数据 2024-03-13 技术支持 141 0

目录

运行kitti数据

方法一、使用rosbag播放

方法二、使用kitti_helper.launch

故障:rviz界面没有图像

查看rosbag发布的topic

a-loam代码中所接收的topic

rqt

启动rqt

查看rqt界面

保存轨迹

方法一、简单的

 方法二、使用ros::Subscriber和回调函数

方法三、创建新节点用于保存轨迹

小结

总结


使用A-loam运行kitti数据集。

运行kitti数据集

方法一、使用rosbag播放

使用代码:

   roslaunch aloam_velodyne xxx.launch

   rosbag play /.../xxx.bag

其中,运行kitti数据集时,xxx.launch改为aloam_velodyne_HDL_64.launch,/.../xxx.bag改为所运行的rosbag文件,/...为该rosbag的路径。

具体操作如下:

开一个终端,运行

roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

再开一个终端,运行

rosbag play  /.../xxx.bag

 此时,若运行时rviz界面没有图像,可能是rosbag发布的topic和aloam代码中所接收的topic没有对应上,修改方法见下文故障:rviz界面没有图像部分。

方法二、使用kitti_helper.launch

按照A-loam的README.md所述:

## 4. KITTI Example (Velodyne HDL-64)

Download [KITTI Odometry dataset](http://www.cvlibs.net/datasets/kitti/eval_odometry.php) to YOUR_DATASET_FOLDER and set the `dataset_folder` and `sequence_number` parameters in `kitti_helper.launch` file. Note you also convert KITTI dataset to bag file for easy use by setting proper parameters in `kitti_helper.launch`.

```

    roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

    roslaunch aloam_velodyne kitti_helper.launch

```

  在两个终端中分别运行

roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

roslaunch aloam_velodyne kitti_helper.launch 

其中,kitti_helper.launch文件中的参数需要提前配置好。

该方法适合下载好的00-10序列。

故障:rviz界面没有图像

运行时rviz界面没有图像,可能是rosbag发布的topic和aloam代码中所接收的topic没有对应上。

查看rosbag发布的topic

打开终端,运行

rosbag info  /.../xxx.bag

其中,/.../xxx.bag为所要查看的rosbag路径及文件名。

以我的rosbag为例,截取一段打印输出信息如下:

 其中,topics是rosbag在play播放发布的topic话题。

topics中,激光点云的topic话题名称是/kitti/velo/pointcloud 。

a-loam代码中所接收的topic

aloam源代码中,scanRegistration.cpp文件中有a-loam所接收的topic,修改与rosbag发布的激光点云的topic话题名称对应。

scanRegistration.cpp的路径:/catkin_ws/src/A-LOAM-devel/src/scanRegistration.cpp

原文:

    ros::Subscriber subLaserCloud = nh.subscribe("/velodyne_points", 100, laserCloudHandler);

把原来的/velodyne_points修改为/kitti/velo/pointcloud,修改后:

 ros::Subscriber subLaserCloud = nh.subscribe("/kitti/velo/pointcloud", 100, laserCloudHandler);

再次编译

    cd ~/catkin_ws
    catkin_make
    source ~/catkin_ws/devel/setup.bash

编译成功后,运行kitti数据集。

运行结果示例:

图中,彩色点是正在处理的, 白色点是处理完成的,中间横线是运动轨迹。 

rqt

启动rqt

rqt是ROS的图形开发平台,是一个基于 Qt 的框架。使用“rqt_graph”指令可以显示当前系统运行情况,

如果你安装了rqt,

在新的终端中运行

rosrun rqt_graph rqt_graph

 或者

rqt_graph

弹出rqt界面。

如果没有弹出rqt界面,可能需要安装rqt,安装指令类似如下:

sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins

指令根据实际ROS版本修改。

查看rqt界面

正常弹出的rqt界面中,绘制有实时的node节点和topic话题信息。

可以点击右上角“Refresh ROS graph"按钮刷新界面。

本文运行a-loam时的图像如下:

只运行a-loam的roslauch命令

 再运行kitti的rosbag时:

多了左边rosbag的节点和话题,rosbag的激光点云的topic话题被scanRegistration节点接收。

还多了右下角的话题/tf,此时程序正常运行,rviz中有定位和地图结果。

rosbag播放完成后:

rosbag相关的节点和话题消失,程序运行结束。

通过rqt可以查看rosbag和aloam的运行情况,方便理解。

保存轨迹

原本的aloam不带有保存轨迹的程序,可以自己手动添加。

核心思路在于将/aft_mapped_to_init话题中的数据按照一定格式保存到txt中。

方法一、简单的

在aloam源代码laserMapping.cpp中修改代码,在laserOdometryHandler函数中添加保存轨迹代码。

laserMapping.cpp的位置:/catkin_ws/src/A-LOAM-devel/src/laserMapping.cpp

文件中,找到laserOdometryHandler函数的实现:

void laserOdometryHandler(const nav_msgs::Odometry::ConstPtr &laserOdometry)
{

在laserOdometryHandler函数的末尾追加

std::ofstream pose1("/your_path/your_file_name.txt", std::ios::app);
pose1.setf(std::ios::scientific, std::ios::floatfield);
//保存结果的精度,可调
pose1.precision(6);
pose1 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon