mROS動かない。。。
mROSがとりあえず動かないので、今デバッグ用に別の手段を考えていたりするので、その辺りは次回に書きたいと思いますので、今回はRobomaster S1が届いて組み立てましたので、さっそくプロトコルの解析の話を(忘れないうちに)書いておきたいと思います。
(組み立てについてもまた後日)
そういえばDJIにTelloというドローンがあってだな・・・
知る人ぞ知るお話ですが、DJIのTelloというトイドローンが人気で、なんでもSDKも公開されているし、プロトコルも解析されて動画まで転送できるわで、盛り上がっているそうです。
https://note.mu/keizi666/n/nddef168ffb76
じゃあこれでWifi乗っ取れば同じようにRobomaster S1でも行けるんじゃね??ということでやってみましたが。。。。
。。
。。
無理でした(大汗)
プロトコルがそのままRawで流れているわけではないようでした。
本題
前回先人たちによるCANパケットによりいくらか通信プロトコルが見えてきました。
さらに、そのデータの解析を進め、私も自分のRobomaster S1で取得したり試してみました。
そこで、DJIのRobomaster S1の通信プロトコルは以下のようになっていることが発覚しました。
(CANにシリアル的に流しているのは許せませんが。。。DJIさん、もう少しCANらしくお願いします。)
ヘッダ | メッセージ長 | 固定値 | CRC8 | データバイト列 | CRC16 |
---|---|---|---|---|---|
0x55 | 0xXX | 0x04 | CRC8 | Data[] | CRC16 |
ここでお気づきの方もおられると思いますが、CRC8の計算が普通のものではないのです(Telloのとほぼ同じ)
ということで、見つけました!
https://cdn-hz.robomasters.com/tem/383c6c3f8c8351515755292179151736.pdf
2018年のICRAでRoboMasterが行われた際のレフリーシステムのManualですね。
これの最後のほうにテーブルでのCRC8とCRC16の計算方法が載っています。(バグっているので自分で直して使いましょう)
ただ、計算してみるとわかるのですが、CRC8とCRC16の計算がどうしても合いません。。。
計算方法を変えているわけないし。。。。ということでInitial Valueが違うのではということで、
適当に総当たりで(たかが255通りと65535通りなので)やってみました。
その結果以下のInitial Valueと判明しました。
CRC8 | CRC16 |
---|---|
0xXX | 0xXX |
(別PCに入っているので後で書きます) |
これで、CRC8とCRC16の計算ができるようになったので、データバイトもいじり放題になりました。
データの解析
実機が届いたので、とりあえずCANのコネクタは4PINだったので総当たりでCAN-HとCAN-Lを見つけました。
Robomaster S1のコネクタは特殊形式ですが、2.54mmピッチなので、よくあるヘッダピンが刺さるので便利です。
調べたところBaudrateは1Mbpsでした。車だと500kbpsが多いので、これまた時間をとられました。
今回解析に使用したツールは以下になります。
・Kvaser Leaf Light v2
・Busmaster
KvaserはCANツールの中でも内部にSJA1000を搭載しており、データの欠損が起こりにくく、
Linux用のAPIも公開されているので、ROSノードの作成も簡単です。
BusmasterはWindows用のソフトですが、個人では買えないVecto CANalyzer/Canoeに近い機能をオープンソースで提供しており、各種USB-CANツールに対応しているため利用しました。
データの取得後、Converter機能でエクセル形式に出せるのも魅力です。
インテリジェントコントローラの出力のIDは0x201
CANのモニタリングをしながら、インテリジェントコントローラの接続を外すと見事0x201がなくなりましたので、これがインテリジェントコントローラからの指示のようです。(CAN IDが小さいのと送信周期が短いので、だいたい予想できます)
0x201と分かったのですが、このIDを使ってまるでシリアル通信のようにコマンドを垂れ流しています(マジでやめてくれ)
ということで、ログをとって編集して、0x55を起点に改行したらこんな感じです。
はい、もうかったも同然ですね。これを見ながらコントローラで走行指示を与えると、、、、、
0x55,0x1Bがどうやら走行指示のようです。
ということで、こんな感じで解析をガンガン進めていきたいと思います。
次回は、解析の結果orシステムの検討を書きたいと思います。
ではまた。