スポンサーリンク

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. MQTTでドローンの自動操縦を考える(1)
  2. 新世代フライトコントローラーSP Racing F3
  3. DJIとIntelの最新技術の結晶 80gの小型ドローンTello
  4. ドローン練習に行ってきました #3
  5. フライトコントローラーSP Racing F3をRaspberryPiで操作

関連記事

  1. RaspberryPi

    MQTTでドローンの自動操縦を考える(1)

    ドローンの自動操縦への一歩として、前回、を紹介しましたが、今回…

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

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

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

  3. RaspberryPi

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

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

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

    新世代フライトコントローラーSP Racing F3

    今まで何も問題なく大活躍中のCC3Dですが、これからのフライトコント…

  5. RaspberryPi

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

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

おすすめ記事

最近の記事

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

月別アーカイブ

  1. RaspberryPi

    ラズベリーパイはじめました
  2. 市販ドローン

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

    バッテリー切れで墜落するのを防ぐには
  4. ドローン練習

    ドローンシミュレーター”Liftoff”でレベルアップを…
  5. 市販ドローン

    Parrot bebop2をNode.jsで操作してみた
PAGE TOP