无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真

无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真

0.前言

在进行无人车的规划、控制算法调试时,直接在实车上进行不仅危险且效率低下,一个好的运动学仿真平台将会加速开发进度。Carsim非常适合进行车辆动力学仿真,但是只能运行在Windows系统上,好在它可以连接Simulink。而无人车的规划、控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。本篇文章提供一种方法,将ROS 、 Simulink、carsim进行互联,完成规划、控制算法的动力学仿真。

这几天实验室跟着师兄做路径追踪,simulink与carsim联合仿真很成功,但是我们的代码需要转到ROS平台上运行,这就涉及到ROS、Carsim与simulink的联合仿真,所以特地记录一下其中过程。

具体可参考如下两篇博客:
无人驾驶——Ros_simulink_carsim三者联合仿真
https://blog.csdn.net/qq_33125039/article/details/89791015
ROS、Simulink、Carsim的互联与规划、控制算法的验证
https://zhuanlan.zhihu.com/p/62024133

1. 准备工作

  • a、硬件基础:PC1和PC2使用路由器连接在同一局域网
  • b、PC1为Ubuntu系统,运行规划、控制算法,各模块使用 ROS进行通信
  • c、PC2为Windows系统,运行Simulink和Carsim

2. PC1上的ROS节点建立

建立两个ROS节点

  • 一个为 Talker 负责接收Carsim模型传来的指令,进行数据处理后,计算出前轮转角然后进行发送。
  • 一个为 Listener接收车辆的位姿信息(可以不用Listener节点)。(此处msgs仅为示例,需结合具体的工程项目建立相应的node和topic)。

(具体Talke节点和Listener节点的创建可参考如下链接)
https://www.ncnynl.com/archives/201608/499.html
https://www.ncnynl.com/archives/201608/509.html

也可以写一个接收消息,处理消息后再发送消息的talker节点(我做的就是这样的),方法可参考如下:
https://blog.csdn.net/ding977921830/article/details/70168877

第一步:查询Ubuntu电脑对应的IP地址


其中roscore上的相关信息可能需要在.bashrc文件修改好后才能显示(下面会介绍)

第二步,进入主文件夹,使用从Ctrl + H快捷键显示隐藏的文件

在这里插入图片描述
双击 .bashrc文件,在末尾加入两行代码
在这里插入图片描述
其中192.168.0.101(每个人的不一样,按自己电脑的IP填写)为PC1的IP地址

3.PC2上的设置

第一步:查询windows机器中的ip地址

win+R后输入CMD,然后输入ipconfig /all即可查询
在这里插入图片描述

第二步:在simulink中去设置

注意192.168.49.154是window(PC2)中的ip地址
而192.168.49.155是Ubuntu(PC1)中的ip地址(按自己的来填写)

一般来说,如果两台电脑连接到同一个wifi,IP地址前3个数字都是一样的!!!!
在这里插入图片描述
在这里插入图片描述
至此,PC1与PC2设置完成,他们之间可以通信。
可以通过如下来验证
在这里插入图片描述
这里的192.168.1.165是Ubuntu主机的ip地址

4.Carsim的通道设置

输入通道分别为左右前轮转角和后轮转角
在这里插入图片描述
输出通道分别为X、Y、X速度、Y速度,YAW,YAW速度

在这里插入图片描述

5.PC2上的Simulink模型的搭建

在这里插入图片描述
模型框架如上
(由于算法需要6维的输入,所以搞得比较复杂,而且我也懒得改msg类型,所以在别的模型基础上修改了一些东西,大家可以根据需要修改)
以下是具体的参数设置

1)接收节点

进入simulink library browser中的ROS工具箱,添加subscribe工具箱,并双击,将弹出如下的窗口
在这里插入图片描述

  1. 选择topic的来源
  2. 编辑topic的名称,输入/control,与ROS的talker节点里的topic对应
  3. 选择msg的类型,与talker节点里的topic的msg对应

2)总线选择器的设置

添加总线选择器模块bus selector,以subscribe的msg引脚作为它的输入,并双击进行参数设置
在这里插入图片描述
使用select按钮进行bus selector输出引脚的定义

3)发送节点的定义

从Simulink library browser中的ROS工具箱添加空白消息模块blank message,该模块用于创建ROS消息,并双击进行参数设置
在这里插入图片描述
在这里插入图片描述
由于只能选择它已有的msg类型,而我需要汽车6维的输入,只能生搬硬套啦。(ಡωಡ)
注意:Message类型与ROS中的listener节点中的消息类型要一致

4)总线分配器

从Simulink library browser中添加bus assignment模块,并双击打开如下窗口,使用select按钮进行输出通道设置
在这里插入图片描述

5)发布者模块

从Simulink library browser中的ROS工具箱添加publish模块,并双击进行参数设置
在这里插入图片描述
Topic为/simulink_pose,与ROS中的listener节点的话题名字对应 Message的类型与listener节点的消息类型对应

6.启动

两台PC通信成功后

  1. 在Ubuntu依次用roscore、rosrun运行talker节点。
  2. 接着在simulink下点击运行,等待simulink编译完成

完成上述步骤就可以实现Carsim与simulink的联合仿真了。

效果如下:
PC1
在这里插入图片描述
PC2
在这里插入图片描述

附:mdl模型下载链接

https://github.com/GGZ-hey/ROS_with_simulink

  • 7
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
ROS(机器人操作系统)是一个开源的软件框架,用于实现机器人系统的开发、控制和通信。Simulink是由MathWorks公司开发的一个用于进行模型创建、仿真和分析的图形化编程环境。CARSim是一款用于进行车辆动力学仿真的软件工具。 ROSSimulink联合仿真可以实现ROS系统与Simulink模型之间的交互与通信。通过ROS节点,可以将Simulink模型作为ROS的一个节点进行集成。这样,Simulink模型可以订阅和发布ROS的消息,与其他ROS节点进行数据交换和通信。 在ROSSimulink之间建立通信桥梁的方法是使用ROS库和工具包,如ROS Toolbox、Robotics System Toolbox等。通过使用这些工具包提供的功能和接口,可以在Simulink中实现与ROS的通信机制。 在联合仿真中,Simulink可以接收和发送由ROS节点发布的传感器数据和控制指令,从而实现与ROS系统的数据交互。同时,Simulink模型也可以将结果数据发送给ROS节点,用于进行可视化、数据记录和其他后续处理。 通过ROSSimulink联合仿真,可以实现对车辆行为和动力学的建模和仿真。在Simulink中,可以构建车辆动力学模型,基于各种传感器数据进行感知和控制。通过与ROS节点的通信,可以将模型与真实车辆进行实时交互,测试和验证控制算法和行为模式。 总之,ROSSimulink联合仿真为车辆系统的开发和测试提供了一个强大的工具。它允许开发人员在一个综合的环境中进行系统仿真、控制算法开发和硬件接口集成。通过这种方式,可以提高开发效率,减少系统开发周期,并增强对车辆行为的理解和预测能力。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值