Jetson Nano/PC間でROS接続する


Jetson NanoとPC間でROSで通信できるか確認した際の備忘録です
(Jetsonを使っていますが、基本的には従来のROS接続方法と同じ)

構成

PC側にROS_MASTERを置きます

各マシンのIPアドレスを事前確認

  • PC(ROS_MASTER)側 IPアドレス
ubuntu@ubuntu:~$ hostname -I | cut -d' ' -f1
192.168.179.6
  • Jetson側 IPアドレス
jetson@jetson-desktop:~$ hostname -I | cut -d' ' -f1
192.168.179.8

環境変数の設定

  • PC(ROS_MASTER)側に、ROS_MASTER/ROS_IPを設定
export ROS_MASTER_URI=http://192.168.179.6:11311  # ROS_MASTER側のアドレスを設定
export ROS_IP=192.168.179.6                       # 自分のIPアドレスを設定
  • Jetson側、ROS_MASTER/ROS_IPを設定
export ROS_MASTER_URI=http://192.168.179.6:11311  # ROS_MASTER側のアドレスを設定
export ROS_IP=192.168.179.8                       # 自分のIPアドレスを設定

roscore/turtlesim起動

  • PC(ROS_MASTER)側、roscore/turtlesim_nodeを起動
roscore
rosrun turtlesim turtlesim_node
  • Jetson側、turtle_teleop_keyを起動

以下でturtleを操作できればOK

rosrun turtlesim turtle_teleop_key

正しく設定できていると、turtlesimのrosnodeがnode一覧にある

$ rosnode list
/rosout
/turtlesim

備考

環境変数の設定

環境変数の設定は各ターミナル毎にする必要があるので手間が掛かる。
~/.bashrcに記載しておきたい。
ただIPアドレスが変わるとやはり設定をやり直す必要があるので簡単化したいところ。

以下コマンドを使ってみたい
rosaddress コマンドを更新した話

画像データは圧縮して扱った方が良さそう

無線だと通信帯域が狭いので圧縮しないと厳しいです
wifi経由でトピック通信する時、画像データは圧縮して扱った方が良さそう

PC間の通信速度を確認する方法

以下を参考
iperfを使ってPC間の通信速度を確認する

PC間でのトピック通信確認用コマンド(/cmd_velを送信)

rostopic pub -1 /cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

PC側からjetson側にパスワードなしでリモートログイン

リモートログインする際に毎回パスワードを実行するのは手間なので以下設定を行う。(通常の手順と変わらないが念のためメモ)

PC側で秘密鍵/公開鍵ペア生成する

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096  # 秘密鍵/公開鍵ペア生成(鍵の名前を"jetson"にしておく)
$ ls 
jetson       # 秘密鍵
jetson.pub   # 公開鍵

PC側の~/.ssh/configの中身を更新する

Host 任意の名称(こちらの名称が接続時に使用できます)
    Hostname 接続先のIPアドレス/ドメイン名
    User ユーザ名
    Port ポート番号
    Identityfile 鍵ファイルのパス
    ServerAliveInterval 秒(自動切断防止設定。後述)

例えば以下

Host jetson
    Hostname 192.168.179.8
    User jetson
    Port 22
    Identityfile ~/.ssh/jetson
    ServerAliveInterval 60

その後、jetson側にPC側で作成した公開鍵をコピーした後にjetson側のauthorized_keysに登録しておく。
例えば以下。

cd ~/.ssh/
cat jetson.pub >> authorized_keys

これでPC側から、以下コマンドでjetsonにパスワードなしでリモートログインできる。

ssh jetson

SSHコマンドがだるすぎる、、、公開鍵認証&ssh configで楽にしましょう
~/.ssh/configでSSHコマンドを快適化
SSH経由でコマンド実行すると環境変数を読まないでござる

参考

NVIDIA JETSON NANO
ROS講座20 複数のPCでROS接続1
Dockerで ROS Kinetic 環境を扱う
http://wiki.ros.org/ja/ROS/EnvironmentVariables