为期两个月的MATLAB与ROS联合仿真探索总结——因为热爱,所以无所畏惧

   2021年的9月底收到老师的委托之后,开始着手使用MATLAB探索开发一些实验,控制对象为ROS中的仿真小车


   为什么要用MATLAB呢?因为这个实验是面向机器人专业的全体学生的,而不是个别学生,这就意味着如果直接使用ROS开发,那么部分没有接触过ROS,零基础的同学可能会感到比较吃力,而如果仅仅是把程序给他们,让他们运行一下,看看效果,估计收获甚微,为了让全体同学都自己动手去完成实验内容,选择了大家比较熟悉的MALTAB作为开发工具,依托SImulink中的ROS工具箱与ROS建立联系,并在此基础上探索开发一些实验去控制ROS中的小车


   在明白了大体的任务后,就开始构思如何实现了,说实话,刚接到任务后,确实感觉无从下手,先说一下我的ROS基础,2020年的10月份,我学习了古月居的ROS入门21讲,利用课余时间大约学了一个月左右,这就是当时我所有的ROS基础,是不是少的可怜?
   对了,我还有对ROS机器人的无限热爱, 因为热爱,所以无所畏惧。 我大体整理了一下思路,我将整个实现过程规划为以下几个阶段

   第一阶段:建立MATALB与ROS的通讯
   第二阶段:在虚拟机的Gazebo中进行小车仿真的可行性验证
   第三阶段: 探索建立Simulink与Gazebo中仿真小车的通讯
   第四阶段: 探索在Simulink中设计实验来控制Gazebo中小车
   第五阶段: 将在Simulink中设计的实验生成ROS代码
   第六阶段: 推广测试阶段
   第七阶段: 探索对实物进行控制


   2021年10月1日,我正式开始了第一阶段的探索
   首先,便是ROS的安装,综合考虑之下,决定采用虚拟机安装的方式,VMware16.1.1+Ubuntu20.04+ROS Noetic,我2020年10月份学习的时候装过,也踩过了很多的坑,整理成了博客,链接如下:

   详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!【点击可跳转】

   今年,我又将其安装步骤进行了优化处理,整个VMware16.1.1 +Ubuntu20.04+ROS Noetic的安装过程压缩到了三个小时以内,同样编写了博客,链接如下:

   详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)【点击可跳转】


   刚开始的时候,是想采用Ubuntu下的MATLAB与ROS进行联合仿真的,耗时三天,在踩过一个个坑之后终于在Ubuntu中装好了MATLAB2021a,于次日借助小海龟,实现和验证了MATLAB与ROS的通讯,相关博客链接如下:

   虚拟机中的Ubuntu扩容及重新分区方法【点击可跳转】

   在ubuntu20.04中安装MATLAB时常见问题及解决方法 【点击可跳转】

   详细介绍如何在Ubuntu中实现MATLAB与ROS的通讯,借助MATALB进行ROS开发【点击可跳转】


   此时考虑到,部分同学电脑硬件也许很难支持在虚拟机中同时运行MATLAB/Simulink+Gazebo+Rviz,尤其是进行Slam建图及导航相关的实验
   不得不暂时放弃该方案,转而采用Win10下的MATLAB与虚拟机Ubuntu20.04中的ROS联合仿真的方案,并成功实现通讯,相关的博客链接如下:

   实现Win10环境下的MATLAB与虚拟机Ubuntu中的ROS的通讯的方法 【点击可跳转】


   2021年10月7日,我开始了第二阶段的探索

   这一阶段,本来的设想是快速验证一下在虚拟机的Gazebo中进行小车仿真的可行性,于是购买了古月学院的《如何在Gazebo中实现阿克曼转向车的仿真》课程,拿到了课程资料,但是遗憾的是课程资料在Noetic版本的ROS中并不能运行,报了一堆的错误,网上查了一下,并没有解决
   于是,我开始了自学之路,经过一段时间的学习和探索,课程资料的代码差不多读了各遍,走过一个个Error,成功纠正了所有发现的错误(这些错误其实是由于ROS和Python等版本的更新带来的),同时也不断搭建着实验所需的实验环境,比如相关必备的ROS功能包等,相关博客链接如下:

   以阿克曼转向车为例对URDF和XACRO文件进行解读 【点击可跳转】
   将xacro格式文件转换为urdf格式并对其进行检查格式,并生成机器人模型的结构图 【点击可跳转】
   古月学院《如何在Gazebo中实现阿克曼转向车的仿真》课程资料在ROS Noetic版本中运行时的常见错误及解决方法【点击可跳转】
   日常工作记录—在虚拟机中进行slam建图 【点击可跳转】
   在虚拟机中对阿克曼转向车进行导航及避障的仿真测试 【点击可跳转】

   对了,这里还有一个坑,在我进行了一天的探索后,成功在Ubuntu20.04中装好了RoboWare Studio,却一直都打不开,后来才知道Ubuntu20.04不支持RoboWare Studio(停止维护了),确实很遗憾,无奈转而使用Visual Studio Code 作为IDE


   2021年10月26日,我开始了第三阶段的探索

   其实本来很多工作是计划在第三阶段完成的,却被迫在第二阶段完成了,比如由于第二阶段把整个程序差不多读了一遍(有些地方读了很多遍),可以说对程序很熟悉了,很容易就找到了程序中用于阿克曼小车的接口,也就是车的线速度和前轮打角,再加上第一阶段的通讯基础,很快就建立了MATLAB与ROS中的仿真小车的通讯,并成功将MATLAB/Simulink作为控制器,Gazebo中的仿真小车作为控制对象,进行了简单的走直线和画圈测试


   2021年10月28日,我开始了第四阶段的探索

   经过前三个阶段,实验所需求的实验环境就搭建好了,在差不多一个月的时间里,我的理论基础和ROS开发能力有了很大的进步,当然这些进步是建立在独立解决一个个Error之上的
   到这里,也就要正式开始实验相关内容的开发了,说到MATLAB与ROS的联合仿真,在网上很难找到想要的资料,可以说基本没有(或者说我没找到),更不用说适合ROS零基础的本科生的实验了,还是那句话 因为热爱,所以无所畏惧。 于是我开始了一边构思实验内容,一边探索的自研之路

   为了让同学们自己动手去实现实验内容,这部分的内容,我并没有写成博客在网上进行公布,但是在这部分的整个开发过程,我花费大量的时间写成了非常非常详细的文档资料,包括开发过程中的常见错误及解决方法等,后续有机会可能已博客形式发布出来,但是应该是在很长一段时间之后了

