首页 > 代码库 > ROS节点分布式运行方法

ROS节点分布式运行方法

一. 主机Master设置

1.安装ssh客服端和服务器(ubuntu已默认安装了)

2.机器名与ip绑定

<style></style>

由于/etc/hosts中需要将计算机名和IP绑定,所有最好设置IP地址为静态地址

   sudo nano /etc/hosts

   添加Master的ip地址和机器名 eg:192.168.3.155  wang

   添加slave的ip地址和机器名 eg:192.168.3.156  han(Master不添加此项好像也行,slave需要添加此项)

3.保险起见修改/etc/hostname中机器名与用户名相同

    sudo nano /etc/hostname

    将wang-desktop改为wang(同用户名)

    用sudo nano /etc/hosts,将其中的wang-desktop也改为wang

<style></style>

4.export ROS_MASTER_URI=”http://wool:11311”

 

二.slave设置

1.同Master的1.2.3.4

<style></style>

 

三.开始使用

假设:               master                           slave

                          hal                                 marvin

                          listener                          talker

1.启动[[master]]

我们需要选择一台机器运行master,这里我们选hal. 启动master的第一步是:

ssh halroscore

2.启动listener

接下来我们在机器hal上启动listener, 并配置ROS_MASTER_URI,这样就可以使用刚刚启动的master了:

ssh halexport ROS_MASTER_URI=http://hal:11311rosrun rospy_tutorials listener.py

 3.启动talker

现在我们要在marvin 机器上启动talker,同样通过配置ROS_MASTER_URI来使用hal机器上的master:

ssh marvinexport ROS_MASTER_URI=http://hal:11311rosrun rospy_tutorials talker.py

小惊喜: 现在你可以看到机器hal上的listener正在接收来自marvin机器上talker发布的消息

注:如果运行的节点在该机器上,可以不用ssh

 

四.如果节点不在同一机器上时的配置

<style></style>

有多种方法可在不同的机器上运行节点,简单的方法就是在各自机器上分别启动。另外一个方法是使用launch文件统一启动这些节点,如下:

<launch>

<include file="bzrobot.machine">

<node pkg="rospy_tutorials" type="listener.py" name="listener" machine="wool" />

<node pkg="rospy_tutorials" type="talker.py" name="talker" machine="wooa" />

</launch>

Machine标签

创建machine标签,以方便将node分配到不同的machine上运行,举例如下:

<launch>

<machine name="wool" address="wool" env-loader="/opt/ros/indigo/env.sh" default="true" />

<machine name="wooa" address="wooa" env-loader="/opt/ros/indigo/env.sh" />

</launch>


env.sh环境变量设置

使用env.sh文件设置运行nodemachine的所需环境,如下:

#!/bin/sh


export ROSLAUNCH_SSH_UNKNOWN=1

#export ROS_MASTER_URI=wool


. /opt/ros/indigo/setup.sh


exec "$@"


ROS节点分布式运行方法