[ロボ実験記録] ROS2の勉強2: ロボットアームの制御 with Docker & VSCode (リモートSSH接続)
概要
ロボットアームの快適な操作にはROS2は避けられないようなので、ROS2を、かいつまんで勉強していきます
ロボットアーム CRANE+ V2を動かします
Dockerのコツを掴んできたので、リモート環境でのdocker + vs codeの開発環境整備から説明します
前回
Dockerのセットアップ
まだDockerが入っていない場合、Githubの記事を参考に入れます。
sudo apt install docker.io
sudo adduser $USER docker
次の書籍&Gitで配布されているdocker imageを入れます。
コンテナのセットアップ
#docker の run スクリプトのダウンロード
wget https://raw.githubusercontent.com/AI-Robot-Book/docker-ros2-desktop-ai-robot-book/ai-robot-book/run.bash
#実行
chmod +x run.bash
./run.bash
二回目以降のコンテナ立ち上げや終了作業には、以下のコマンドを使います。
#停止
docker stop ai_robot_book
#開始
docker start ai_robot_book
vs codeのdocker addonを入れれば、guiでも操作できます。

リモート環境での環境整備
今回の作業においては、docker類は、すべてubuntuのマシンに入れて動かしています。
一方で普段の環境はwindows + VSCodeなので、こちらからアクセスできるようにします。
VSCodeには、remote sshやdev containersを入れておきます。
containerの立ち上げ
vs codeでサーバーにssh接続した状態で、次のコマンドを実行します。
docker start ai_robot_book
このcontainerはデフォルトで6080のポートを使うので、forwardingの設定をvs code上で追加します。

正しくコンテナ起動とポート追加ができていれば、
http://localhost:6080/
にブラウザでアクセスして、デスクトップ環境を開けるはずです。

しかし、後述の通り、このデスクトップ環境は基本的に使いません。
(クリップボードの共有ができなかったり、タイムラグがあったりして、不便なので。)
containerへのvs codeでの接続
すべての作業をブラウザ経由(上述)で行うことも可能ですが、文字入力などはvs codeを使った方が何かと楽です。
vs codeのremote explorerでコンテナに接続します。
1. 開発コンテナ を選択
2. 起動中のコンテナ(ros2-desktop-ai…)を選択してアタッチ(「→」ボタンを押す)

無事に接続できると、container内のターミナルに接続できるはずです。

サンプルコード実行
サンプルコードを実行していきます。
VSコードのターミナル上で、次のコマンドを実行します。
ros2 launch crane_plus_description display.launch.py
すると、guiのウィンドウが、 windowsの画面上に新たに生成されました。
(うまくいかない場合は、ブラウザ上で操作となりそうです)

CRANE+ V2の利用
CRANE+ V2を7万円くらいで購入します(シミュレータは無料です)。
デバイスへの接続&gazebo(gui画面)を表示します。
#usbデバイスへの権限付与
sudo chmod 666 /dev/ttyUSB0
#立ち上げ
ros2 launch crane_plus_examples demo.launch.py port_name:=/dev/ttyUSB0
注意点として、dockerを立ち上げる前に、デバイスを接続しておく必要があります。
実機がない(シミュレータのみ)の場合は以下のコマンドを使います。
#ignition gazeboの場合を使うようです。
ros2 launch crane_plus_commander crane_plus_ignition_no_moveit.launch.py
次に、新たにターミナルを作り、グリッパを動かすコードを走らせてみます。
ros2 launch crane_plus_examples example.launch.py example:='gripper_control'
書籍のサンプルコードの実行
commander1-6までがあるようです(GitHubを参照)。
ロボットアームを動かせます。
ros2 run crane_plus_commander commander1
せっかくなので、サンプルコードを改造してみます。
airrobot_wsフォルダ内にあるサンプルコード(commander1.py)を複製し、commander1_2.pyとします。

setup.pyにファイルを追加します。

あとはbuildするだけです。
cd ~/airobot_ws/
colcon build --symlink-install
commander1_2.pyに適当な変更を加えてみます。

(突然アームが高速で動くので注意。アームが液晶ディスプレイに衝突して、治らない傷が付きました)
この状態で、新たに作ったファイルを実行すればOKです。
ros2 run crane_plus_commander commander1_2
物体の把持(次回?)
ロボットアームは、モノを掴ませるために購入しました。
そこで、物体を把持するためのコードを実装します。
こちらのサイトも参考にする予定です。