MATLAB与ROS联合仿真探索资料预览


   历经一个月的设计和开发,也经过了多次测试和修改,最终我设计编写了以下Simulink模块,并将其模块化,具备很强的复用性和可移植性,推广使用也很方便
   (白色背景的是给定类模块,淡黄色背景的是可视化绘图类模块,紫色背景的是发送消息至ROS类模块,绿色背景的是从ROS订阅消息类模块,淡蓝色背景的是控制类模块)

   这些模块的详细介绍,使用方法及详细的搭建设计过程我都写成了详细的文档资料,因实验需要暂时不适合在网上公布


   相关的博客链接如下(大部分内容目前未发布):

   使用MATLAB绘制Gazebo中的仿真小车的运动轨迹【点击可跳转】
   在Simunlink中使用Read image模块或Read Point Could模块读取ROS中图像时显示全黑的解决方法【点击可跳转】


   这一阶段所完成的主要内容,如下面的视频所示:

MATLAB与ROS联合仿真探索总结


   2021年11月25日,我开始了第五阶段的探索

   成功将实验内容中,不涉及绘图及视频播放的部分由Simulink生成了ROS代码,并成功在ROS中独立运行


   2021年12月份,我将开始第六阶段的探索

   目前实验内容的初稿已经完成了,但是还没在其他电脑上验证过,这一阶段,需要找多台电脑,进行可行性测试,并解决在推广中可能出现的问题,以使其具备广泛的可推广性


   至于第七阶段,对实物的探索将于2022年1月开始

   车已拿到了,这绝对是我买过的最贵的小车了(7K),暂时实在无暇研究,只得暂时抑制兴奋之感


   最后说一下探索开发的感受吧

   一路走来,踩过一个个坑,解决了一个个Error

   经历过痛苦和折磨,但确实收获良多

   最惨的一次,被一个Error,折磨了三天三夜

   可参考的资料真的真的少得可怜

   大部分内容得靠自已钻研

  
   所谓热爱和喜欢,也许就是

   在困境面前,会毫不犹豫选择勇往直前

   即使充满无力感,也不会萌生放弃的念头

   道阻且长,行则将至

   因为热爱,所以无所畏惧
  

   同时也祝愿小伙伴们,所愿皆所得

   学习/科研/工作

   硕果累累,顺顺利利666

