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側にパスワードなしでリモートログイン
リモートログインする際に毎回パスワードを実行するのは手間なので以下設定を行う。(通常の手順と変わらないが念のためメモ)
ssh jetson@192.168.179.8
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