首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vo_ros/vo: malloc():由图像大小引起的内存损坏?

vo_ros/vo: malloc():由图像大小引起的内存损坏?
EN

Stack Overflow用户
提问于 2016-02-17 13:46:27
回答 1查看 300关注 0票数 0

我想为机器人项目建立苏黎世大学机器人和感知小组的单目视觉测定仪系统。项目站点是svo。他们将其实现为ROS节点,非常酷,但是当我启动svo_ros节点roslaunch svo_ros live.launch时,会得到一个错误:

代码语言:javascript
复制
[ 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节点校准我的相机。我将输出转换为..yaml文件表示,在/param/camera_pinhole.yaml中,如下所示

代码语言:javascript
复制
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的启动文件设置为相同的大小,但它并没有改变任何事情。

代码语言:javascript
复制
<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>

我是否错过了任何参数或其他配置,或有人有其他想法,什么是错的?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 16:12:34

我真的找到了解决这个问题的办法。

当图像有奇数列时,它是在制作图像金字塔时引起的。

我通过修改rpg_vikit/vikit_common/src/vision.cpp文件来修正它。

第91行原为:

代码语言:javascript
复制
  const int stride  =  in.step.p[0];

我把它改成:

代码语言:javascript
复制
  const int stride = in.step.p[0]/2 * 2;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35458466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档