Protocolの二種類のシリアル通信用プロトコルがあります。Protocolの方が良いのでしょう。これからロボットを自作しようという話なので、SDKかサンプルプログラムを期待するわけですが、ODriveはサンプルもツールも全部pythonで作られています。python好きなら良かったのですが、どうもpythonに抵抗があるので、どうしてもC++で書き直したいところです。)がasciiプロトコルのライブラリになっているため、こちらをそのままVisualC++/MFCのプロジェクトに放り込んでみます。接続は、ODriveオンボードのUSBではなく、GPIOのUARTにUSB-TTL変換ケーブルを使って接続しました。ODriveオンボードのUSBの場合、ODriveの電源を落とすとシリアルポートもPC上から消えてしまうのですが、変換機を使えばポートは残るので便利かなーという理由です。あと、元になったソースがArduinoライブラリなので接続を揃えたかったというのもありますね。GPIO1,2にTxDとRxDを接続し、GND同士を結線すれば、3本繋いで接続は完了です。接続が出来れば、実際に通信です。アスキープロトコル、非常に簡単でした。位置制御で、「axis0のモーターを2回転回転させる。速度とトルクは指定なし」の場合は下記のコマンドを送ります。小数点は省略できます。0[LF]パラメータ1つめがモーターID、2,3,4はそれぞれ、位置・速度・トルクになります。floatで少数で送ってもいいし、整数で送ってもいいです。実際、数値を変えながら連続して送ると、モーターが回ります。1000.0[LF]です。設定の場合、返り値がないのが、不安なところです。書き込んだパラメータを読み取ってみます。axis0.controller.config.vel_limit[LF]になります。送るとODriveから、値のみが文字で帰ってきます。受け取った文字列を、atoiやatofで変換すればOKです。帰ってきた値が設定した値になっていれば、設定がうまくいったことが分かりますね。Protocolには、チェックサムやエラー処理はないので、そのあたりは割り切って使うしかないようです。Protocolの不安ポイントですね。これらを使って、簡単にアプリを作ってみました。ODriveのお作法ですが、電源投入から「フルキャリブレーション」→「クローズドループ」→「ひたすら位置を送信」、という手順で動作させます。ついでに、パラメータの読み書きが出来るので、動作中のパラメータを吐き出して、グラフ化することも可能です。Protocolに関しては、すごく素直な感じで、サクッと実装出来ました。あとはパラメータの読み書きが出来るので、初期設定もGUIで作っちゃったら便利かなーと思ったのですが・・・パラメータがどうなってるのが、Odrivetoolで、全容を吐き出して、その多さに愕然としております。吐き出したので、忘備録として張り付けておきます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。Project.Top。