实现windows Matlab/Ros 与 Ubuntu Ros两台电脑之间的协同运行

csdn原创文章,转载请注明

本文描述了如何在两台电脑之间通过ROS实现协同运行的方法。系统配置为:

  1. 一台电脑运行windows 10系统、Matlab R2019b, 本文简称PCw
  2. 另一台电脑运行Ubuntu 16.04和Ros
    Kinetic,本文简称PCu
  3. 两台电脑通过网线连接于同一局域网。

1. PCw运行Matlab, 启动ROS

PCw运行Matlab2019b,其自带robotics system toolbox工具箱,启动ros:

>> rosinit

Matlab启动成功后,显示

Initializing ROS master on http://SIAT-20190705OY:11311/.
Initializing global node /matlab_global_node_72448 with NodeURI http://SIAT-20190705OY:62356/
>> 

2 确认两台电脑的名称和IP地址

第一台电脑PCw在cmd命令行输入,得到主机名

>> hostname

或者

>> systeminfo

PCw在cmd命令行输入,得到IP地址

>> ipconfig

第二台电脑PCu在终端输入,得到主机名

>> hostname

输入下列命令,得到IP地址

>> ifconfig -a

本文中两台电脑的主机名和IP为:

PCwPCu
SIAT-20190705OYkun-System-Product-Name
172.20.10.152172.20.10.110

3 两台电脑设置对方信息

1. PCu端设置:
终端中输入下列命令打开hosts文件:

sudo gedit /etc/hosts

修改/etc/hosts文件 添加运行matlab端电脑PCw的IP地址: 在etc/hosts文件中添加 "172.20.10.152 SIAT-20190705OY "

新打开一个终端,打开ROS:

roscore

2. PCw端设置:
在matlab端输入以下命令,设置ROS主机的IP地址为Ubuntu端电脑的IP;启动ros:

>> setenv('kun-System-Product-Name','http://172.20.10.110')
>> rosinit

用rostopic list 命令查看话题名称:

rostopic list

这时候就可以看大有一个‘/rosout’ 的话题:

>> rostopic list
/rosout

还可以在matlab端使用命令 “help robotics.ros” 来查看相关命令:

help robotics.ros

4 Example

example:

  1. 在Ubuntu端启动一个pr2机器人,
  2. 实现在MATLAB端接收显示pr2机器人的传感器数据,
  3. 发布控制命令到/cmd_vel 话题上控制pr2机器人运行。

步骤
s1: 在Ubuntu端启动pr2机器人
首先确保已经按照上文设置好了PCw的主机名和地址。打开终端,启动ROS,启动pr2机器人。

roscore
roslaunch pr2_gazebo pr2_empty_world.launch

如果正常,会出现gazebo的pr2机器人界面;如果有问题,请参见博主另一篇介绍pr2启动的文章。
s2: matlab 端首先设置ROS主机为ubuntu 端的电脑,然后在matlab中初始化ros,最后利用rostopic list 查看主机上发布的话题。

setenv('ROS_MASTER_URI','http://10.5.3.11:11311')
rosinit
rostopic list

s3: matlab端处理pr2发布的topic:

列出topic:

rostopic list 

查看topic信息:

rostopic info /torso_lift_imu/data 

打印topic信息

rostopic echo /torso_lift_imu/data

s4: PCw接收PCu的机器人消息
即接收并显示PR2发布的激光雷达数据。ROS 在matlab中接收一个topic的函数是 rossubscriber(topic_name,@function), 与ros中的接收函数不同,在matlab中不需要指定这个话题的数据类型,它会自动检测消息类型。function 表示回调函数,可以指定回调函数,也可以缺省。在matlab命令窗口中输入:

>> laser = rossubscriber('/base_scan');
>> scandata = receive(laser,10);
>> plot(scandata)

s5: PCw发布消息(控制命令to PCu)
创建一个发布器:

chatterpub = rospublisher('/chatter',rostype.std_msgs_String);

填充数据:

chattermsg = rosmessage(chatterpub);
 chattermsg.Data = 'test 2 PCs msg transfer';
send(chatterpub,chattermsg)

在ROS主机PCu上运行:

rostopic echo /chatter

每当PCw在matlab端调用一次 “send(chatterpub,chattermsg)” 函数,在ROS端就会打印一次: test 2 PCs msg transfer
——————————————
版权声明:转载请附上原文出处链接及本声明。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值