楼主最近在跑mcptam的程序,打击颇大,在这里将遇到的几个问题总结分析下(解决后,觉得遇到的这几个问题真的不算问题,说白了还是自己缺少工程经验,加油加油):
问题1:bluefox相机启动后 发布的是/cameraX/inage_raw/compressed ,mcptam标定时需要的是/cameraX/inage_raw/compressed,分别启动多个bluefox相机,然后启动mcptam外参标定程序,毫不意外的在生成关键帧后报错,之前有做多目slam的经验,标定多相机必须保证多相机同步触发
问题2:多相机同步触发有软件触发和硬件触发2种方式,视觉对同步要求不是太高,这里我采用的是bluefox相机自带的多相机同步触发程序。多相机同步触发后发布的话题是/muti/cameraX/image_raw/compressed,而前文已经说过mcptam需要的是/cameraX/inage_raw/compressed。我的解决思路如下:a、找到mcptam中所有订阅话题的地方,把/cameraX/inage_raw/compressed改成/muti/cameraX/image_raw/compressed b、使用remap方法 在启动bluefox多相机的launch文件中加入 <remap from="/muti/cameraX/image_raw/compressed" to ="/cameraX/inage_raw/compressed"> 有几个相机加几行。 这2种方法使用过,程序运行时都无法识别标定版,对比参数后,最后发现居然是曝光值设低了,图片看不清导致。
分別啓動多個相機進行標定
軟件觸發同時啓動多個相機,修改mcptam訂閱的話題
軟件觸發同時啓動多個相機,remap 話題名後標定
问题3:第一个相机识别标定版后开始提取关键帧,但每次提取到第二个关键帧后都提示如下错误,经过搜索,锁定是ubuntu14.04下pcl的问题,经过一个数据类型转换即可。
#include <pcl/conversions.h>
pcl_conversions::toPCL( ros::Time::now(),pointMsg->header.stamp);
//pointMsg->header.stamp = ros::Time::now().toNSec(); 就是這句話出錯了