AbudoriLab.です。
”ROSを触ってみたいけど難しそうだな…”そう思っている人もたくさんいらっしゃるのではないでしょうか?
ROSコミュニティを推進している団体や企業もたくさんの人に触ってもらえるように自律アルゴリズムを揃えていたり、標準ハードウェアとしてTurtleBotを用意しています。
今回はROBOTIS社のTurtleBot3を触っていきます。
購入したらどのように触るか分かりやすく解説しようと思います。
もしTurtleBotを持っていなくても、全体の流れを見ることで、ロボットをどうやって自律移動させているのか、なんとなく流れがわかるようにしていますので、ぜひ最後までご覧ください。
Turtlebot3自律走行に必要な計算機紹介
Turtlebot3はラズパイ4とUbuntuのLaptopPCの2台体制で運用することで動かすことができます。
RaspberryPi4はTurtlebot3を購入すると搭載されており、お手持ちにLaptopPCがあれば新たなPC購入は不要です。
それぞれの計算機は次のタスクを担当します。
ラズパイ - ROS Topicを受け取り車輪を制御
ラズパイ - Lidarやオドメトリなどのセンサ情報をリアルタイムで発信
LaptopPC - センサ情報を使った地図作成やローカリゼーションなどの計算量が多い処理
LaptopPC -コントローラやナビゲーションによるロボットに移動を指示する遠隔操作処理
ラズパイのセットアップ
まずはラズパイ側の環境準備です。
今回はROS1の最終バージョンNoeticで確認したく、それが動作する環境を用意して試走してみました。
Noeticを使うにはUbuntu20.04LTSのOSをラズパイにインストールすることが必要です。
Ubuntu20.04LTSの設定方法解説
1. OSイメージのダウンロード
TurtlebotのeManualのページには、Turtlebotの対応ソフトウェアだけでなく、ラズパイ上で動作するOSごと配布されています。このOSイメージをコピーするだけで、すべてインストール済みの状態のラズパイにセットアップすることができます。Download Raspberry Pi 4B (2GB or 4GB) ROS Noetic imageをダウンロードしてください。
Webページ上部にROSバージョンを選択できるボタンがあるので、Noeticを選択してページを切り替えます。
emanual.robotis.com
2. OSイメージのインストール
ダウンロードしたOSイメージをSDカードにインストールします。
操作方法がわからない方のため、参考になるサイトをご紹介します。
zenn.dev
3. OSのセッティング
【セッティング前に準備するもの】
モニターに写して操作するためにmicroHDMIが必要となります。
【OSの起動】
セッティング方法をご紹介です。
ラズパイにSDカードを挿入して起動してUbuntuにログインしてください。
ユーザ名:ubuntu
パスワード:turtlebot
【日本語キーボード設定】
キーボードがUSキーボードで入力しにくいため、以下を参考に日本語キーボードに設定を変えます。
www.usagi1975.com
【Wifi設定】
初回起動ではネットワークに繋がらないので、以下を参考にWifi設定を行います。
nosubject.io
【ssh設定】
ラズパイで操作する度にモニターを切り替えるのは大変ですので、LaptopPC側でリモートできるように設定します。
sshをコンピュータ名(ホスト名)で入れるようにmDNSを有効化します。
リモートする度に"ssh user_name@192.168.X.X"を入力し続けるのはかなり手間です。
mDNSを使用すると"192.168.X.X"の部分をホスト名で自動的に読み替えてくれて手間を省いてくれます。
Ubuntu18以降であれば、特別な設定は必要でなく以下の手順でavahi-daemon(daemonはバックグラウンド処理という意味)を有効化するだけで動作します。
zenn.dev
【Lidarドライバ更新】
もし、TurtleBot3を最近買った人はLIDARが新しくなっています。
セットアップ済みのOSにはドライバが入っていないので、eManualのNEW LDS-02 Configurationの設定をやっておきましょう。
LaptopPCのセットアップ
eManualの指示に従って、コマンドを入力して必要なパッケージをインストールします。
使用するROSそのものや、依存するROSパッケージ、TurtleBotのドライバ類をaptでインストールしてください。
emanual.robotis.com
ROSでの相互通信設定
リモート操作するLaptopPCと操作を受けるラズパイそれぞれのROSを一つのROSとして相互通信できるように設定します。 ROS1では"roscore"と入力するとROS_MASTERが起動します。 ROS_MASTERがnode間でどんなデータをやり取りするかを把握します。 必要な時にデータの受け渡し取り繋ぎ、各nodeが別々に活動できるようになっています。 複数台のPCで一つのROSシステムを構築するには、同じLAN内でどのコンピュータがMASTERであるのかを設定することが必要です。 今回は処理能力の高いLaptopPCを主、ラズパイを従として登録します。
【設定方法】
- LaptopPCでの設定
基本的にはターミナルで操作します。
- $ ifconfig
LaptopPCのローカルPCを確認します。
無線であれば"wlan0”など、有線であれば"eth0"などと記載されます。ラズパイと接続されているLANを選択します。LaptopPCとルータとラズパイを有線Ethernetケーブルで接続するケースはまずないですから、この場合はwlan0を確認します(ロボット体内で複数コンピュータを接続して分散処理する場合は有線接続する場合もあります)。
- $ vi ~/.bashrc
次の値を確認して下さい。
・ ROS_MASTER_URI
- ROS_MASTER_URI
設定値がlocalhost"(自分自身という意味)か"127.0.0.1"(localhostと同じ意味)であればLaptopPC側がMASTERであることを示します。
- ラズパイでの設定
LaptopPCからラズパイにリモートアクセスします。 $ ssh user_name@IP_ADDRESS
ここでは、PC名がubuntu、ユーザ名もubuntu ですから、$ssh ubuntu@ubuntu.localと入力します。$ vi ~/.bashrc ラズパイの~/.bashrcを確認してROS_MASTER_URIを次のように設定してください。
・ ROS_MASTER_URI=http://{192.168.XX.XX}:11311
xx.xxにはLaptopPCのIPが入ります。
この設定によって"MASTERはLaptopPCで、ラズパイからLaptopPCにデータを送信する”ことになり、LaptopPCが主、ラズパイが従の関係で一つのROSシステムとして動作します。
OpenCRのセットアップ
OpenCRとはTurtlebotに付属しているモータドライバ基板になります。
ROBOTIS社が開発するサーボモータ(DINAMIXELシリーズ)を制御する基板でありRurtleBotの足回りはサーボモータになります。
下記の手順でもろもろのソフトウェアをイントールします。
詳細な解説はE-Manualを確認してください。
・ソフトウェアパッケージをインストール
・パスを定義
・最初に入っている古いアップデートファイルを削除して最新版をwgetでDL
・アップデート
emanual.robotis.com
ファームのアップデートが完了したら、動作テストを実施してください。
成功ならTurtleBotが30cm進むことが確認できます。
基本パッケージの実行
LaptopPCからラズパイにsshでリモート接続します。
TurtleBotの種類はburger, waffle, waffle_piといくつか存在します。
どちらのロボットを使用するかを指定の設定を行います。
$ export TURTLEBOT3_MODEL=${burger}を定義
起動の度にコマンドに手打ちするのは手間なので、.bashrcに記入しましょう。$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
基本パッケージを起動します。Read more about launching RVizに準拠してRVizを起動
LaptopPC側でRvizを起動してロボットをGUI上で可視化します。
3.1. $ export TURTLEBOT3_MODEL=${burger}
exportでモデルの指定を忘れずに設定します。
手間を無くすためにもLaptopPC側の.bashrcにも記入しておくのもオススメです。
3.2. $ roslaunch turtlebot3_bringup turtlebot3_remote.launch
LaptopPCのリモート側で起動するlaunchになります。
【エラー対応】
URDFのモデル(ロボットのCADファイルと各センサや車輪などの位置関係を説明したモデルのファイル)が見つからないと注意される場合があります。ラズパイにインストール済みのturtlebot3関連のROSパッケージのディレクトリに含まれているデータを参照しています。今回はaptでインストールしてしまったため見つかりませんでした。ラズパイ側にあったturtlebot基本ノードをLaptopPC側もDLしcatkin_makeすることで解決できます。
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws
$ catkin_make
下記のサイトが参考になります。
$ rosrun rviz rviz -d
rospack find turtlebot3_description
/rviz/burger.rviz
turtlebot3の可視化設定ファイルが適用されたRvizを開きます。 先ほどの手順でcatkin_make/src内にturtlebot3、turtlebot3_msgs、turtlebot3_simulationsをクローンしましたが、この中にRvizの説明ファイルがあります。
eManualのコピペだけでなく適宜読み替えて実行してください。
画像のように、ロボットのモデルとセンサデータの可視化ができていれば成功です!
ロボットを走らせる 最後に、/cmd_velがpublishされていれば走ります。
PS4コントローラからteleop_twist_joy nodeを使って/cmd_velを出力します。
以下のサイトがとても参考になります。
qiita.com
PS4コントローラを使って走行させました。ここまでできれば、自律走行の準備が完了です。
コントローラー操作は/cmd_vel を投げるだけ。PS4コントローラーで操作中。 pic.twitter.com/oPVZ9Be6L5
— あぶどり@AbudoriLab. (@abudori_imgproc) 2023年1月16日
次回、ROS標準で用意されているSLAMパッケージ(gmapping)を実行して、自律走行するための地図作成をします。作成した地図からnavigationパッケージを使い、Rvizの地図上の任意の場所にゴールを設定しロボットが自律走行するところまで解説します。お楽しみに!