我想通过苏黎世大学的 Robotics and Perception Group 建立单眼视觉测距系统,用于机器人项目。项目网站为https://github.com/uzh-rpg/rpg_svo。他们将它实现为ROS节点真的很酷,但是当我启动svo_ros节点roslaunch svo_ros live.launch
时出现错误:
[ 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 ***
我猜这是由错误的图像大小配置引起的,因此svo使用的OpenCV函数会破坏处理图像的内存。 我使用camera_calibration ros节点校准了我的相机。我将输出转换为/param/camera_pinhole.yaml中的.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和height是正确的。我甚至尝试将launch-filge中的image_width和image_height设置为相同的大小,但它没有改变任何内容。
<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>
我是否错过了适合任何参数或其他配置,或者有人有其他想法出了什么问题?
提前致谢。
答案 0 :(得分: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;