我是靠谱客的博主 天真月饼,最近开发中收集的这篇文章主要介绍ROS毕设坑3:在ROS下用视觉方法求取R和t,然后将其发布,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天莫名遇到两个问题:之前调好的代码硬生生的跑不通,就会出现下面这个问题:

大概意思就是说我还没得到图片呢就让他去计算,opencv就出错了,我不信这个邪,自己去调试了一下发现能计算slovePnP,但是运行的时候就会出错,后来我发现一个疑心好久的地方:

VideoCapture capture(CAMERA_INDEX);
capture >> frame;

然后我把它改成了我能理解的:

cv::VideoCapture inputVideo; 
inputVideo.open(CAMERA_INDEX);
inputVideo.retrieve(image);

我承认我没认真去查这些具体的差别,但我觉得还是第二种靠谱,然后错误就没了;


下面是第二个问题:

我把R和t算出来后,死活发不上去:

[FATAL] [1552307800.670041109]: ASSERTION FAILED
    file = /opt/ros/kinetic/include/ros/publisher.h
    line = 115
    cond = impl_->md5sum_ == "*" || std::string(mt::md5sum<M>(message)) == "*" || impl_->md5sum_ == mt::md5sum<M>(message)
    message =
[FATAL] [1552307800.670129102]: Trying to publish message of type [my_image_transport/camera/35d99f521ebbd634277d0f066a04ed68] on a publisher with type [std_msgs/String/992ce8a1687cec8c8bd883ec73ca41d1]
[FATAL] [1552307800.670153467]:

这大红字看的我心里痒痒啊。。。而且百度上也没有,连游泳的时候也在想这个问题,会不会消息太长了?想想不对,还有比这个还长的;会不会是double和float32转换的时候出问题了......后来我认真看错误信息的时候发现我在发布camera信息的时候居然用的String的type,额好吧,是我傻了:发布的时候应该用camera的type,这下我可更深刻的学到了ROS发布信息时的许多注意点

    ros::Publisher camera_pub = n.advertise<my_image_transport::camera>("camera", 1000);

另外,我在室内导航用的二维码,opencv检测二维码四个角点的2D坐标,然后人为将3D坐标事先定好,匹配好后用solvePnP来算,等我把剩下一点改善完之后发到我的github上,和大家一起分享!

后来我把①aruco检测出来的和②PnP计算得到的像极坐标系下的坐标以及③转换后得到室内坐标系下的坐标,都输出了一下,因为我没有太搞懂aruco计算的方法,所以我截了一下屏,希望有大佬看到可以帮忙讲解一下,谢谢啦!

最后

以上就是天真月饼为你收集整理的ROS毕设坑3:在ROS下用视觉方法求取R和t,然后将其发布的全部内容,希望文章能够帮你解决ROS毕设坑3:在ROS下用视觉方法求取R和t,然后将其发布所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部