Ubuntu16.04,kinetic
在之前寫的博文《如何使用ROS查找rgbdslam代碼包框架的輸入》中提到,一開始不知道整體框架,只用感性認識去跑rgbdslamv2的包,是一個天大的錯誤。
修改launch文件對應不同camera的topic,顯然就是小白的做法。為什么呢?因為,經過測試后,發現rgbdslamv2調用的根本就不只是如下兩個topic,分別是彩色圖和深度圖:
<!-- Input data settings--> <!-- rgbd_dataset_freiburg1_xyz.bag --> <param name="config/topic_image_mono" value="/camera/rgb/image_color"/> <param name="config/topic_image_depth" value="/camera/depth/image"/>
感性認知上,以為修改這兩個,換了一個不同的傳感器,還是一樣的做法。
之后,錄制的rosbag,因為在rviz下,需要選擇frame id,才能查看圖像流。因此懷疑是錄取的數據包的問題(見《How to modify rosbag?如何修改rosbag?》),實質上也並不是。
只能往回走,看看能否用老方法來解決問題。幸虧手頭上有xtion,在使用xtion能實時跑rgbdslamv2。使用ros命令行(見《如何使用ros命令行顯示圖片》)查看過D435和rgbd_dataset_freiburg1_xyz.bag文件中的圖像流,發現無論是圖像大小合適數據格式,完全都是一樣的,這就很奇怪了。后來還曾懷疑過是不是launch文件中,rgbdslamv2從bagfile中獲得的特征不夠多(我自己使用D435record的bagfile紋理比較少,實際因為我想做的就是單一紋理的測試),因此不再GUI中顯示。在使用rgbd_dataset_freiburg1_xyz.bag跑rgbdslamv2,同時查看圖像流,發現GUI上的圖像,和image_view的UI上的圖像,是同時出現的,因此排除launch文件提取特征的相關參數對不能在GUI顯示圖像的影響。
只能先對bagfile進行測試。因此,使用xtion,同樣只在bagfile中record彩色圖和深度圖信息的包,但是離線同跑不動。
那么,問題肯定出現在這里。因此,不用查閱整個框架,就能知道,rgbdslamv2訂閱的肯定不只是那兩個topic了。
使用
rosbag info [bagfile]
查看rgbd_dataset_freiburg1_xyz.bag,里面有好幾種messages,
path: catkin_ws/src/rgbdslam_v2/bagfiles/rgbd_dataset_freiburg1_xyz.bag
version: 2.0
duration: 30.4s
start: May 10 2011 20:38:18.38 (1305031098.38)
end: May 10 2011 20:38:48.81 (1305031128.81)
size: 480.4 MB
messages: 25626
compression: bz2 [1598/1598 chunks; 29.14%]
uncompressed: 1.6 GB @ 54.1 MB/s
compressed: 479.4 MB @ 15.8 MB/s (29.14%)
types: sensor_msgs/CameraInfo [c9a58c1b0b154e0e6da7578cb991d214]
sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743]
sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2]
tf/tfMessage [94810edda583a504dfda3829e70d7eec]
visualization_msgs/MarkerArray [f10fe193d6fac1bf68fad5d31da421a7]
topics: /camera/depth/camera_info 798 msgs : sensor_msgs/CameraInfo
/camera/depth/image 798 msgs : sensor_msgs/Image
/camera/rgb/camera_info 798 msgs : sensor_msgs/CameraInfo
/camera/rgb/image_color 798 msgs : sensor_msgs/Image
/cortex_marker_array 3034 msgs : visualization_msgs/MarkerArray
/imu 15158 msgs : sensor_msgs/Imu
/tf 4242 msgs : tf/tfMessage
根據topics的情況,應該重新在launch文件中remap一下,修改為
<!-- remap to realsense --> <remap from="/camera/depth/camera_info" to="/camera/aligned_depth_to_color/camera_info"/> <remap from="/camera/depth/image" to="/camera/aligned_depth_to_color/image_raw"/> <remap from="/camera/rgb/camera_info" to="/camera/color/camera_info"/> <remap from="/camera/rgb/image_color" to="/camera/color/image_raw"/> <!-- lack of topic /cortex_marker_array & /imu -->
中間注釋的那行,是缺少的兩個topic信息。
測試過,跟/tf這個topic,沒什么關系
修改完之后,就可以使用realsense d400系列相機跑實時的rgbdslamv2了,是不是很激動!
經常會在想,如果當時不是覺得麻煩,先從rosbag開始跑起,就不知道需要修改rgbdslam.launch文件中的topic。如果不是因為修改之后,發現只修改這兩個topic是不夠的,學習了remap的做法。
直接跳過這個步驟,如果直接從使用xtion或者kinect1,跑實時的rgbdslam,那我應該就不可能知道,如何把RealsenseD435集成進包里。
反過來,我可能會直接使用rqt_graph來查看topic之間的關系,也不是沒有可能找到方法的。
后記:
1. 沒有學在《如何使用ROS查找rgbdslam代碼包框架的輸入》中提到的各種調試工具,相信以后也還是會用到的。因此不要忘記還有這些方法。
2. 沒有一不懂就直接聯系作者,這也“得益”於我蹩腳的英語水平。同時,我覺得不懂就直接問,而且問解決方法,不是我一貫作風,能不做伸手黨就不做。
3. 前前后后花了差不多20來天,雖然當中也有些亂七八糟的雜事,但是還是覺得編程效率不高。
4. 成就感杠桿的,可能只是一個小bug,沒有搜到相關的資料,可能本來就是很基礎的編程問題。但是整個過程下來,動手能力和編程能力還是提升不少。