スポンサーリンク

RaspberryPi

フライトコントローラーSP Racing F3をRaspberryPiで操作

フライトコントローラーSP Racing F3を
プロポではなく、RaspberryPiで操作するためには
どんな方法があるでしょう?

色々調べてみると、SP Racing F3には
MSP(MultiWii Serial Protocol)
というプロトコルが存在することを知りました。

MSPの仕様について詳しくは↓
http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol

ふむふむ、これを使えば、かなり細かく制御できるようで、
値の取得、プロポの代わりにドローンの操作も
簡単にできそうです。

SP Racing F3はMultiWiiの派出系?
MSPの全てを網羅しているのか?
等疑問がありますが、、、

まずは試してみましょう!

SP Racing F3のセンサーデータを取得するプログラムを作成

MacとSP Racing F3をUSBで接続します。
接続するためには、ドライバーが必要です。ない場合は↓からダウンロード。
http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

作成するプログラムは、
1秒おきに、加速度センサー、ジャイロセンサー、磁力センサーの値を
取得し、表示するというシンプルなものです。

仕様書でいうmessage_id:102 コマンド名:MSP_RAW_IMU
というリクエストを使用します。

今回はNode.jsでスクリプトを書きますので、
適当なフォルダでターミナルからコマンド操作します。

npmの初期化

$ npm init

シリアルポートに接続するためのライブラリ取得

$ npm install serialport

メインのスクリプトを書きます。(エディターは使いやすいものをどうぞ、、)

$ emacs test.js

test.jsの中身はこちら

//MSP動作確認用スクリプト                                                                                        
var serial = require('serialport');
var dev = '/dev/cu.SLAB_USBtoUART';
var interval = 1000;
serial = new serial(dev,{
        baudrate:115200
    });

//シリアルポート接続時イベント                                                                           
serial.on('open', function(){
        console.log('open /dev/cu.SLAB_USBtoUART');
        //1秒(1000ms)おきにリクエスト送信                                                                  
        setInterval(function(){
                sendRequest();
            }, interval);
    });
//レスポンス受信時イベント                                                                               
serial.on('data',function(data){
        readResponse(data);
    });

//リクエスト送信メソッド                                                                                         
function sendRequest(){
    var seg1 = 0x24;
    var seg2 = 0x4D;
    var seg3 = 0x3C;
    var seg4 = 0;
    //今回はmesssage_id = 102固定                                                                                
    var seg5 = 102;
    var crc = seg4 ^ seg5;
    var buf = new Buffer(6);
    buf.fill(seg1, 0);
    buf.fill(seg2, 1);
    buf.fill(seg3, 2);
    buf.writeUInt8(seg4, 3);
    buf.writeUInt8(seg5, 4);
    buf.writeUInt8(crc, 5);
    serial.write(buf, function(err, result){});
}
//レスポンス処理メソッド                                                                                         
function readResponse(data){
    var buf = new Buffer(data, 'binary');
    var size = buf.readUInt8(3);
    var sl5 = buf.readUInt8(4);
    var show = 'Response Type : ' + buf.readUInt8(4)
    var dat;
    if (size > 0){
        for (i=0; i<size; i+=2){
            show += ' val: ' + buf.readInt16LE(5 + i);
        }
    }
    console.log(show);
}

そして、プログラムを実行します。

$ node test.js

すると、、

scr20160710

単位などは要調整として、
左から加速度(x軸)、加速度(y軸)、加速度(z軸)、ジャイロ(x)、ジャイロ(y)、ジャイロ(z)、磁力(x)、磁力(y)、磁力(z)
の値が取得できていることが確認できます。

フライトコントローラーを動かすと、
それぞれの値もリアルタイムに変わりました。

今回はMacから検証してみましたが、
次回はRaspberryPiからもやってみようと思います!

ピックアップ記事

  1. QAV250をリニューアル制作
  2. 新世代フライトコントローラーSP Racing F3
  3. 210サイズドローンの制作
  4. MQTTでドローンの自動操縦を考える(1)
  5. DJIとIntelの最新技術の結晶 80gの小型ドローンTello

関連記事

  1. Webプログラミング

    Parrot Bebop2のカメラ映像をリアルタイムにYouTube配信する方法

    Node.jsを使い、Parrot Bebop2をどこまでコントロール…

  2. RaspberryPi

    iPhoneでドローン(SPRacingF3)を操縦する方法

    以前の記事では、ドローンに積んだフライトコントローラーSP Ra…

  3. RaspberryPi

    ラズパイで3Gデータ通信をするには

    Raspberry Pi 3で、3Gデータ通信をしたいのでUSB型の…

  4. RaspberryPi

    ラズベリーパイはじめました

    秋葉原の千石電器に行き、前から気になっていたRaspberryPi3…

  5. RaspberryPi

    ラズベリーパイにパッケージインストール

    Raspberry Pi 3をどんどん自分仕様にしていきます。パッ…

  6. フライトコントローラー

    フライトコントローラー(SP Racing F3)にGPSモジュール(ublox neo-6m)追加…

    今回は、前からやりたかったGPSモジュールの追加です。GPSで位…

おすすめ記事

最近の記事

  1. トイドローンTelloでGo言語プログラミング!フロントカメ…
  2. DJIとIntelの最新技術の結晶 80gの小型ドローンTe…
  3. Parrot Bebop2のカメラ映像をリアルタイムにYou…
  4. Parrot bebop2をNode.jsで操作してみた
  5. プログラミングができる市販ドローン”Parrot…

月別アーカイブ

  1. RaspberryPi

    ラズベリーパイにパッケージインストール
  2. ドローンのパーツ

    かっこいいアンテナホルダーを自作する方法
  3. プロポ

    プロポはモード1がよいかモード2がよいか?
  4. 市販ドローン

    トイドローンTelloでGo言語プログラミング!フロントカメラのビデオ映像も取得…
  5. ドローン練習

    ドローン練習に行ってきました #3
PAGE TOP