2016-02-17 21 views
0

我想建立由蘇黎世大學的機器人和感知組機器人項目的單目視覺測距系統。項目網站是https://github.com/uzh-rpg/rpg_svo。他們實現了它作爲ROS節點什麼是真的很酷,但是當我啓動svo_ros節點roslaunch svo_ros live.launch我得到一個錯誤:vo_ros/vo:malloc():由圖像大小引起的內存損壞?

[ INFO] [1455715165.624976791]: SVO initialized 
[ INFO] [1455715165.625768093]: Found parameter: svo/cam_topic, value: /image_raw 
[ INFO] [1455715197.445786640]: RESET 
*** Error in `/home/user/workspace/indigo/devel/lib/svo_ros/vo': malloc(): memory corruption: 0x0000000001187920 *** 

我猜想這是由錯誤的圖像尺寸配置造成的,所以所用的OpenCV函數svo會破壞圖像上的內存。 我使用camera_calibration ros節點校準了我的相機。我翻譯的輸出到.yaml文件表示在/pa​​ram/camera_pinhole.yaml如下

cam_model: Pinhole 
cam_width: 644 
cam_height: 484 
cam_fx: 588.481298 
cam_fy: 587.819899 
cam_cx: 328.046456 
cam_cy: 226.471844 
cam_d0: -0.363501 
cam_d1: 0.165011 
cam_d2: 0.000571 
cam_d3: -0.000577 

正如我從校準數據中的圖像分辨率644x484和使用該image_view包的image_view節點證實了它,我會說我配置的圖像cam_width和高度是正確的。我甚至試圖將image_width和image_height設置爲launch-filge的大小,但它沒有改變任何內容。

<launch> 

<node pkg="svo_ros" type="vo" name="svo" clear_params="true" output="screen"> 

     <!-- param name="image_width" value="644" type="int" /> 
     <param name="image_height" value="484" type="int" /> 
     <param name="cam_width" value="644" type="int" /> 
     <param name="cam_height" value="484" type="int"/--> 

     <!-- Camera topic to subscribe to --> 
     <param name="cam_topic" value="/image_raw" type="str" /> 

     <!-- Camera calibration file --> 
     <rosparam file="$(find svo_ros)/param/camera_pinhole.yaml" /> 

     <!-- Default parameter settings: choose between vo_fast and vo_accurate --> 
     <rosparam file="$(find svo_ros)/param/vo_fast.yaml" /> 

    </node> 

</launch> 

我是否想要適合任何參數或其他配置,或者有人有其他想法是什麼錯?

在此先感謝。

回答

2

我其實找到了解決這個問題的辦法。

這是在圖像具有奇數列時製作圖像金字塔時引起的。

我固定它通過修改rpg_vikit/vikit_common/SRC/vision.cpp

91線預先讀取的文件:

const int stride = in.step.p[0]; 

我改成:

const int stride = in.step.p[0]/2 * 2; 
+0

由於爲答案@amado提供答案。請花點時間格式化您的答案,使其更具可讀性:http://stackoverflow.com/help/how-to-answer – pczeus

+0

我不知道爲什麼,但它的工作原理。我希望儘快推出。現在我必須找出爲什麼在初始化第二個關鍵幀後沒有找到足夠的功能。謝謝。 –