🐝

Thonnyを使ってCoDrone EDUを制御する(準備編)

2024/08/19に公開

はじめに

この記事ではRobolink社の教育用プログラミングドローンCoDrone EDUThonnyを使ってPythonプログラムで制御する方法について解説します。
Thonnyはすでにインストールされているものとして解説をしますので、インストール方法については他の記事を参照してください。

CoDrone EDUとは

CoDrone EDUはドローン本体とコントローラがセットになって販売されています。
コントローラにはジョイスティックやボタン、スクリーンなどが装備されていて、コントローラだけでもジョイスティックやボタンでドローンを制御できます。
この記事では、コントローラをUSBケーブルでパソコンと接続し、パソコン上でThonnyを使ってドローンを制御します。

ドローンとコントローラは2.4GHz帯の電波を使って通信を行います。
パソコンからのコマンドはコントローラを経由して2.4GHz帯の電波でドローンに送られ、ドローンに搭載されたセンサ類のデータも2.4GHz帯の電波を使ってコントローラに送られ、USBケーブルを経由してパソコンに送られます。
コントローラの空中線電力は技適資料によると3mW、ドローンの空中線電力は1mWとなっています。
この電波の強さだと、伝搬距離は数十メートルと思われます。
使用されているCPUは技適資料によると、ドローン、コントローラともARMのSTM32F401となっています。

Thonnyへライブラリのインストール

インタープリタの切り替え

  1. Thonnyのメニューバーにある「ツール」にある「オプション」をクリックします。
  2. Thonnyオプションのウインドウが開くので、「インタープリタ*」タブをクリックし、一番上にあるインタープリタの種類を「ローカルPython3」にします。
  3. 右下の「OK」ボタンをクリックします。
    これでパソコン上(Thonny内)のPythonでプログラムが実行されるようになります。
    ESP32などを使用して開発をする場合、インタープリタを元に戻すことを忘れないで下さい。

ライブラリのインストール

続いて、ライブラリのインストールを行います。

  1. Thonnyのメニューバーにある「ツール」にある「パッケージを管理...」をクリックします。

  2. 下図のような画面が表示されるので、① 検索欄に「codrone-edu」と入力し、② 「PyPlを検索」ボタンをクリックします。
    PyPl検索

  3. codrone-edu」が表示されるので、① バージョンを確認して、② 「インストール」ボタンをクリックします。インストールが完了すると、③ 「閉じる」ボタンをクリックします。
    インストール

  4. Thonnyのシェル部の >>> プロンプトで下図のように import codrone_edu と入力してエラーが出なければライブラリのインストールは完了です。
    インストール

codrone_edu.pyは~/Documents/Thonny_Local/lib/python3.10/site-packages/

ドローン、コントローラの接続

  1. コントローラをUSBケーブルでパソコンと接続します。コントローラに電池を入れている場合は取り外しておいてください。
  2. コントローラのスクリーンにLINKと表示され、スクリーンの両サイドにある赤いLEDが点滅します。
  3. ドローンにバッテリーを挿入します。裏表を間違えないようにしてください。
  4. ドローンのLEDが白色に点灯し、しばらくすると音がなってLEDが消灯します。コントローラのLEDも消灯します。
    これでドローンとコントローラのリンクが完了です。

サンプルコード(1)

このサンプルコードはドローンからドレミの音をだします。
Thonnyのエディタ部に次のプログラムを入力して実行するとドローンからドレミという音が聞こえます。
(場合によっては、一部の音が欠けることがあります。)

03.Drone_buzzer.py
# 03.Drone_buzzer.py

# import codrone_edu library
from codrone_edu.drone import *
from time import sleep

# make drone instance
drone = Drone()

def play_sound_drone(tone, duration):
    print(tone)
    while drone.drone_buzzer(tone, duration) != None:
        continue
    sleep(0.01)
    
    
print("Program Started.")

# Pairing with controller
# it returns device name and battery status
drone.pair()

play_sound_drone(523, 100)
play_sound_drone(587, 100)
play_sound_drone(659, 100)

