ROS2ガイド
インストール
Mini PupperのROS2インストールパッケージは、私たちのコントリビューターの一人である@Tiryohによって書かれた ros2_setup_scripts に基づいています。
Mini PupperのROS2バージョンは Champ オープンソースプロジェクトをベースにしており、SLAMとナビゲーション機能にいくつかの変更を加えました。
lidarセンサーをサポートするMini Pupperのソフトウェアは ldlidar_stl_ros2 オープンソースプロジェクトに基づいています。
PCとMini Pupperが同じWiFiに接続されていることを確認してください。
以下のステップで、リモートPCとMini Pupperのros2をセットアップすることができます。
1. PCセットアップ
PCセットアップはMini PupperをリモートコントロールするためのPC(デスクトップまたはラップトップPC)に対応しています。これらのコマンドをMini Pupperに適用しないでください。
警告:本章の内容は、ミニぷぱを制御するリモートPC(デスクトップまたはラップトップPC)に対応しています。これらのコマンドをミニぷぱ上のRaspberry Piやミニぷぱ2上のCompute Module 4に適用しないでください。
注:この説明はLinuxのUbuntu 22.04とROS2 Humbleでテストしました。
ROS2 Humbleのインストール
リモートPCからCtrl+Alt+Tでターミナルを開く。
cd ~
sudo apt update
git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git
~/ros2_setup_scripts_ubuntu/ros2-humble-ros-base-main.sh
source /opt/ros/humble/setup.bash
ROS 2のインストール後、ワークスペースでミニぷぱ ROSパッケージをダウンロードします。
1.2 ミニぷぱ ROSレポジトリのインストール
リモートPCからCtrl+Alt+Tでターミナルを開く。
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/mangdangroboticsclub/mini_pupper_ros.git -b ros2-dev mini_pupper_ros
vcs import < mini_pupper_ros/.minipupper.repos --recursive
1.3 依存する ROS 2 パッケージのインストールとパッケージのビルド
リモートPCからCtrl+Alt+Tでターミナルを開く。
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
sudo apt install ros-humble-teleop-twist-keyboard
sudo apt install ros-humble-teleop-twist-joy
colcon build --symlink-install
1.4 ロボットモデルのエクスポート
ターミナルで~/.bashrcをテキストエディタで開く。
nano ~/.bashrc
ファイルの最後までスクロールする
以下の行を追加して、ロボットモデルをコンピュータにエクスポートしてください。ROBOT_MODELパラメータには、あなたのロボットモデルに合わせて、mini_pupper, mini_pupper_2の中から適切なキーワードを使用してください。
export ROBOT_MODEL=mini_pupper_2
Ctrl+Sでファイルを保存し、Ctrl+Xで終了する。
以下のコマンドを実行して変更を適用する。
source ~/.bashrc
2. ミニぷぱのセットアップ
2.1 イメージの書き込み
以下の手順はミニぷぱのROS2環境をご自身でセットアップするためのものです。また、ミニぷぱ側で `ビルド済みのROSイメージ<https://drive.google.com/drive/folders/1ZF4vulHbXvVF4RPWWGxEe7rxcJ9LyeEu?usp=sharing>`_("YYYYMMDD_MD-Puppy2_ROS2Humble_Ubuntu22.04.img " または "YYYYMMDD_MD-Puppy1_ROS2Humble_Ubuntu22.04.img")をダウンロードすることもできます。日付とロボットの機種に応じて適切なイメージを選択してください。
イメージはアダプターを使用してカードに書き込みすることができます。PCにmicroSDスロットがない場合は、microSDカードリーダーを使用してイメージを書き込んでください。
公式サイトからubuntu-22.04.2-preinstalled-server-arm64+raspi.img.xzをダウンロードし、以下のガイドに従ってSDカードに書き込みする。
https://etcher.balena.io/ から、balenaEtcherをダウンロードしてください。
青いボタンを押して、画像のダウンロード先を選択し、画像を選択します。
青いボタンを押して、イメージを書き込みする先(SDカードの場所)を選択します。
"Flash!"(書き込み)ボタンを押すと、下の画像が表示されます。プロセスが完了するまで待ちます。
2.2 WiFi-Setting
Plug the card into the Mini Pupper card port and setup your own WiFi.
以下のコマンドを実行して、ミニぷぱのネットワーク設定を編集します。
sudo nano /etc/netplan/50-cloud-init.yaml
エディタが開いたら、Mangdangとmangdangを実際のWi-FiのSSIDとパスワードに置き換えながら、以下のように内容を編集してください。
Ctrl+Sでファイルを保存し、Ctrl+Xで終了する。
以下のコマンドを実行して再起動し、Wi-Fiに接続します。
sudo netplan apply
sudo apt update
sudo apt upgrade
reboot
2.3 ロボットモデルの設定
再起動後、ターミナルで~/.bashrcをテキストエディタで開く。
nano ~/.bashrc
ファイルの最後までスクロールする
以下の行を追加して、ロボットモデルをコンピュータにエクスポートしてください。ROBOT_MODELパラメータには、あなたのロボットモデルに合わせて、mini_pupper, mini_pupper_2の中から適切なキーワードを使用してください。
export ROBOT_MODEL=mini_pupper_2
Ctrl+Sでファイルを保存し、Ctrl+Xで終了する。
以下のコマンドを実行して変更を適用する。
source ~/.bashrc
3. ミニぷぱとPCの接続
Ctrl+Alt+T でターミナルを開き、ミニぷぱ に接続します。
ミニぷぱの画面を見て、IPアドレスを取得する。
ターミナルを使用し、以下のコマンドを実行してミニぷぱに接続してください。デフォルトのパスワードは "mangdang "です。
ssh ubuntu@{IP_ADDRESS_OF_MINI_PUPPER}
両方のターミナルで~/.bashrcをテキストエディタで開く。
nano ~/.bashrc
両端末のファイルを最後までスクロールする。
両端末に以下の行を追加して接続を設定する。入力される数字はどのようなものでも構いませんが、両端末で同じでなければなりません。
export ROS_DOMAIN_ID=42
Ctrl+Sでファイルを保存し、Ctrl+Xで終了する。
以下のコマンドを実行して変更を適用する。
source ~/.bashrc
両方のターミナルで以下のコマンドを使用し、PCとミニぷぱが接続されていることを確認します:
ros2 node list
両ターミナルの出力を比較する:
両端末の出力が画像と同じようなノードリストを表示していれば、PCとミニぷぱは接続されています。
注意:ノードのリストは起動中のノードに依存するため、画像とは多少異なる場合もあります。
クイックスタート
1. ジョイスティック設定
以下の手順で、ROS2ソフトウェアにジョイスティックに接続設定できます。
コントローラの HOME ボタンを押す。
PC上で利用可能なBluetoothデバイスを検索し接続
次の動画は、接続中のフラッシュライトの色の変化
以下のコマンドでジョイスティックの名前を確認
ターミナルの出力:この場合、ジョイスティックの名前は "js0 "です。
以下のコマンドで、ジョイスティックが接続されているかどうかを確認します
sudo apt install joystick
jstest /dev/input/{NAME_OF_JOYSTICK}
ジョイスティックが接続されている場合は、次のような出力になります
2. 起動
以下の手順でソフトウェアを実行し、ミニぷぱハードウェアを起動します。
Ctrl+Alt+T でターミナルを開き、ミニぷぱ に接続します。
ミニぷぱの画面を見て、IPアドレスを取得する。
いずれかのターミナルを使用し、以下のコマンドを実行してミニぷぱに接続します。デフォルトのパスワードは "mangdang"です。
ssh ubuntu@{IP_ADDRESS_OF_MINI_PUPPER}
ミニぷぱアプリケーションを起動するための基本パッケージを呼び出します。ビルドされたパッケージをsource するコマンド、「. ~/ros2_ws/install/setup.bash」は、「./ros2_ws/install/setup.zsh」に置き換えることができます。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_bringup bringup.launch.py
ロボットモデルがミニぷぱ2の場合、ターミナル出力は以下のようになります。
トピックやサービスは、以下のコマンドで一覧できます。
トピック一覧
ros2 topic list
サービス一覧
ros2 service list
3.遠隔操作
以下の手順で、キーボードまたはジョイスティックを使ってミニぷぱを遠隔操作することができます。
警告:遠隔操作の前に、必ずミニぷぱからブリングアップを実行してください。ロボットを遠隔操作し、ロボットをテーブル上でテストする際は、ロボットが落下する可能性があるため注意してください。
3.1 キーボード
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
ターミナル出力:
以下のガイドに従って、キーボードを使ってミニぷぱを操作することができます。
各キーボードボタンとロボットの動きの動画
3.2 ジョイスティック
注意: ROS2のジョイスティックノードのボタンのデザインは、他のセクションで述べられているROS以外のプログラムで使用されるものとは異なります。
警告:遠隔操作の前に、必ずミニぷぱからブリングアップを実行してください。ロボットを遠隔操作し、ロボットをテーブル上でテストする際は、ロボットが落下する可能性があるため注意してください。
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 launch teleop_twist_joy teleop-launch.py joy_dev:=/dev/input/{NAME_OF_JOYSTICK}
ターミナル出力:
警告:遠隔操作の前に、必ずミニぷぱからブリングアップを実行してください。ロボットを遠隔操作し、ロボットをテーブル上でテストする際は、ロボットが落下する可能性があるため注意してください。
以下のコマンドを使用して、遠隔操作ノードを実行する。
SLAM
SLAM(Simultaneous Localization and Mapping:地図と位置の同時推定)とは、任意の空間内の現在位置を推定して地図を描く技術です。以下の手順で、ミニぷぱを使って周辺地図を描画します。
注意:リモートPC上でSLAMノードを実行してください。****操作を実行する前に、必ずミニぷぱから起動してください。
1. SLAMノードを実行する
起動されていない場合はまずミニぷぱから起動してください。
Ctrl+Alt+T でターミナルを開き、ミニぷぱ に接続します。
ミニぷぱの画面を見て、IPアドレスを取得する。
いずれかのターミナルを使用し、以下のコマンドを実行してミニぷぱに接続します。デフォルトのパスワードは "mangdang"です。
ssh ubuntu@{IP_ADDRESS_OF_MINI_PUPPER}
ミニぷぱの基本パッケージを立ち上げて起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_bringup bringup.launch.py
リモートPCからCtrl + Alt + Tで新しいターミナルを開き、SLAMノードを起動する。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_slam slam.launch.py
2. 遠隔操作
以下の手順で、遠隔操作を使って地図上の未知のエリアを探索することができる。
注意:SLAMノードが正常に起動して動作している状態で、直線速度や角速度を大きく変化させると、生成されるマップの滑らかさが低下する可能性があります。****警告:遠隔操作の前に、必ずミニぷぱから起動してください。また、遠隔操作中にロボットが落下する恐れがあるため、テーブル上でロボットをテストする際は十分に注意してください。
2.1 キーボード
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
2.2 ジョイスティック
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 launch teleop_twist_joy teleop-launch.py joy_dev:=/dev/input/{NAME_OF_JOYSTICK}
遠隔操作の後、以下のように未知の領域が明らかになった地図が表示される:
地図を保存する
下の手順で、地図のファイルが保存されます。
リモートPCでCtrl+Alt+Tでターミナルを開く。
Use the following command to launch the map_saver_cli node in the nav2_map_server package to create map files.
次のコマンドを使用して、nav2_map_serverパッケージのmap_saver_cliノードを起動し、マップファイルを作成します。
. ~/ros2_ws/install/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/map
上記のコマンドを実行すると、map.pgmとmap.yamlという2つのファイルが生成される。
以下の写真は保存された.pgmファイルです。
シミュレーション
以下のステップでは、RVizとGazeboを使用して、ミニぷぱの遠隔操作、SLAM、ナビゲーションのシミュレーションを行います。
注意:リモートPCでシミュレーションを実行してください。
1. RVizシミュレーション
1.1 シミュレーション環境の起動
以下のコマンドを実行し、ロボットに接続せずにロボットシミュレーションを起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_bringup bringup.launch.py hardware_connected:=False
以下のコマンドを実行してRVizシミュレーションを起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_bringup rviz.launch.py
1.2. 遠隔操作
1.2.1 キーボード
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
1.2.2 ジョイスティック
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 launch teleop_twist_joy teleop-launch.py joy_dev:=/dev/input/{NAME_OF_JOYSTICK}
次のビデオはRVizでの遠隔操作シミュレーションのデモです。
2. Gazebo シミュレーション
2.1 シミュレーション環境起動
以下のコマンドを実行して、Gazeboシミュレーションを起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_gazebo gazebo.launch.py
2.2. 遠隔操作
2.2.1 キーボード
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
2.2.2 ジョイスティック
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 launch teleop_twist_joy teleop-launch.py joy_dev:=/dev/input/{NAME_OF_JOYSTICK}
次のビデオは、Gazeboの下での遠隔操作シミュレーションのデモです。
3. GazeboでSLAM(マッピング)テスト
3.1 シミュレーション環境の起動
以下のコマンドを実行して、Gazeboシミュレーションを起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_gazebo gazebo.launch.py
3.2 SLAMノードの実行
リモートPCからCtrl + Alt + Tで新しいターミナルを開き、SLAMノードを起動する。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_slam slam.launch.py use_sim_time:=true
3.3 遠隔操作
3.3.1 キーボード
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
3.3.2 ジョイスティック
リモートPCでCtrl+Alt+Tでターミナルを開く。
以下のコマンドを使用して、遠隔操作ノードを実行する。
. ~/ros2_ws/install/setup.bash
ros2 launch teleop_twist_joy teleop-launch.py joy_dev:=/dev/input/{NAME_OF_JOYSTICK}
次のビデオでは、RVizでのSLAMのシミュレーションを示しています。
3.4 地図を保存する
リモートPCでCtrl+Alt+Tでターミナルを開く。
Use the following command to launch the map_saver_cli node in the nav2_map_server package to create map files.
次のコマンドを使用して、nav2_map_serverパッケージのmap_saver_cliノードを起動し、マップファイルを作成します。
. ~/ros2_ws/install/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/map
以下の写真は保存された.pgmファイルです。
ダンス
ミニぷぱのダンス機能実演ビデオ
注:音楽とダンスを再生するノードは、ミニぷぱとリモートPCの両方で実行できます。
1.音楽パッケージのインストール
Ctrl+Alt+T でターミナルを開き、ミニぷぱ に接続します。
ミニぷぱの画面を見て、IPアドレスを取得する。
いずれかのターミナルを使用し、以下のコマンドを実行してミニぷぱに接続します。デフォルトのパスワードは "mangdang"です。
ssh ubuntu@{IP_ADDRESS_OF_MINI_PUPPER}
ミニぷぱが音楽の再生に必要なパッケージをインストールするには、以下のコマンドを使用します。
sudo apt-get install ffmpeg portaudio19-dev -y
pip install pydub pyaudio
起動
起動されていない場合はまずミニぷぱから起動してください。
Ctrl+Alt+T でターミナルを開き、ミニぷぱ に接続します。
ミニぷぱの画面を見て、IPアドレスを取得する。
いずれかのターミナルを使用し、以下のコマンドを実行してミニぷぱに接続します。デフォルトのパスワードは "mangdang"です。
ssh ubuntu@{IP_ADDRESS_OF_MINI_PUPPER}
ミニぷぱの基本パッケージを立ち上げて起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_bringup bringup.launch.py
3.ミュージック・ノードを立ち上げる
Ctrl + Alt + Tで新しいターミナルを開き、Musicノードを起動します。
. ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_music music.launch.py
4. ダンスノードを立ち上げる
Ctrl + Alt + Tで新しいターミナルを開き、Danceノードを起動する。
source ~/ros2_ws/install/setup.bash
ros2 launch mini_pupper_dance dance.launch.py