Linux活用レシピ > ドローンに活用 > ドローンをRaspberryPiとGoで自動飛行させカメラ動画を撮影し録画する方法
このページでは、ドローン「TELLO」をRaspberry PiとGoで自動飛行させカメラ動画を撮影し録画する方法を紹介します。


ドローンをラズパイとGoで自動飛行&撮影(録画)する方法
自動飛行

いよいよGoによる自動飛行です。
ここではサンプルプログラムで、自動飛行を楽しんでみましょう。

Raspberry PiとTELLOをWiFiで接続

    TELLOを制御するにはWiFiで接続する必要があります。
    まずは、TELLOの電源を入れましょう。

    TELLOの正面のLEDが激しく点滅したら準備完了です。
    以下の通り、OS「Raspbian」で、右上のネットワーク部分をクリック


    「TELLO-」から始まるTELLOのSIDを選択します。

    以下の通りWiFiの表示が変わったら、Raspberry PiとTELLOがWiFiで接続できました。

自動飛行プログラムの作成と実行

    早速、自動飛行プログラムの作成と実行をしましょう。

    まず、Raspbianのメニューから赤枠の部分をクリックしてターミナルを起動します。


    カレントディレクトリに「tellotakeoff-left20.go」をviで作成します。
    pi@raspberrypi:~ $ vi tellotakeoff-left20.go[ENTER]
    
    以下の通りTelloが離陸して10秒後に左にスピード「20」で移動し、5秒後に静止その後5秒後に着陸するプログラムを書き保存します。
    package main
    
    import (
        "time"
        "fmt"
    
        "gobot.io/x/gobot"
        "gobot.io/x/gobot/platforms/dji/tello"
    )
    
    func main(){
        drone := tello.NewDriver("8888")
    
        work := func() {
                    drone.Left(0)
                    drone.Right(0)
                    drone.Forward(0)
                    drone.Backward(0)
                    drone.TakeOff()
                    fmt.Printf("TakeOff\n")
    
                    gobot.After(10*time.Second, func() {
                           drone.Left(20)
                           fmt.Printf("Left 20\n")
    
                           time.Sleep(5 * time.Second)
                           drone.Left(0)
                           fmt.Printf("Left 0\n")
    
                           time.Sleep(5 * time.Second)
                           drone.Land()
                           fmt.Printf("Land\n")
                           return
                    })
    
        }
    
        robot := gobot.NewRobot("tello",
            []gobot.Connection{},
            []gobot.Device{drone},
            work,
        )
    
        robot.Start()
    }
    


    「tellotakeoff.go」を実行します。
    pi@raspberrypi:~ $ go run tellotakeoff-left20.go[ENTER]
    

    いかがでしょうか、TELLOが10秒後に左にスピード「20」で移動し、5秒後に静止その後5秒後に着陸する。
    こちら「https://godoc.org/gobot.io/x/gobot/platforms/dji/tello」にリファレンスが公開されていますが、なかなか思い通りにいってくれなくって、drone.Left(20)の「20」がスピードだと検証の結果わかりまして、drone.Left(0)でその動きを止めるようにしていますが、これが正しいかどうかは現在も検証中です。



続いて飛行中の動画をライブで表示するサンプルプログラムを紹介します。