(この記事は「ROSアドベントカレンダー Advent Calendar 2018」の14日目です)
ルータなしでネットワークを構築
Wi-Fi機能はあるけど、PCと繋げるのにいちいち無線ルータを持っていくのは面倒くさい、Wi-Fiだと遅延が酷くてよくわからない、そもそもWi-Fi機能がないボードを使っている、といったことはないでしょうか。
私はZyboZ7-7020ボードを用いて、FPGA×ROSロボット開発を行なっていたのですが、Wi-Fiのデバイスドライバの導入がうまくいかず、LANポートを用いてPCとネットワークを構築していました。
あらかじめ設定しておけば、FPGAボードのLANポートとPCのLANポートを直接繋ぐだけで、
- FPGA上でからPublishされている各トピックのデータをPCでSubscribeしてデバッグ
- PCからFPGA上のUbuntuにsshでログインできる
と何かと便利でした。
LANポートの種類によっては、ストレートLANケーブル(普通のLANケーブル)でもできるみたいなので、クロスLANケーブルをお持ちでない方は、まずストレートケーブルでお試しください。
ipアドレスの固定
ボード
sudo nano /etc/network/interfaces
を開いて
auto eth0
iface eth0 inet dhcp
のdhcpをstaticに変更します。
さらに
auto eth0
iface eth0 inet static
address 192.168.2.101
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers 192.168.2.1
と追記してください。
sudo /etc/init.d/networking restart
でネットワークが再起動するので、
ifconfig
でaddressが192.168.2.101になっていることを確認できればOKです。
###PC
まず、ifconfig
でLANポートの名前を確認します。eth0以外だったら(enp0s25等)以下のeth0はそれに置き換えてください。
ここからは先ほどと同様に、
sudo nano /etc/network/interfaces
を開いて
auto eth0
iface eth0 inet dhcp
のdhcpをstaticに変更します。
さらに、
auto eth0
iface eth0 inet static
address 192.168.2.100
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers 192.168.2.1
と追記してください。
sudo /etc/init.d/networking restart
でネットワークが再起動するので、
ifconfig
でaddressが192.168.2.100になっていることを確認できればこちらもOKです。
ROSの設定
以下はボード側をマスターにする場合です。
(PC側をマスターにする場合はROS_MASTER_URI=http://192.168.2.100:11311
としてください)
###ボード
nano ~/.bashrc
を開き
以下のようにROS_MASTER_URIとROS_HOSTNAMEを書き換えます
export ROS_MASTER_URI=http://192.168.2.101:11311
export ROS_HOSTNAME=192.168.2.101
source ~/.bashrc
でbashを読み込んで設定完了です。
###PC
nano ~/.bashrc
を開き
以下のようにROS_MASTER_URIとROS_HOSTNAMEを書き換えます
export ROS_MASTER_URI=http://192.168.2.101:11311
export ROS_HOSTNAME=192.168.2.100
source ~/.bashrc
#接続
PCとボードを(クロス)LANケーブルで繋ぎます。
###PCからボードにssh接続する場合
PC側で
ssh {ボードのユーザー名}@192.168.2.101
###ROSの利用
MASTERに設定している方でroscore
あとはネットワークが構築されているので通常通りに使えます。
#Zyboで使っていた時に起きた不具合
ボードはカーネルによっては起動時のネットワークが安定しないことがあります。
起動時にネットワークが192.168.2.101にならない場合があるので、その場合はシリアル通信でボードにログインし、sudo /etc/init.d/network restart
をしなければなりません。不便ですね...
外部からネットワークアクセスがあると、そちらからのブート待機状態となるため、起動が遅くなる場合があります。
この場合は、シリアル通信でボードにログインし、Ctrl+Cなどでブート待機を強制スキップすることができます。もしくは、LANケーブルを抜いておくことによって回避できます。
ネットワークの利用には電力を消費するため、ボードが急に落ちることがあります。
電力が足りずに落ちてしまう場合、電力供給を見直す必要があります。