一、前提条件
1、在Windows系统已安装Carsim、MATLAB,在VMware虚拟机已安装Ubuntu,在Ubuntu中安装了Ros。
2、已完成Carsim与Simulink的联合仿真,并且运行成功。
我的Carsim与Simulink的联合仿真是根据设置的期望速度和carsim反馈发实车速度,通过PID控制得到期望加速度,然后再转化为每个车轮的驱动扭矩和车辆的制动压力,从而实现车辆的速度闭环控制。(可以自己设置一个简单的控制)
二、建立MATLAB与ROS通信
1、在ubuntu系统查看本机地址(虚拟机中)
在终端运行查看本机地址命令
ifconfig
如果没有发现这个命令,运行:
sudo apt install net-tools
安装完net-tools后,重新运行ifconfig,如下所示,找到本机IP:192.168.159.129(我的是这个)
2、将本机IP写入到.bashrc文件
打开home文件夹,按Ctrl+h显示隐藏的文件,选择.bashrc并打开
打开后在最后加入以下命令(后面的IP改为你的虚拟机的IP),然后保存退出
export ROS_IP=192.168.159.129
3、打开ROS
在终端运行:
roscore
4、在Windows系统查看本机地址
找到命令提示符
在命令提示符运行:
ipconfig
找到本机IP: 192.168.165.53(我的是这个)
5、在MATLAB建立连接
在MATLAB的命令行窗口,运行:
setenv('ROS_MASTER_URI','http://192.168.159.129:11311')
setenv('ROS_IP', '192.168.165.53')
rosinit
(在运行rosinit之前,确保Ubuntu系统中的ROS正在运行)
在MATLAB中,如果你想关闭与ROS的连接,可以在MATLAB的命令行窗口使用以下命令:
rosshutdown
这个命令将关闭MATLAB与ROS master之间的连接,并且停止所有MATLAB中创建的ROS节点。如果你有发布者、订阅者或服务正在运行,它们都将被关闭。
在调用rosshutdown
之前,确保你已经保存了所有必要的数据,因为关闭连接后,MATLAB将不再接收ROS消息或与ROS节点进行通信。
6、参考文件链接
http://t.csdnimg.cn/z1WAshttp://t.csdnimg.cn/z1WAs
三、在Simulink中发布和订阅话题topic
1、发布和订阅话题的模块
1.1 发布话题
在Simulink中,使用ROS Toolbox时,"Blank Message"模块、"Bus Assignment"模块和"Publish"模块通常一起使用来创建和发布ROS消息。如下所示,我将carsim的速度和期望的速度分别通过话题cmd_vel和cmd_vel_des发布。
Blank Message模块
可以自行选择需要的数据类型(但是要确保同一个话题的"Blank Message"模块、"Publish"模块和"Subscribe"模块的数据类型要一致)
Bus Assignment模块
将Blank Message模块和Bus Assignment模块连接以后,把“要赋值的元素”中的元素删除,把“总线中的元素”Data选择入“要赋值的元素”中(如果“总线中的元素”没有元素,需要点击一下运行)(不同的数据类型有不同的元素,需要自行尝试)
Publish模块
发布的话题topic的名称可以自己设置
1.2 订阅话题
在Simulink中,使用ROS Toolbox时,"Subscribe"模块和"Bus Selector"模块通常一起使用来接收和处理ROS消息。如下所示,我将订阅话题throttle_cmd和brake_cmd发布的扭矩和压力消息
Subscribe模块
保证订阅的话题名称和数据类型是与你需要的一致
Bus Selector模块
和Bus Assignment模块差不多
2、测试
如下所示,我把控制部分注释掉,通过发布两个话题和订阅两个话题(我订阅了三个,有一个加速度只是观测,不进行控制)来控制carsim
点击运行(确保MATLAB和ROS已连接)以后可以在观测区看到车辆的速度并没有被控制,这是因为还没有控制的话题发布,但是可以在MATLAB的命令行窗口输入指令:
rostopic list
可以看见订阅和发布的话题
3、参考文件链接
使用MATALB来辅助ROS开发时常用的simulink模块介绍 - 古月居 (guyuehome.com)
二、在Simulink中生成Ros的代码
通过生成的ros代码发布和订阅上面的话题
1、新建一个Simulink文件
将PID速度控制模块复制到新建的Simulink文件。
2、配置“模型设置”
在求解器选择--->类型--->定步长。
在求解器详细信息--->固定步长--->0.01。
在硬件实现--->Hardware board--->Robot Operating System (ROS)。
3、发布和订阅话题
和前面操作一样
4、编译成代码
(确保MATLAB和ROS已连接)
在文件夹会生成两个文件
5、Ubuntu系统文件配置
5.1 创建工作空间
在主文件夹打开终端,输入:
mkdir ros_simulink_ws
cd ros_simulink_ws/
mkdir src
5.2 复制文件
将在Windows生成的两个文件复制到下面的目录下
我会出现下面这个问题,选择“全部跳过”(有人知道这是什么问题,怎么解决,请在评论区告知,十分感谢)
5.3 提取文件
或者(当没有提取到此处这个选项时)
5.4 编译工作空间
catkin_make
5.5 设置环境变量
方法一:
source devel/setup.bash
方法二:
打开home文件夹,按Ctrl+h显示隐藏的文件,选择.bashrc并打开
打开后在最后加入以下命令(ros_simulink_ws是我的工作空间,改为自己的),然后保存退出
source ~/ros_simulink_ws/devel/setup.bash
四、ROS运行控制节点,Simulink运行联仿文件
(确保MATLAB和ROS已连接)
在Ubuntu系统新打开一个终端运行:
rosrun ros_pid_v ros_pid_v
在Windows系统运行Simulink文件
运行结果(运行很慢,就不等运行完了)
参考文件链接
使用树莓派4B搭建简易的控制器硬件在环仿真平台_树莓派4b硬件在环hil联合仿真-优快云博客
ROS-MATLAB/SIMULINK 基础笔记 - 知乎 (zhihu.com)
(垃圾信息,不一定有用)
mkdir ros_pid_v
tar zxvf ros_pid_v.tgz -C ~/ros_simulink_ws/src/ros_pid_v/
cd ~/ros_simulink_ws/
catkin_make
source devel/setup.bash
rosrun ros_pid_v ros_pid_v