1. はじめに
前回の記事[1]でROS2 Humble環境でのロボットHuskyの自律走行の実装は断念し、代わりにDocker上でROS Noetic環境を構築し、自律走行機能を実装することにしました。この取り組みについて、紹介するのがこの記事の内容です。
2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
- Nvidia Driver: 535
3. 遠隔操作による走行についての構築手順
3.1. Docker のセットアップ
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
ここで変更を反映するため、PCから一度ログアウト&再ログインしました
3.2 noVNC 対応の ROS 1 Docker イメージを取得
ここでdocker上でのROS1(ROS Noetic)の設定に入るのですが、以下の記事で簡単にROS1をセットアップできるものがありましたので、このリポジトリを使わせていただきました。本当に一瞬でDocker上のGUIのROS1を設定できたので、非常に助かりました。
実行したコマンドは以下です。
sudo docker run -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:noetic
ダウンロードが完了したら、ブラウザで http://127.0.0.1:6080/ にアクセスします。
3.3 Docker内でのHusky のシミュレーション環境の構築
ブラウザで http://127.0.0.1:6080/ にアクセスしましたら、その中でターミナルを開き、以下のコマンドでHusky のシミュレーション環境の構築をしていきます。
sudo apt update
sudo apt install -y gazebo11 ros-noetic-gazebo-ros
sudo apt install -y ros-noetic-husky-simulator ros-noetic-husky-desktop ros-noetic-husky-navigation
3.4 Docker内でのHuskyシミュレーションの起動
以下のコマンドで、シミュレーション環境を立ち上げます。
source /opt/ros/noetic/setup.bash
roslaunch husky_gazebo husky_playpen.launch
以下のようにGazebo 上に Husky が表示されます。
3.5 Husky の遠隔操作(手動運転)
次にHuskyを遠隔操作で走行させるため、以下のコマンドでteleopを立ち上げます。
source /opt/ros/noetic/setup.bash
rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/husky_velocity_controller/cmd_vel
そしてキーボードによる遠隔操作で走行させた様子が以下の動画になります。
4. 自律走行についての構築手順
4.1 Lidar を有効化
まずLidarを以下のコマンドで有効化して、シミュレーション空間を起動します。
source /opt/ros/noetic/setup.bash
export HUSKY_LMS1XX_ENABLED=1
roslaunch husky_gazebo husky_playpen.launch
4.2 rviz を起動
次に以下のコマンドでrivzを起動します。
source /opt/ros/noetic/setup.bash
roslaunch husky_viz view_robot.launch
4.3 ナビゲーションを起動
次に以下のコマンドで、自律走行用のプログラムを起動します
source /opt/ros/noetic/setup.bash
roslaunch husky_navigation amcl_demo.launch
そうしますと以下の画面のようにrvizの画面に地図が読み込まれます(左がgazebo、右がrivzの画面です。)。
そして2D Nav Goalで目的地を指定すると Husky が自律移動を始めます。
以下がその時の動画です。
5. まとめ
公開されているリポジトリを活用し、Docker上にROS Noetic環境を構築することで、Huskyの自律走行をシミュレーションできました。
次回以降は、この環境のHuskyにマニピュレーターを搭載し、自律走行と並行してマニピュレーターを動作させることに取り組んでいきたいと思います。