使用Matlab与ROS端通信以及绘制Odom里程计信息
2017-11-29 10:24
537 查看
Matlab中集成了ROS的扩展接口,实现了与ROS的通信,极大的方便了我们的调试,下面我先简单介绍下如何实现通信,方法一般都能百度的到,我就不详细的介绍了,首先,Matlab的版本最好新一点,貌似老版还不支持ROS,我用的版本是R2016a。
保证自己装有Matlab和ROS的两个pc保持在同一网端,当然Matlab和ROS装在同一pc上是OK的,我用的是一台装有Win10系统(安装了Matlab)和一台装有Ubuntu16.04(装有ROS)的PC,首先查看两台电脑的ip,windows可以进入cmd查看:ipconfig,ubuntu:ifconfig。
打开Matlab,新建或者直接在命令行窗口:
其中MASTER_URI后的ip是你装有ROS的ip,ROS_IP是你装有Matlab的ip,运行后如果能看到下面图片内容,说明配对成功了。
3.测试通信,在命令行窗口敲入
这时你会看到目前的topic
## Matlab绘制Odom里程计信息 ##
ok,下面我就说说使用Matlab绘制Odom信息,当我在调试编码器和惯导模块融合ekf时只能用rviz去实时观看效果,这很麻烦,当然ROS里也提供了plot来绘制,但我觉得还是Matlab更直观,更方便点吧,尤其是在写论文的时候。
这是一幅我绘制编码器Odom和加上惯导模块ekf融合后的plot图,红色的是单编码器的里程计,蓝色则为融合后的,可以看出,一开始是重合的,后面开始有些变化了,单编码器还是存在累计误差的
这里我是用的是rosbag的bagfile来绘制的,ros的rosbag和play真的是一个很好的机制,对我们调试提供了很大的方便,rosbag的使用也很简单,百度能找到很多,我就不介绍了,将fullfile后的文件夹改为自己的就ok了,代码应该很容易理解,通过解析不同的topic并将其中的数据提取出来,如果你想绘制其他topic,只许将topic和topic里对应的标头换下就ok了。
下面我把我的程序打包,其中包括了odom和odom_combined以及imu中的yaw的绘制。
代码
保证自己装有Matlab和ROS的两个pc保持在同一网端,当然Matlab和ROS装在同一pc上是OK的,我用的是一台装有Win10系统(安装了Matlab)和一台装有Ubuntu16.04(装有ROS)的PC,首先查看两台电脑的ip,windows可以进入cmd查看:ipconfig,ubuntu:ifconfig。
打开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,运行后如果能看到下面图片内容,说明配对成功了。
3.测试通信,在命令行窗口敲入
rostopic list
这时你会看到目前的topic
## 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的绘制。
代码
相关文章推荐
- 使用matplotlib绘制图像并设置标题以及坐标轴等信息
- 【网摘】ArcGis for silverlights api 地图显示Gis绘制点线绘制图 以及提示信息
- android端和Struts2服务器端通信,交互信息,参数采用JSON,使用了HttpClient与HttpPost类
- Android游戏开发之地图编辑器的使用以及绘制地图 (一)
- 不同系统中的通信处理以及电文信息传递
- 用鼠标点击获得位置信息以及来绘制自己的名字
- CSocket以及winsocket套接字的使用步骤(网络通信的重点知识)
- windows下使用curl获取响应头信息,以及服务器隐藏响应头信息的办法
- 所有进程的名字和他使用的模块名以及其它信息
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- 使用SVG和VML绘制WebGis地理信息
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- matlab 优化内存使用以及优化代码运行速度
- J2ME地图绘制以及使用出现的问题
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 4.0 快速上手(12)
- 使用Nmap获取目标服务器开放的服务以及操作系统信息
- Linux下创建进程线程以及通信技术的使用
- android端和Struts2服务器端通信,交互信息,参数采用JSON,使用了HttpClient与HttpPost类
- JS navigator 对象(提供用户所使用的浏览器以及操作系统等信息)