环境
Ubuntu 20.04
ROS-Noetic
MatLab R2021a for Linux
在尝试通过ROS来实现使用MatLab中写好的控制算法控制机器人,所以在Ubuntu系统中安装了MatLab,本文介绍初步将MatLab与ROS进行连接。
一、介绍
主要依赖于MatLab中的两个工具箱Robotics System toolbox,ROS toolbox,建议直接安装MatLab R2021a for Linux或者更新的版本,自带这两个工具箱。
二、连接
如果是单机上进行通讯,则无需进行额外的网络配置,会自动在本地网络上连接。
如果非本地连接,则需要配置网络,首先查看ROS所在网络的IP地址,打开终端,键入命令,
$ ip a
如图,第一个为本地网络的地址,第二个为以太网地址,后者是多机通讯的所需要配置的。
或使用命令(可能需要先安装net-tools
工具)
$ ifconfig
之后打开MatLab,配置ROS_MASTER_URI的地址,
>> setenv('ROS_MASTER_URI', 'http://192.168.1.139:11311')
其中,11311
是roscore
的默认端口,启动ROS时可以看到信息,如果有修改ROS端口,则相应修改上述命令。接着终端启动ROS,然后MatLab中启动ROS,命令为
>> rosinit
我是在单机上进行通讯的,若配置ROS_MASTER_URI的地址则使用本地网络的地址,如下图
连接成功。
三、简单的初步通讯
3.1 基本指令
MatLab中一些指令
>> rosinit % 启动连接ros
>> rostopic list % 当前发布的主题
>> rosnode list % 当前节点
>> rosshutdown % 关闭断开连接
……
更多指令可以在MatLab的命令窗口中输入指令
>> help robotics.ros
在终端中启动小乌龟与键盘控制节点后,如图
3.2 ROS发布消息
3.1小节中是ROS发布消息,然后在MatLab中打印查看,本节进行逆向操作。
在MatLab中发布主题/talker
,内容为消息’Hello, from MatLab’,
%Setting ROS_MASTER_URI
setenv('ROS_MASTER_URI','http://127.0.0.1:11311'); % 单机通讯可省略此步
%Starting ROS MASTER
rosinit;
%Creating ROS publisher handle
chatpub = rospublisher('talker', 'std_msgs/String');
%Creating message definition
msg = rosmessage(chatpub);
%Inserting data to message
msg.Data = 'Hello, from MatLab';
%sending message to topic
send(chatpub, msg);
%Latching the message on topic
latchpub = rospublisher('talker', 'IsLatching', true);
终端中启动ROS,再新建终端,
注: 此节内容没有实现MatLab与ROS节点之间的通讯,这是笔者下一步研究的内容。
3.3 simulink搭建模块订阅ROS发布的主题
依旧以控制小乌龟为例,如图