ROS 2 ガイド
インストール
Mini PupperのROS2インストールパッケージは、私たちのコントリビューターの一人である@Tiryohによって書かれた ros2_setup_scripts に基づいています。
Mini PupperのROS2バージョンは Champ オープンソースプロジェクトをベースにしており、SLAMとナビゲーション機能にいくつかの変更を加えました。
lidarセンサーをサポートするMini Pupperのソフトウェアは ldlidar_stl_ros2 オープンソースプロジェクトに基づいています。
PCとMini Pupperが同じWi-Fiに接続されていることを確認してください。
以下のステップで、リモートPCとMini PupperのROS 2をセットアップすることができます。
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 イメージの書き込み
The steps below are for you to setup ROS2 environment of Mini Pupper by yourself. You can also download the pre-built ROS image for Mini Pupper side, named "YYYYMMDD_*_ROS2*.img". Please select the appropriate image according to the date and the robot model.
イメージはアダプターを使用してカードに書き込みすることができます。PCにmicroSDスロットがない場合は、microSDカードリーダを使用してイメージを書き込んでください。
公式サイトからubuntu-22.04.2-preinstalled-server-arm64+raspi.img.xzをダウンロードし、以下のガイドに従ってSDカードに書き込みします。
https://etcher.balena.io/ から、balenaEtcherをダウンロードしてください。
青いボタンを押して、画像のダウンロード先を選択し、画像を選択します。

青いボタンを押して、イメージを書き込みする先(SDカードの場所)を選択します。


"Flash!"(書き込み)ボタンを押すと、下の画像が表示されます。プロセスが完了するまで待ちます。


2.2 Wi-Fi設定
SDカードをミニぷぱのカードポートに差し込み、Wi-Fi接続のための設定をします。

以下のコマンドを実行して、ミニぷぱのネットワーク設定を編集します。
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でターミナルを開きます。
次のコマンドを使用して、nav2_map_serverパッケージのmap_saver_cliノードを起動し、地図のファイルを作成します。
地図のファイルは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でターミナルを開きます。
次のコマンドを使用して、nav2_map_serverパッケージのmap_saver_cliノードを起動し、地図のファイルを作成します。
地図のファイルは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