MATLAB(Matrix Laboratory)是一款由美国MathWorks公司开发的高性能商业数学软件,它集成了高级技术计算语言、交互式环境以及丰富的工具箱,被广泛应用于工程计算、数据分析、算法开发和科学可视化等领域。MATLAB的核心功能包括: 1. **数值计算**:支持大规模矩阵和数组运算,对线性代数、微积分、概率统计等数学问题提供高效解决方案。 2. **编程环境**:提供了易于使用的脚本编写函数定义界面,支持面向对象编程,并可通过M文件实现模块化程序设计。 3. **数据可视化**:内置强大的二维和三维图形绘制功能,能够创建高质量的数据图表,便于数据分析和结果展示。 4. **工具箱扩展**:MathWorks为MATLAB提供了众多领域的专业工具箱,如信号处理、图像处理、通信系统、控制系统、机器学习、深度学习、量化金融、优化算法等,极大地扩展了MATLAB的应用范围。 5. **Simulink仿真**:作为MATLAB的重要组成部分,Simulink是一个动态系统建模、仿真和基于模型的设计环境,特别适用于多域物理系统和嵌入式系统的模拟和实时测试。 6. **集成能力**:MATLAB可以其他编程语言(如C、C++、Java、Python等)及外部应用程序进行数据交换和联合开发,也可以调用硬件接口进行实时实验和控制。 7. **交互式工作空间**:用户可以在命令窗口中直接输入表达式并立即得到结果,这种交互式的特性使得快速原型设计和调试变得极为便利。 总之,MATLAB是科学家、工程师和技术人员进行科研、教育和工业应用不可或缺的强大工具之一,尤其在需要大量数值计算和复杂系统建模的场景下发挥着重要作用。
### MATLABROS联合仿真实现方法 #### 创建MATLABROS通信环境 为了使MATLAB能够ROS节点交互,需先配置好两者之间的连接。这通常涉及启动ROS主节点并设置网络参数以便于MATLAB可以识别该主节点的位置[^1]。 ```matlab % 设置ROS主机名和端口 setenv('ROS_MASTER_URI', 'http://localhost:11311'); setenv('ROS_IP', '127.0.0.1'); % 初始化ROS节点 rosinit; ``` #### 使用预构建的虚拟机镜像加速开发流程 对于希望迅速建立实验平台的研究人员来说,利用预先准备好的MATLABROS联合仿真虚拟机镜像是一个高效的选择。这种做法不仅简化了安装过程,还确保了所有必要的依赖项都已正确部署到位。 #### 订阅来自ROS的话题数据 一旦建立了基本的工作空间,在MATLAB内部可以通过调用特定的功能函数来接收由其他ROS节点发布的消息。例如,要监听名为`/imu_data`的主题,则可采用如下方式创建订阅者对象[^2]: ```matlab % 定义IMU数据类型的订阅器 sub = rossubscriber('/imu_data'); ``` 当接收到新信息时,上述命令会触发回调机制自动处理传入的数据包。用户也可以指定自定义的回调函数用于更复杂的逻辑操作。 #### 发布控制指令至ROS主题 除了被动获取传感器读数外,有时也需要主动向机器人发送动作请求或设定目标位置等。此时应该借助`rospublisher()`构造相应的发布实例并向其推送有效载荷: ```matlab % 构建速度命令的消息结构体 msg = rosmessage('geometry_msgs/Twist'); % 设定线性和角速度分量 msg.Linear.X = 0.5; % 前进速率 (m/s) msg.Angular.Z = pi / 4; % 自旋角度 (rad) % 向/cmd_vel主题广播运动意图 pub = rospublisher('/cmd_vel'); send(pub, msg); ``` 以上展示了如何基于MATLAB集成环境开展简单的移动机器人导航任务模拟演练。当然实际应用场景可能会更加复杂多变,因此建议深入学习官方文档以及探索更多高级特性以满足个性化需求。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕羽★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值