手机与Ubuntu14.04下的ROS连接,
生成 xxxx.bag文件,
解析 xxxx.bag文件得到图像(主要是可以对提取的图片进行标定,修改 VINs-Mono 的手机camera内参)
将xxxx.bag文件的IMU和image时间戳对齐生成新的 .bag文件(不对齐的话VINs-Mono 在rviz中是不显示轨迹的)
1、下载手机apk和程序
git clone https://github.com/hitcm/Android_Camera-IMU.git
2、在终端输入:(indigo是Ubuntu14.04,kinetic是ubuntu16.04)
sudo apt-get install ros-indigo-imu-tools
3、首先保证pc和安卓手机置于同一局域网下,然后终端输入
roscore
接下来需要获得pc地址
ifconfig
4、打开安卓上的应用,修改ip地址为pc的ip地址,注意port(:11311/)不需要修改。修改完毕后点击Connect,则连接成功,进入相机界面。
5、在pc上执行rostopic list,可以看到相机数据和imu数据的名字如下,前三个topic即是
6、执行命令cd到上面下载git的本地目录下,执行上述git提供的launch文件
roslaunch android_cam-imu.launch
7、添加topic进入rviz
点击By topic,里面添加imu和image
rviz中的设置
1、完成第一大步后,打开一新的终端输入
rosbag record /android/imu /camera/image_raw
可在当前终端目录下得到 xxxx.bag
首先创建一个 export.launch 文件输入
(上述是以MH_01_easy.bag为例,第四行的"/cam0/image_raw"是该bag文件的topic)
1、将.bag移动到这个文件夹下(可能需要安装image_view)
sudo apt-get install ros-indigo-image_view
sudo mv xxx.bag /opt/ros/kinetic/share/image_view
2、在export.launch文件中,修改.bag名字和topic
3、运行
roslaunch export.launch
4、此时得到的图片会保存在.ros文件中,然后新建一个test文件夹,从.ros中导出
mv ~/.ros/frame*.jpg test/
1、IMU时间戳数据终端显示
rostopic echo /android/imu/header
2、image时间戳数据终端显示
rostopic echo /camera/image_raw/header
3 、然后运行一个.bag才可以看到上述数据(此bag的topic必须和上面的一样)
rosbag play ~/test00000.bag
4、最后截图展示(从图中可看出IMU和image时间戳没有对齐)
1、具体涉及ROS的一些知识(话题、消息、工作区、订阅者程序)
2、sensor_msgs中的image和imu类,参考http://docs.ros.org/api/sensor_msgs/html/index-msg.html
3、TimeSynchronizer message_filters 同步回调
4、网上参考代码如下,但是一直运行失败
//wiki参考demo http://wiki.ros.org/message_filters
#include
#include
#include
#include
using namespace sensor_msgs;
using namespace message_filters;
void callback(const ImageConstPtr& image, const CameraInfoConstPtr& cam_info) //回调中包含多个消息
{
// Solve all of perception here...
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "vision_node");
ros::NodeHandle nh;
message_filters::Subscriber image_sub(nh, "image", 1); // topic1 输入
message_filters::Subscriber info_sub(nh, "camera_info", 1); // topic2 输入
TimeSynchronizer sync(image_sub, info_sub, 10); // 同步
sync.registerCallback(boost::bind(&callback, _1, _2)); // 回调
ros::spin();
return 0;
}
5、最后贴一张时间戳对齐的结果展示
参考:https://www.cnblogs.com/hitcm/p/5616364.html
参考:https://blog.csdn.net/u011988573/article/details/73740085
参考:http://www.cnblogs.com/GJGJH/p/9890210.html
参考:https://blog.csdn.net/zyh821351004/article/details/47758433