Matlab和ROS数据互联

Matlab中集成了ROS的扩展接口,实现了与ROS的通信,极大的方便了我们的调试,下面我先简单介绍下如何实现通信,方法一般都能百度的到,我就不详细的介绍了,首先,Matlab的版本最好新一点,貌似老版还不支持ROS,我用的版本是R2016a。

  1. 保证自己装有Matlab和ROS的两个pc保持在同一网端,当然Matlab和ROS装在同一pc上是OK的,我用的是一台装有Win10系统(安装了Matlab)和一台装有Ubuntu16.04(装有ROS)的PC,首先查看两台电脑的ip,windows可以进入cmd查看:ipconfig,ubuntu:ifconfig。
  2. 打开Matlab,新建或者直接在命令行窗口: 
 >> setenv('ROS_MASTER_URI','http://192.168.1.60:11311')
 >> setenv('ROS_IP','192.168.1.242')
 >> rosinit`

其中MASTER_URI后的ip是你装有ROS的ip,ROS_IP是你装有Matlab的ip,运行后如果能看到下面图片内容,说明配对成功了。

## Matlab绘制Odom里程计信息 ##
ok,下面我就说说使用Matlab绘制Odom信息,当我在调试编码器和惯导模块融合ekf时只能用rviz去实时观看效果,这很麻烦,当然ROS里也提供了plot来绘制,但我觉得还是Matlab更直观,更方便点吧,尤其是在写论文的时候

这是一幅我绘制编码器Odom和加上惯导模块ekf融合后的plot图,红色的是单编码器的里程计,蓝色则为融合后的,可以看出,一开始是重合的,后面开始有些变化了,单编码器还是存在累计误差的

filepath = fullfile('C:\Users\dell\Desktop\rosbag\20171115.bag');
bag = rosbag(filepath)
bagselect_odom = select(bag, 'Topic', '/odom')
bagselect_odom_combined = select(bag,'Topic','/robot_pose_ekf/odom_combined')
msgs_odom = readMessages(bagselect_odom);
ts_odom = timeseries(bagselect_odom, 'Pose.Pose.Position.X')
ts2_odom = timeseries(bagselect_odom,'Pose.Pose.Position.Y')
ts_odom_combined = timeseries(bagselect_odom_combined, 'Pose.Pose.Position.X')
ts2_odom_combined = timeseries(bagselect_odom_combined,'Pose.Pose.Position.Y')
a = ts_odom.data
b = ts2_odom.data
c = ts_odom_combined.data
d = ts2_odom_combined.data
plot(a,b,'b');
hold on;
plot(c,d,'r');
axis equal;
%axis([0 3.5 0 2.0]);

这里我是用的是rosbag的bagfile来绘制的,ros的rosbag和play真的是一个很好的机制,对我们调试提供了很大的方便,rosbag的使用也很简单,百度能找到很多,我就不介绍了,将fullfile后的文件夹改为自己的就ok了,代码应该很容易理解,通过解析不同的topic并将其中的数据提取出来,如果你想绘制其他topic,只许将topic和topic里对应的标头换下就ok了。
下面我把我的程序打包,其中包括了odom和odom_combined以及imu中的yaw的绘制

猜你喜欢

转载自blog.csdn.net/qq_34935373/article/details/107747539