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

文章目录

    • 无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真
  • 0.前言
  • 1. 准备工作
  • 2. PC1上的ROS节点建立
    • 第一步:查询Ubuntu电脑对应的IP地址
    • 第二步,进入主文件夹,使用从Ctrl + H快捷键显示隐藏的文件
  • 3.PC2上的设置
    • 第一步:查询windows机器中的ip地址
    • 第二步:在simulink中去设置
  • 4.Carsim的通道设置
  • 5.PC2上的Simulink模型的搭建
    • 1)接收节点
    • 2)总线选择器的设置
    • 3)发送节点的定义
    • 4)总线分配器
    • 5)发布者模块
  • 6.启动
  • 附:mdl模型下载链接

无人驾驶——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地址

无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第1张图片
其中roscore上的相关信息可能需要在.bashrc文件修改好后才能显示(下面会介绍)

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

无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第2张图片
双击 .bashrc文件,在末尾加入两行代码
在这里插入图片描述
其中192.168.0.101(每个人的不一样,按自己电脑的IP填写)为PC1的IP地址

3.PC2上的设置

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

win+R后输入CMD,然后输入ipconfig /all即可查询
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第3张图片

第二步:在simulink中去设置

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

一般来说,如果两台电脑连接到同一个wifi,IP地址前3个数字都是一样的!!!!
在这里插入图片描述
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第4张图片
至此,PC1与PC2设置完成,他们之间可以通信。
可以通过如下来验证
在这里插入图片描述
这里的192.168.1.165是Ubuntu主机的ip地址

4.Carsim的通道设置

输入通道分别为左右前轮转角和后轮转角
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第5张图片
输出通道分别为X、Y、X速度、Y速度,YAW,YAW速度

无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第6张图片

5.PC2上的Simulink模型的搭建

无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第7张图片
模型框架如上
(由于算法需要6维的输入,所以搞得比较复杂,而且我也懒得改msg类型,所以在别的模型基础上修改了一些东西,大家可以根据需要修改)
以下是具体的参数设置

1)接收节点

进入simulink library browser中的ROS工具箱,添加subscribe工具箱,并双击,将弹出如下的窗口
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第8张图片

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

2)总线选择器的设置

添加总线选择器模块bus selector,以subscribe的msg引脚作为它的输入,并双击进行参数设置
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第9张图片
使用select按钮进行bus selector输出引脚的定义

3)发送节点的定义

从Simulink library browser中的ROS工具箱添加空白消息模块blank message,该模块用于创建ROS消息,并双击进行参数设置
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第10张图片
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第11张图片
由于只能选择它已有的msg类型,而我需要汽车6维的输入,只能生搬硬套啦。(ಡωಡ)
注意:Message类型与ROS中的listener节点中的消息类型要一致

4)总线分配器

从Simulink library browser中添加bus assignment模块,并双击打开如下窗口,使用select按钮进行输出通道设置
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第12张图片

5)发布者模块

从Simulink library browser中的ROS工具箱添加publish模块,并双击进行参数设置
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第13张图片
Topic为/simulink_pose,与ROS中的listener节点的话题名字对应 Message的类型与listener节点的消息类型对应

6.启动

两台PC通信成功后

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

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

效果如下:
PC1
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第14张图片
PC2
无人驾驶——Ros+simulink(matlabR2016a)+carsim8.02三者联合仿真_第15张图片

附:mdl模型下载链接

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

你可能感兴趣的:(编程仿真)