ROSチュートリアル-複数のコンピュータネットワークの設定
5784 ワード
ROSチュートリアル-複数のコンピュータネットワークの設定
本文は主にROS公式サイトの教程と白チョコレートも唯心の博文を参考にします:ROSの設計の魂はその分布式の計算にあります.優れたノードは、どのマシン上で実行されるかを考慮する必要がなく、システムリソースを最大化するために計算量をリアルタイムで割り当てることができます.(ハードウェアデバイスと物理的に接続されたマシン上で駆動ノードが動作しなければならないという特例があります).複数のロボットでROSを使用するのは簡単ですが、いくつかの点を覚えておく必要があります.-マスターが1つしか必要ありません.1つのマシンで実行すればいいです.-すべてのノードは、ROS_を構成する必要があります.MASTER_URIは同じマスターに接続されています.-任意の2つのマシン間の任意の2つのポートには、完全で双方向に接続されたネットワークが必要です.-各機器は解析可能な名前を他の機器に放送しなければならない.
一、2台の機械のIPとホスト名を取得し、hostsファイルを配置する
まずifconfigとhostnameコマンドを使用して、2台のパソコンのIPとホスト名を表示します.ここで、この2台のパソコンのホスト名がそれぞれmarvinとhalであると仮定し、それぞれ対応するパソコン端末に以下の2つのコマンドを入力して、対応するIPとホスト名を表示することができます.
2台のコンピュータが相手のIPと相手のhostnameに対応していることを認識するために、ここでは/etc/hostsマッピングファイルを構成し、/etcディレクトリの下に多くのプロファイルが含まれているので、Linuxチュートリアルを参照してこのファイルに関する情報を知ることができ、このファイルを構成しなければ、pingの時にIPアドレスを使う必要があり、ホスト名を直接pingすることはできません.hostsファイルは読み取り専用ファイルなので、sudo以降に変更する必要があります.ubuntuなどのgeditエディタのあるシステムであれば、次のコマンドで変更できます.
geditなどの可視化インタフェースがなければ、vim修正(vimがなければ、一般的にviもある)が一般的です.
変更してファイルを保存します.hostsファイルを開くと、通常のファイルにはすでに2行あります.localhostと現在のコンピュータのホスト名です.次に、現在のコンピュータのIPとそのホスト名、および2つの外の1台のコンピュータのIPと対応するホスト名の2行を追加します.一般的には次の形式です.
このIPは、そのパソコンが対応するネットワークにあるIPです.パソコンが複数のネットワークに接続されている場合は、ifconfigでIPを表示するときに注意してください.hostsファイルを変更した後、ネットワークを再起動し、次のコマンドを入力します.
二、全接続テスト
pingコマンドを使用して、すべてのポートの双方向接続性(full bi-directional connectivity on all ports)テスト方式をテストします.pingホスト名、self pingとping between machinesを含む2台のコンピュータにそれぞれ次のコマンドを入力します.
同様のテスト結果が表示されます.
さらなるテスト:netcatを利用してなぜさらなるテストが必要なのか、これはrosの公式サイトが与えた理由です:ping only checks that ICMP packets can get between the machines,which isn’t enough.You need to make sure that you can communicate over all ports. 技術的な観点から言えば、ICMPは「エラー検出とリターンメカニズム」であり、ネットワークの接続状況を検出したり、接続の正確性を確保したりすることを目的としていますが、これはまだ十分ではありません.すべてのポートの通信状況をテストする必要があります.ROS公式サイトが提供する方法はnetcatを利用してポート通信状況をランダムにテストすることであり、前提はポート番号が1024より大きいポートしかテストできないことである.1024以下のポートにはsuperuserの権限が必要であるため、一部のバージョンlinuxではnetcatコマンドがncとも呼ばれる可能性がある.Netcat(nc)の使用は、オープンソースの中国コミュニティの技術共有テスト方法を参考にすることができます.まず、最初のコンピュータ(marvin)から別のコンピュータをリスニングし、最初のコンピュータにコマンドを入力します.
別のコンピュータ(hal)に入力します.
通信が成功すれば、2つのコマンドラインに文字を入力して交流することができ、QQインスタント通信に似ています.同じように、方向を交換してhalに入力します.
marvinに入力:
通信をテストします.1台のコンピュータが仮想マシンである場合、linux仮想マシンを参照してホストをpingすることができ、ホストは仮想マシンをpingできない.
三、ROS MASTERの設定(ROSホスト)
ROSホストの設定、すなわち環境変数ROS_の設定MASTER_URI、私達は2台のコンピュータの上ですべて以下の設定を行って、このように2台のコンピュータはやっと共にmarvinをMASTERに認定することができます:普通は以下の命令を通じてROS_を修正することができますMASTER_URI
しかし、このような操作は、現在の端末にのみ作用し、~/を修正することができる.bashrcファイルは、環境変数を設定します.つまり、ファイルを開き、最後に上記のコマンドを追加し、ファイルをsourceします.コマンドを入力します.
ここでは、ブログ「bashrcとprofileを理解する」とbashrcとprofileの違いを参照して、私たちがなぜこのようにするのかを理解することができます.その後、ROSが独自のテストノードを使用して、構成が成功したかどうかをテストできます.最初のステップは、ROSホストmarvinでlistenerノードを実行し、次のように入力します.
別のコンピュータhalに入力します.
構成に成功すると、ホストmarvinにマシンhalからパブリッシュされたメッセージが表示されます.同様に、ホストmarvinで実行するテストを逆方向に実行できます.
halで実行
構成に成功しても同様の現象が見られます.次はROS_を変更できますMASTER_URIは,ROSホストとして他のコンピュータを選択し,それに応じてテストを行う.
ここまで2台のコンピュータのROS通信ネットワークを設置しており,さらなる開発と構成が可能である.
本文は主にROS公式サイトの教程と白チョコレートも唯心の博文を参考にします:ROSの設計の魂はその分布式の計算にあります.優れたノードは、どのマシン上で実行されるかを考慮する必要がなく、システムリソースを最大化するために計算量をリアルタイムで割り当てることができます.(ハードウェアデバイスと物理的に接続されたマシン上で駆動ノードが動作しなければならないという特例があります).複数のロボットでROSを使用するのは簡単ですが、いくつかの点を覚えておく必要があります.-マスターが1つしか必要ありません.1つのマシンで実行すればいいです.-すべてのノードは、ROS_を構成する必要があります.MASTER_URIは同じマスターに接続されています.-任意の2つのマシン間の任意の2つのポートには、完全で双方向に接続されたネットワークが必要です.-各機器は解析可能な名前を他の機器に放送しなければならない.
一、2台の機械のIPとホスト名を取得し、hostsファイルを配置する
まずifconfigとhostnameコマンドを使用して、2台のパソコンのIPとホスト名を表示します.ここで、この2台のパソコンのホスト名がそれぞれmarvinとhalであると仮定し、それぞれ対応するパソコン端末に以下の2つのコマンドを入力して、対応するIPとホスト名を表示することができます.
ifconfig
hostname
2台のコンピュータが相手のIPと相手のhostnameに対応していることを認識するために、ここでは/etc/hostsマッピングファイルを構成し、/etcディレクトリの下に多くのプロファイルが含まれているので、Linuxチュートリアルを参照してこのファイルに関する情報を知ることができ、このファイルを構成しなければ、pingの時にIPアドレスを使う必要があり、ホスト名を直接pingすることはできません.hostsファイルは読み取り専用ファイルなので、sudo以降に変更する必要があります.ubuntuなどのgeditエディタのあるシステムであれば、次のコマンドで変更できます.
gksu gedit /etc/hosts
geditなどの可視化インタフェースがなければ、vim修正(vimがなければ、一般的にviもある)が一般的です.
sudo vim /etc/hosts
変更してファイルを保存します.hostsファイルを開くと、通常のファイルにはすでに2行あります.localhostと現在のコンピュータのホスト名です.次に、現在のコンピュータのIPとそのホスト名、および2つの外の1台のコンピュータのIPと対応するホスト名の2行を追加します.一般的には次の形式です.
192.168.1.1 marvin
192.168.1.2 hal
このIPは、そのパソコンが対応するネットワークにあるIPです.パソコンが複数のネットワークに接続されている場合は、ifconfigでIPを表示するときに注意してください.hostsファイルを変更した後、ネットワークを再起動し、次のコマンドを入力します.
sudo /etc/init.d/networking restart
二、全接続テスト
pingコマンドを使用して、すべてのポートの双方向接続性(full bi-directional connectivity on all ports)テスト方式をテストします.pingホスト名、self pingとping between machinesを含む2台のコンピュータにそれぞれ次のコマンドを入力します.
ping marvin
ping hal
同様のテスト結果が表示されます.
PING marvin (192.168.0.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=63 time=1.868 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=2.677 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=1.659 ms
......
さらなるテスト:netcatを利用してなぜさらなるテストが必要なのか、これはrosの公式サイトが与えた理由です:ping only checks that ICMP packets can get between the machines,which isn’t enough.You need to make sure that you can communicate over all ports. 技術的な観点から言えば、ICMPは「エラー検出とリターンメカニズム」であり、ネットワークの接続状況を検出したり、接続の正確性を確保したりすることを目的としていますが、これはまだ十分ではありません.すべてのポートの通信状況をテストする必要があります.ROS公式サイトが提供する方法はnetcatを利用してポート通信状況をランダムにテストすることであり、前提はポート番号が1024より大きいポートしかテストできないことである.1024以下のポートにはsuperuserの権限が必要であるため、一部のバージョンlinuxではnetcatコマンドがncとも呼ばれる可能性がある.Netcat(nc)の使用は、オープンソースの中国コミュニティの技術共有テスト方法を参考にすることができます.まず、最初のコンピュータ(marvin)から別のコンピュータをリスニングし、最初のコンピュータにコマンドを入力します.
netcat -l 1234
別のコンピュータ(hal)に入力します.
netcat marvin 1234
通信が成功すれば、2つのコマンドラインに文字を入力して交流することができ、QQインスタント通信に似ています.同じように、方向を交換してhalに入力します.
netcat -l 1234
marvinに入力:
netcat hal 1234
通信をテストします.1台のコンピュータが仮想マシンである場合、linux仮想マシンを参照してホストをpingすることができ、ホストは仮想マシンをpingできない.
三、ROS MASTERの設定(ROSホスト)
ROSホストの設定、すなわち環境変数ROS_の設定MASTER_URI、私達は2台のコンピュータの上ですべて以下の設定を行って、このように2台のコンピュータはやっと共にmarvinをMASTERに認定することができます:普通は以下の命令を通じてROS_を修正することができますMASTER_URI
export ROS_MASTER_URI=http://marvin:11311
しかし、このような操作は、現在の端末にのみ作用し、~/を修正することができる.bashrcファイルは、環境変数を設定します.つまり、ファイルを開き、最後に上記のコマンドを追加し、ファイルをsourceします.コマンドを入力します.
source ~/.bashrc
ここでは、ブログ「bashrcとprofileを理解する」とbashrcとprofileの違いを参照して、私たちがなぜこのようにするのかを理解することができます.その後、ROSが独自のテストノードを使用して、構成が成功したかどうかをテストできます.最初のステップは、ROSホストmarvinでlistenerノードを実行し、次のように入力します.
rosrun rospy_tutorials listener.py
別のコンピュータhalに入力します.
rosrun rospy_tutorials talker.py
構成に成功すると、ホストmarvinにマシンhalからパブリッシュされたメッセージが表示されます.同様に、ホストmarvinで実行するテストを逆方向に実行できます.
rosrun rospy_tutorials talker.py
halで実行
rosrun rospy_tutorials listener.py
構成に成功しても同様の現象が見られます.次はROS_を変更できますMASTER_URIは,ROSホストとして他のコンピュータを選択し,それに応じてテストを行う.
ここまで2台のコンピュータのROS通信ネットワークを設置しており,さらなる開発と構成が可能である.