1. はじめに
Go1をROSを用いて運動制御するために、Unitree社はunitree_ros_to_real パッケージを公開しています。
本稿は、前回の記事に引き続き、Go1に無線接続をし、外部PC上から unitree_ros_to_real のローレベル制御を実行する方法をご案内します。
Github unitree_ros_to_real: https://github.com/unitreerobotics/unitree_ros_to_real
2. 環境
以下の環境にて、この手順が有効であることを確認しています。
- 機種: R&D(Edu), R&D+(Edu+)
- 外部PC: Linux Ubuntu 20.04 (amd64)
- ROS: Noetic
- unitree_legged_sdk: v3.8.6
3. 手段
まず前回の記事に沿って、必要に応じてGo1のWi-Fiに接続し、unitree_ros_to_real のパッケージをクローンしてください。
ネットワーク設定
(Go1のシステムアーキテクチャ)
Go1をローレベルで制御するときは MCU (IP: 192.168.123.10) を使用します。そのため、外部との接続に使っているWifiモジュール (IP: 192.168.12.1) と MCU 間のルートを確立する必要があります。
(1) Raspberry Pi に ssh でログイン
$ ssh pi@192.168.12.1
(2) IPフォーワードを有効化
Raspberry Pi でのパケットの転送を可能にするために、
$ sudo vi /etc/sysctl.conf
でファイルを開き、net.ipv4.ip_forward=1
の行のコメントを外してください。
ファイルを保存して閉じ、変更した設定をリロードします。
$ sudo sysctl -p
(3) iptables の設定
iptables を利用して、ルーティングとパケットフィルタリングの設定を行います。
まず、filter
、nat
テーブルの設定をすべてクリアします。
$ sudo iptables -F
$ sudo iptables -t nat -F
wlan1
(IP: 192.168.12.1)、eth0
(IP: 192.168.123.161) へ出ていくパケットについてIPマスカレードを有効化し、IPアドレス・ポート番号を変換するように設定します。
$ sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Raspberry Pi を経由したパケットの転送を wlan1
とeth0
間で許可します。
$ sudo iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o wlan1 -j ACCEPT
iptables の設定は、各テーブルについて以下のコマンドで確認できます。
外部PCのターミナルで ping 192.168.123.10
を打ち、以下のようになったらMCUに通信できることが確認できます。
必要に応じて、外部PCのデフォルトゲートウェイを192.168.12.1
に設定してください。
$ sudo route add default gw 192.168.12.1
実行
(1) はじめにローンチファイルを実行
$ roslaunch unitree_legged_real real.launch ctrl_level:=lowlevel
(2) プログラムの実行
ローレベル制御のサンプルでは、右前脚の Calf が曲げ伸ばしされるのが確認できます。
$ rosrun unitree_legged_real example_postion
※ ローレベル制御をする際は、ジョイスティックで L2+A を押しロボットを座らせ、ハンガーキャスターでロボットを吊るしてください。
関連記事
【Unitree Go1】外部PC上から無線で unitree_ros_to_real を実行する:ハイレベル制御
【Unitree Go1】Low Level制御の概要について