最終的にVisual-SLAMで自律飛行することを目指して、ROS1でDJI製のドローンを飛ばします。
全体の流れ
- 概要 ①格安ドローンTello×ORB-SLAM3×ROS-noeticでVisual-SLAM自律飛行する
- とりあえずROSでドローンを飛ばす ②格安ドローンTelloをROS1-noeticで飛ばす ←本記事
- Visual-SLAMとしてORB-SLAM3を導入 ③ubuntu20.04にORB-SLAM3を導入する
- Visual-SLAMでナビゲーション
前提
ROS1 noetic の環境構築が終わっている
ROSパッケージを導入
本家のtello_driverからフォークされたものを使います。
https://github.com/appie-17/tello_driver
僕が今回の記事でやった変更を反映したフォークも公開しています。一応載せておきます。
noeticブランチがそれです。
https://github.com/maHidaka/tello_driver.git
cd ~/catkin_ws/src
git clone --recursive https://github.com/appie-17/tello_driver.git
必要なパッケージを入れます。
sudo apt install ros-noetic-cv-bridge
sudo apt install ros-noetic-image-transport
sudo apt install ros-noetic-camera-info-manager
sudo apt install ros-noetic-codec-image-transport
これに加えてcatkin_ws/srcにcamera_info_manager_pyを入れます。
git clone https://github.com/ros-perception/camera_info_manager_py.git
tello_driverはpython2で書かれていますが、基本的な部分は使い回せます。
tello_driverパッケージ内でpython2と検索してすべてpython3に書き換えましょう。
gamepad_teleop_nodeの90行目のparseメソッドですが、python3ではValueError, eといった書き方はasを使うように変更されています。
以下のように変更すればエラーが消えます。
def parse(self, msg):
err = None
try:
return self.parse_ps3_usb(msg)
except ValueError, e:
err = e
try:
return self.parse_ps3_usb2(msg)
except ValueError, e:
err = e
raise err
↓変更後
def parse(self, msg):
err = None
try:
return self.parse_ps3_usb(msg)
except ValueError as e:
err = e
try:
return self.parse_ps3_usb2(msg)
except ValueError as e:
err = e
raise err
buildしてsourceします。
tello_driverはちゃんと–recursiveつけてクローンしましょう。
起動
telloの電源を入れてしばらく待つとwifiアクセスポイントが見えるようになるのでPCから繋ぎます。
接続したらtello_node.launchを起動
roslaunch tello_driver tello_node.launch
デフォだとimage_compressedが死にますが、そのままでも動きはするはずです。
rvizを立ち上げて/tello/image_raw/h264/image を見るとカメラ映像が見えると思います。
この状態で/tello/takeoffトピックを以下のようにパブリッシュしてやれば離陸します。
rostopic pub /tello/takeoff std_msgs/Empty "{}"
↓着陸
rostopic pub /tello/land std_msgs/Empty "{}"
/tello/cmd_velに値を入れてやれば移動します。
その他にもflipでバク転(?)したり、throw_takeoffトピックでは空中にドローンを投げるとテイクオフしたりするなど、オモシロ機能もあります。
tello_driverパッケージのjoy_teleop.launchをtello_node.launchに加えて起動してやれば、ジョイコンからコントロールができます。
ただし、このノードはPS3のds3コントローラしか対応していない模様なので、お手元のジョイコンに合わせてキーマップを修正する必要があります。
https://github.com/maHidaka/tello_driver.git
僕がフォークしたリポジトリでは雑ですが汎用的なジョイコンのキーマップを追加してあります。
次回はORB-SLAM3の導入です。
- 概要 ①格安ドローンTello×ORB-SLAM3×ROS-noeticでVisual-SLAM自律飛行する
- とりあえずROSでドローンを飛ばす ②格安ドローンTelloをROS1-noeticで飛ばす ←本記事
- Visual-SLAMとしてORB-SLAM3を導入 ③ubuntu20.04にORB-SLAM3を導入する
- Visual-SLAMでナビゲーション
コメント