ORB SLAM 利用ROS运行自己的.bag数据集
- ORB_SLAM2 路径添加到 ROS 环境(记得更新)
gedit ~/bash.rc
ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:你的路径/ORB_SLAM2/Examples/ROS
保存
更新
source ~/.bash.rc
-
对ORB_SLAM2/Examples/ROS重新编译
进入ROS文件夹的build中重新编译
-
修改ORB_SLAM2 的 Mono 订阅的话题
查看自己的.bag的信息
rosbag info XXX.bag
将其中的image的topic复制过去
- 编译
./build.sh
./build_ros.sh
- 启动ros内核,运行ROS,发布数据消息
1.启动内核
roscore
2.ros运行orb slam
rosrun ORB_SLAM2 Mono 词袋路径 数据集的配置文件.yaml
3.数据集发布话题
rosbag play -r 0.5 xxx.bag 【以0.5倍速播放】
问题一:bag数据集是压缩的图片compressed,需要转换为raw格式类型的:
所需指令如下:
1. 压缩的图片的topic一般是XXXraw/compressed,
rosrun image_transport republish compressed in:=/usb_cam150/image_raw raw out:=/usb_cam150/image_raw
2. 存储raw类型图片
rosbag record -o raw.bag /usb_cam150/image_raw /usb_cam180/image_raw
3. 需要转换的compressed图像数据bag发布topic
rosbag play xxx.bag
4,抓换完成后可以用rviz来查看数据图像
打开终端,输入
rosrun rviz rviz
添加一个camera
运行图像数据集,在camera的topic添加该数据
注意:rviz中要修改Fixed Frame,根据frame_id更改
参考:将Rosbag中的Compressed类型的图像转换成raw类型
参考:rviz可视化
问题二:ORB SLAM2运行完毕后卡在最后一张图像中,无法保存关键帧轨迹
在System.cc中注释以下两行代码
if (mpViewer)
pangolin::BindToContext("ORB-SLAM2: Map Viewer");
如果是ROS运行orbslam2,轨迹文件保存在/Example/ROS目录下,自己也可以更改ros_mono_cc文件中的保存目录,用绝对路径
问题三:如何获得数据集的真实轨迹
1. 提示无法定位到package的某个节点,在自己package中的建立build,先cmake make一下
2. roslaunch package名 launch文件名启动
3. 修改rviz中的Fixed Frame,根据frame_id更改
4. 数据级play,发布topic