TurtleBot3 (Waffle Pi) を制御するためのメモ
TurtleBot3 (Waffle Pi) の設定や操作方法などを解説する。
Li-Poバッテリーに付いての注意
Turtlebot3には、リポ (Li-Po) バッテリーと呼ばれるバッテリーが付属する。
これは、ラジコンやロボットで使われることが多いものだが、取り扱いに注意して使う必要があるので、ここからの注意をよく読むこと。
Li-Po バッテリーについてネットで検索すると情報はたくさん見つかるが、例えば以下のようなサイトがある。
リンクをたどって一度読んでから本ページの続きを読んで欲しい。
ポイントは
- 使い過ぎない(過放電禁止)
- 充電しすぎない(過充電禁止)
の2点である。
(1) は電池残量が完全に0になる前に使用をやめて充電する、ということ。
(2) は、Li-Poバッテリー専用充電器を使うことで危険をさけることができるが、充電しっぱなしで帰宅するのは禁止、ということ。
そのようなわけで、以下のルールを設ける。
- 帰宅前に、Li-Poバッテリーの充電をとめて帰ること
- 帰宅前に、充電機自体もコンセントから外すこと
あと、保管時にフル充電状態で保管するのも良くなく、上記サイトでは
- リポバッテリーを使用しない場合は、バッテリー残量を60%程度にして保管しておきます
とある。フル充電状態から少し使って保管、が良いということであろう。
面倒なルールが多いが、そのようなものだということで取り扱いに注意すること。
ネットワークの解説
皆さんが使う TurtleBot3 に関連する ROS 設定済み PC の情報をまとめたのが以下である。
Ubuntu 20.04 が搭載されたノートPC (Let's Note) が一台、ロボット上の Raspberry Pi (ラズベリーパイ) が一台である。
Raspberry Pi はシングルボードコンピュータと呼ばれ、名刺サイズのコンピュータである。
下図に示したように、Raspberry Pi にも Ubuntu がインストールされており、その上に ROS (Noetic Ninjemys) の環境が構築されている。
それぞれのネットワーク上の IP アドレス、PC名、ログインユーザー名とパスワードも記されている。
当面はノートPCのみにログインできれば良いだろうが、
ロボットの設定を変えたい場合などには、Raspberry Pi 上の Ubuntu にログインしなければないこともあり得る。
参考までに、TurtleBot3 の公式のマニュアルはこちらである。
TurtleBot3 購入後に実際に行われた設定がどんなものか知りたい場合は、このマニュアルの「3. Quick Start Guide」を開き、
画面上部の「Noetic」というボタンをクリックすれば良い。Noetic は今回用いる ROS のバージョン名である。
また、上図には TurtleBot3 を制御する際、ノート PC 側が ROS のマスターになることも記されている。
ROS の教科書に書いてあるだろうが、マスターとは roscore の実行されている PC (正確にはノード) のことである。
なお、マスターという概念は ROS のバージョン 1 にしか存在しない。
電源オン/オフの解説
ここでは、TurtleBot3 の電源オン/オフの方法を解説する。
TurtleBot3 へ電源がどのように供給されるかのイメージを示したのが下図である。
まず、電源供給は「バッテリーから」と「ACアダプタから」の二系統あることに注意して欲しい。
ロボットとして動作させるにはバッテリーで動作させるのが自然であるが、充電池であるのでもちろん動作時間に制限がある。
一方、ACアダプタを用いれば動作時間に制限はないが、有線でコンセントに接続されるためロボットの動作が制限される。
そのため、状況に応じて使い分けることになる。
上図において、Raspberry Pi と OpenCR が TurtleBot3 上に存在する。
OpenCR はモーターを制御するためのマイコンボードで以下のようなものである。
左端にスイッチ (SW) と AC アダプタ用コネクタが見える。
OpenCR に対してバッテリーかACアダプタを接続した後、OpenCR 上のスイッチ (SW) をオンにすると、
OpenCR に電源が供給され、さらにその先に接続された Raspberry Pi にも電源が供給される。
すなわち、電源投入時は以下の手順に従えば良く、特に難しいことはない。
- バッテリーまたは AC アダプタを TurtleBot3 上の OpenCR に接続
- OpenCR 上の SW をオンに
問題は電源オフである。OpenCR はマイコンであるので、そのまま電源が切られても問題はない。
しかし、Rapsberry Pi はコンピュータであるので、適切な手順でシャットダウンを実行しなければならない。
そのために取り付けてあるのが上図の「RasPi 電源断用SW」である。
これは、下図のように TurtleBot3 後部などに取り付けてある (機種により取り付け位置が微妙に異なる)
このボタンを2秒程度長押しすると、Raspberry Pi のシャットダウンが始まる。
Raspberry Pi ボード上に緑色の LED があるのでその点滅状況を確認し、点滅が終わったら Raspberry Pi から電源を取り外して良い。
なお、LiDARの回転が止まったことでも Raspberry Pi のシャットダウンが完了したことがわかる。
以上をもとに、TurtleBot3 の電源の切り方をまとめると以下のようになる。
なお、このうち 1. 番と 5. 番は本ページを先に読み進み、後から振り返ったときに初めてわかる内容となっている。
- ノートPC上で、roscore 以外の ROS のプログラムを Ctrl-c で終了する
- TurtleBot3 上の「RasPi電源断用SW」を 2~3 秒間長押しすると、Rapsberry Pi のシャットダウンが始まる。
緑色のLED を観測し、点滅が止まったらシャットダウンは完了している。このとき、測域センサの回転も止まるのでわかりやすい。
- OpenCR上のスイッチを切る
- バッテリーを取り外す
- ノート PC 上で roscore を終了する
TurtleBot3 の制御
さて、ノートPC を介して TurtleBot3 を操作する方法を記す。
その際、適切な電源投入方法があるのでここでの手順に従うこと。
- TurtleBot3 の電源を投入する前にノート PC を起動しログインする。さらに、ターミナルで roscore コマンドを実行する。
roscore
- TurtleBot3 の電源を投入する。Raspberry Pi の起動が終わるまで一分程度待つ。
以上が TurtleBot3 の適切な電源投入方法である。要するに、TurtleBot3 の適切な電源投入前に、ノート PC で roscore コマンドを実行しておく、ということである。
そして、この roscore コマンドは TurtleBot3 が起動している間、常に実行させておく必要がある。
他のコマンドを終了させたとしても、roscore コマンドは TurtleBot3 の電源を切るまで実行しっぱなし、ということである。
あとは、ROS 演習ページの「 (4) TurtleBot3 をプログラムで制御する」
などを参考に、TurtleBot3 の操作を行えば良い。
例えば、TurtleBot3 の電源が入っている状態で、Ubuntu 搭載のノート PC で下記コマンドを実行すれば、TurtleBot3 を手動制御できるのだった。
直進速度と回転速度の 0.5 は自由に変更してよい (直進速度 0.5 はやや速い)。
なお、このとき仮想空間のシミュレータである turtlebot3_world.launch.py を実行する必要はないことに注意。
rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.5 _turn:=0.5
主に使用するキーは以下の通りである。
- i : 前進。一度押すと数秒間動いてから止まる
- j : 左旋回。一度押すと数秒間動いてから止まる
- k : 停止。一度押すとすぐに停止する
- l : 右旋回。一度押すと数秒間動いてから止まる
- < : 後退。一度押すと数秒間動いてから止まる
さらに、速度変更は以下で行えるのだった。速度が大きすぎると、TurtleBot3 は動作しないだろう。
速度 0.26 よりも小さくしないと TurtleBot3 は動き出さないので注意。
また、ターミナルにフォーカスがあっていないとキー操作は受け付けられないことにも注意。
- q : 直進速度と回転速度が 10% アップ
- z : 直進速度と回転速度が 10% ダウン
- w : 直進速度のみ 10% アップ
- x : 直進速度のみ 10% ダウン
- e : 回転速度のみ 10% アップ
- c : 回転速度のみ 10% ダウン
また、「 (4) TurtleBot3 をプログラムで制御する # TurtleBot3 のプログラムによる制御」の move1.py や auto.py を利用することもできる。
なお、皆さんに貸与するノートPCは「 (2) ROS のセットアップ」までしか終えていない状態なので、ros_practiceパッケージが存在しない可能性がある。
ros_practice パッケージの作成は「 (3) Turtlesim で ROS を体験する」で行うのだった。
同様に、「 (5) TurtleBot3 で地図を作成する」、「 (6) TurtleBot3 でナビゲーションを行う」の内容を行うこともできるので試してみるとよい。
なお、この場合も、仮想空間のシミュレータである turtlebot3_world.launch.py を実行する必要はないことに注意。
TurtleBot3 上のカメラの利用
TurtleBot3 が正常動作している状態で、Let's Note 上の ターミナルで以下のコマンドを実行して ROS 用のイメージビューアーを起動しよう。
rqt_image_view
起動したアプリケーションには下図のように、TurtleBot3 上のカメラからの映像が表示される。
(動作が遅くならないよう、解像度はかなり落している)
図中の赤い四角で示したように、これは
「 /raspicam_node/image/compressed 」というトピックを表示しているのである。
同様に、地図作成中などに、 rViz の左側の階層構造で Image の項目にチェックを入れて有効にし (Image がなければ左側のボタンで Add し)、
「 /raspicam_node/image 」の compressed を指定することで rViz 上に映像を表示することもできる。
mediapipe の利用
ここからは、「Ubuntu 20.04 搭載 Let's Note」で mediapipe を利用する方法を記す。
TurtleBot3 とは無関係な話であるので注意すること。
なお、ここで利用されるカメラは、Let's Note ディスプレイ上部にあるカメラである。
mediapipe が Ubuntu にインストールされていない場合、以下の手順でインストールできる。
sudo apt update
sudo apt -y install python3-pip
sudo pip3 install mediapipe=0.10.9
Python 用パッケージのインストールツールである pip の Python3 用をインストールし、
その後、pip (pip3) を用いて mediapipe をインストールするのである。
なお、2024年5月において、バージョンを 0.10.9 などに指定しないと、CUDA 用のファイルが何十 GB もダウンロードされて、
インストール不能な状態になるという問題があった (mediapipe v.0.10.11 の問題のようであった)。
さて、mediapipe を動作させるサンプルプログラムは mediapipe-python-sample ディレクトリに置かれている。
人間の骨格を表示する sample_pose.py を実行するには、
新規に起動したターミナルで以下のコマンドを順に実行すればよい。
cd mediapipe-python-sample
python3 sample_pose.py
これは、皆さんが自分の PC 上の Anaconda で実行するプログラムと同じものである。
こちらは、画面上でキーボードの「ESC」キーをタイプすれば終了する。
なお、プログラム実行時に下記のように「--plot_world_landmark」というコマンドラインオプションをつければ、mediapipe で得られた骨格を三次元推定したものも表示される。
python3 sample_pose.py --plot_world_landmark
こちらも皆さんの PC の Anaconda でも同じことを実現できるが、sample_pose.py の冒頭 (10行目前後) に以下を追記しないとエラーが出るだろう。
from mpl_toolkits.mplot3d import Axes3D
なお、一度入った mediapipe-python-sample ディレクトリからホームディレクトリに戻るには、以下のように cd コマンドを実行すれば良い。
cd
RealSense の利用
ここからは、「Ubuntu 20.04 搭載 Let's Note」に「RealSense」を接続した場合の利用方法を記す。
やはり TurtleBot3 とは無関係な話であるので注意すること。
事前に、RealSense を Let's Note に USB 接続しておく。端子が青い USB 3.0 の端子に接続する必要があるので注意。
RealSense の公式アプリケーションを実行するには、ターミナルを開き、下記のコマンドを実行すれば良い。
(終了するときは、コマンド実行中のターミナルで Ctrl-C である)
realsense-viewer
画面左側の Stereo Module と RGB Camera のチェックを ON にすることで映像が現われる。
また、RealSense で映像を取得し、さらに RGB カメラの映像と mediapipe から得られた骨格を RGB カメラと深度カメラの両方に上書きする Python3 プログラムを作成してある。
realsense-lab-sample ディレクトリに置かれた realsense_mediapipe_pose.py がそのプログラムである。
新規に起動したターミナルで以下のコマンドを順に実行すれば結果を見ることができるだろう。
cd realsense-lab-sample
python3 realsense_mediapipe_pose.py
こちらは、画面上でキーボードの「q」をタイプすれば終了するように設定してある。
なお、プログラム実行時に下記のように「--plot_world_landmark」というコマンドラインオプションをつければ、mediapipe で得られた骨格を三次元推定したものも表示される。
python3 realsense_mediapipe_pose.py --plot_world_landmark
3年生向けページに戻る