darknet_ros编译报错以及在RVIZ中显示乱码

最近在arm平台上部署 darknet_ros,出现了一些错误,这里记录一下。

首先在ARM平台上部署和在AMD平台上部署是不同的,首先应该考虑算力问题,在ARM下,加载yolov3.weight后,会出现进行死掉的现象,跑不起来,这时候可以换一些小权重进行尝试,记录一下编译时候发生的错误。

首先下载darknet_ros,资源在网上有很多,但是下载后不是完整的,需要替换里面的darknet包,之后在进行编译时,出现

解决办法有两种

1、不使用catkin_make编译,使用命令进行编译

catkin build darknet_ros --cmake-args -DCMAKE_CXX_FLAGS=-DCV__ENABLE_C_API_CTORS


2、修改源码, 对应的修改参照下面的代码

IplImageWithHeader_ YoloObjectDetector::getIplImageWithHeader() {
  //IplImage* ROS_img = new IplImage(camImageCopy_);
  IplImage ROS_img = cvIplImage(camImageCopy_);
  //IplImageWithHeader_ header = {.image = ROS_img, .header = imageHeader_};
  IplImageWithHeader_ header = {.image = &ROS_img, .header = imageHeader_};
  return header;
}

运行之后,通过RVIZ可以查看发布的图像话题,可是会出现乱码现象,如图所示:

 解决办法:

1、将ros.yaml文件中的enable_opencv: true参数改为false,这样就进入了else语句中,将检测结果buff_传给了ipl_。这算是最简单粗暴的方案。这样虽然检测结果不会实时显示(因为没有进入displayInThread(0)线程),但是在rviz中查看/darknet_ros/detection_image话题时能够正常显示结果。

2、

在不修改ros.yaml文件的前提下,将前面提到的if...else语句修改如下:

if (viewImage_) {
    generate_image(buff_[(buffIndex_ + 1)%3], ipl_);
    displayInThread(0);
} else {
    generate_image(buff_[(buffIndex_ + 1)%3], ipl_);


}即在if判断条件内添加一条generate_image语句,这样就能将检测结果buff_传给了ipl_,然后ipl_以/darknet_ros/detection_image话题的形式发布出去,就能在rviz中正常显示了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值