使用Realsense D400 camera系列跑rgbdslamv2


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,沒有搜到相關的資料,可能本來就是很基礎的編程問題。但是整個過程下來,動手能力和編程能力還是提升不少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM