實現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爲:

PCw PCu
SIAT-20190705OY kun-System-Product-Name
172.20.10.152 172.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
——————————————
版權聲明:轉載請附上原文出處鏈接及本聲明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章