実行結果

プログラムの実行は、codrone_eduライブラリでたくさんのモジュールをインポートしているので、実行ボタンを押して実際に動くまで3秒ぐらいかかる場合があります。

以下はMacでの実行結果です。Windowsパソコンで実行した場合はコントローラのデバイス名が異なります。

Program Started.
Found CoDrone EDU controller.  /dev/cu.usbmodemxxxxxxxxxxxxx
Connecting to CoDrone EDU controller.
Connected to CoDrone EDU
Battery = 100 %

サンプルコード(2)

このサンプルコードはコントローラからドレミの音をだします。
Thonnyのエディタ部に次のプログラムを入力して実行するとコントローラからドレミという音が聞こえます。

02.Controller_buzzer.py
# 02.Controller_buzzer.py

# import codrone_edu library
from codrone_edu.drone import *

# make drone instance
drone = Drone()

print("Program Started.")

# Pairing with controller
drone.pair()

drone.controller_buzzer(523,100)
drone.controller_buzzer(587,100)
drone.controller_buzzer(659,100)


# close connection
#drone.close()

サンプルコード(お遊び)

次のサンプルコードを実行するとファミマのジングルがコントローラから出ます。

02-2.Controller_buzzer(FamilyMart).py
# 02-2.Controller_buzzer(FamilyMart).py

# import codrone_edu library
from codrone_edu.drone import *
from time import sleep

# FamilyMart Entering Jingle. 0 is a rest.
NOTE = [740, 587, 440, 587, 659, 880, 0, 329, 659, 740, 659, 440, 587]

# make drone instance
drone = Drone()


def play_sound_controller(tone, duration):
    print(tone)
    while drone.controller_buzzer(tone, duration) != None:
        continue
    sleep(0.01)

# This doesn't work well, why?
def play_sound_drone(tone, duration):
    print(tone)
    while drone.drone_buzzer(tone, duration) != None:
        continue
    sleep(0.01)
    
print("Program Started.")

# Pairing with controller
drone.pair()

#
for freq in NOTE:
    play_sound_controller(freq, 300)
    # play_sound_drone(freq, 300)

サンプルコード(3)

次のサンプルコードはコントローラのLEDを1秒毎に赤、緑、青の順に切り替え、最後は消灯します。

04.Controller_LED.py
# 04.Controller_LED.py

# import codrone_edu library
from codrone_edu.drone import *

# make drone instance
drone = Drone()

print("Program Started.")

# Pairing with controller
drone.pair()

# tuen off all LEDs
drone.controller_LED_off()
sleep(1)

# set controller LED red
drone.set_controller_LED(255, 0, 0, 100)
sleep(1)

# set controller LED green
drone.set_controller_LED(0, 255, 0, 100)
sleep(1)

# set controller LED blue
drone.set_controller_LED(0, 0, 255, 100)
sleep(1)

# tuen off LED
drone.controller_LED_off()

サンプルコード(4)

次のサンプルコードはドローンのLEDを1秒毎に赤、緑、青の順に切り替え、最後は消灯します。

05.Drone_LED.py
# 05.Drone_LED.py

# import codrone_edu library
from codrone_edu.drone import *

# make drone instance
drone = Drone()

print("Program Started.")

# Pairing with controller
drone.pair()

# tuen off all LEDs
drone.drone_LED_off()
sleep(1)

# set controller LED red
drone.set_drone_LED(255, 0, 0, 100)
sleep(1)

# set controller LED green
drone.set_drone_LED(0, 255, 0, 100)
sleep(1)

# set controller LED blue
drone.set_drone_LED(0, 0, 255, 100)
sleep(1)

# tuen off LED
drone.drone_LED_off()

おわりに

今回の記事はここまでです。
次回はドローンを飛行させる記事を書く予定です。

今回使用したライブラリ(codron_edu)の詳細情報(英語)は以下のページにあります。

https://docs.robolink.com/docs/CoDroneEDU/Python/Function-Documentation

Discussion