②格安ドローンTelloをROS1-noeticで飛ばす

最終的にVisual-SLAMで自律飛行することを目指して、ROS1でDJI製のドローンを飛ばします。


全体の流れ

  1. 概要 ①格安ドローンTello×ORB-SLAM3×ROS-noeticでVisual-SLAM自律飛行する
  2. とりあえずROSでドローンを飛ばす ②格安ドローンTelloをROS1-noeticで飛ばす ←本記事
  3. Visual-SLAMとしてORB-SLAM3を導入 ③ubuntu20.04にORB-SLAM3を導入する
  4. Visual-SLAMでナビゲーション

前提

ROS1 noetic の環境構築が終わっている

ROSパッケージを導入

本家のtello_driverからフォークされたものを使います。

ROS-wiki

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の導入です。

  1. 概要 ①格安ドローンTello×ORB-SLAM3×ROS-noeticでVisual-SLAM自律飛行する
  2. とりあえずROSでドローンを飛ばす ②格安ドローンTelloをROS1-noeticで飛ばす ←本記事
  3. Visual-SLAMとしてORB-SLAM3を導入 ③ubuntu20.04にORB-SLAM3を導入する
  4. Visual-SLAMでナビゲーション

handaru

handaru.net

handaru(はんだる)です。 工作が趣味です。

コメント

コメントを残す

メールアドレスが公開されることはありません。