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

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

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

复制代码
1
2
VideoCapture capture(CAMERA_INDEX); capture >> frame;

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

复制代码
1
2
3
4
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发布信息时的许多注意点

复制代码
1
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部