🛸

ドローンシミュレーション環境の構築 (PX4, ROS2, gazebo)

2023/12/01に公開

Intro

ドローンをシミュレーションする方法は多数ありますが、本記事では最終的に実機でシミュレーションと同じコードを使って自律飛行ドローンを作ることを目的とした構成をとっています。

  • PX4: オープンソースのフライトコントローラ、pixhawkなどのハードウェアを使って簡単に使える
  • ROS2: オープンソースのロボット用フレームワーク、ROSでもOK
  • gazebo: オープンソースの3Dシミュレーター、軽めなのでラップトップで使える

pixhawkとubuntuのオンボードコンピュータを使えば理論上は実機ドローンに簡単に移植できるはずです。

Setup

Installation

まずはubuntu22.04を入れます。
https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview

次にPX4, ROS2, gazeboを入れます。
https://docs.px4.io/main/en/ros/ros2_comm.html

ここまで来たらすでにROS2とPX4を使ってgazebo上のドローンをサンプルスクリプトで動かせるはずです。

Development

camera data stream

カメラ画像のデータをgazeboのトピックからROS2に持ってくるには一手間必要です。

ros-humble-ros-gzgardenをインストールして、

sudo apt install ros-humble-ros-gzgarden

ros_gz_imageもしくはros_gz_bridgeでブリッジしてあげる必要があります。

ros2 run ros_gz_image image_bridge /camera
ros2 run ros_gz_bridge parameter_bridge /camera@sensor_msgs/msg/Image@ignition.msgs.Image

ros_gz_bridgeはimageだけでなく他のトピック(depthなど)にも使えるのでこちらの方が汎用性がありそうです。

ros2 run ros_gz_bridge parameter_bridge /camera@sensor_msgs/msg/Image@ignition.msgs.Image 
/camera_info@sensor_msgs/msg/CameraInfo@ignition.msgs.CameraInfo /depth_camera/points@sensor_msgs/msg/PointCloud2@gz.msgs.PointCloudPacked /depth_camera@sensor_msgs/msg/Image@ignition.msgs.Image

https://github.com/gazebosim/ros_gz/tree/ros2/ros_gz_bridge

keyboard control

PX4のサンプルコードはウェイポイント形式だったのでキーボードでの操作をするにはドローンの速度などをコントロールする様なコードが必要です。

ここに載っているコードを使うと簡単にキーボードが使える様になります。
ただこのコードではmavsdkを使っているので、px4_ros_comのサンプルコードとは異なる点に注意です。

https://github.com/monemati/PX4-ROS2-Gazebo-YOLOv8/blob/main/keyboard-mavsdk-test.py

Trouble Shooting

自分が使っている中でこのデバッグに時間取られたので一応のせておきます。

PX4をスタートさせようとするとこんなエラーが出て

ERROR [gz_bridge] timed out waiting for clock message
ERROR [gz_bridge] Task start failed (-1)
ERROR [init] gz_bridge failed to start
ERROR [px4] Startup script returned with return value: 256

このコマンドで治りました

pkill -9 ruby
unset GZ_IP
unset GZ_PARTITION

参考:
https://discuss.px4.io/t/px4-sitl-stopped-working-with-gazebo-garden/34513

PX4のユーザーフォーラムは活発なのでデバッグで詰まったら相談するのがおすすめです。

(副代表 廣津)

Discussion