[ロボ実験記録] 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に適当な変更を加えてみます。

93行目: キー1を押すと、特定の姿勢に一気に変更するコマンドにしました。
(突然アームが高速で動くので注意。アームが液晶ディスプレイに衝突して、治らない傷が付きました)

この状態で、新たに作ったファイルを実行すればOKです。

ros2 run crane_plus_commander commander1_2

物体の把持(次回?)

ロボットアームは、モノを掴ませるために購入しました。
そこで、物体を把持するためのコードを実装します。
こちらのサイトも参考にする予定です。


この記事が気に入ったらサポートをしてみませんか?