dronecodeのコーディングルールを拝見いたしました。
あまりにもざっくりしていることもあり、保守性や品質まではいき渡っていなさそうと感じています。
そこで、日本には、組み込み系ソフトについて、コーディングルールというのを事細かく定義してるものがあります。
例えば、
・MISRAとか
・IPAの「組込みソフトウェア開発向けコーディング作法ガイド[C++言語版]」や
・凡ミスによる障害の回避ルール
これらのルールをベースにArduCopterのコードの品質を上げていきたい。
また、その過程で、不安なコードがあれば、不安を軽減していきたい。
その情報や修正案などのアップしたいと思い、このディスカッションを立ち上げました。
何卒、よろしくおねがいいたします。
Replies
PX4Flowのファームウェアを疑って、いろいろこねくりまわしていました。
この結果をもとに、Linux用ドライバを再度確認してみます。
murata,katsutoshi said:
同じファームワエアのPX4Flow を Pixhawk に接続し、DISARMED状態で連続稼働を行いました。
結果:2.9Hハングしませんでした。(ログを確認するために、電源断しました。)
Navio2(OS Linux)のドライバ、他にもバグがありそうな感じです。
ありがとうございました。
Goro Senzai said:
PX4Flow 、約1時間15分位でハングしました。(USB出力は影響なさそうです)
LED_ACT をトグル制御している処理を調査してみます。
murata,katsutoshi said:
PX4Flow が連続稼働で、1Hぐらいでハングする現象まだ出ています。
LED_COMって、どうもUSBへの出力を示しているようです。
とりあえず、「USB出力をしない」設定にして、動作確認を進めています。
デバッグとしては、LED_ERRを「ここは!!」という所に仕込んで確認するしかないかな、とちょっと仕込み中です。
ハートビートチェックはメッセージで確認しています。
murata,katsutoshi said:
PX4Flow が何をしているか、USART3 の出力を取り続けることで、止まったときの値を確認することにしました。
https://pixhawk.org/dev/px4flow
Data Output
The PX4FLOW module outputs MAVLink packets on USB and serial port. Use QGroundControl to read data from the module.
murata,katsutoshi said:
効率を選ぶか可読性を選ぶか悩むところですよね。
頻繁にアクセスされるなら処理時間が短い方が良いですし。
初期化とかアクセス少ないものは多少効率悪くてもみやすい方が良いというのもありますし。
PRして、お考えを知りたいと思いました。
結果は、せんざい様の考えの有無について不明のまま、採用となりました。
下記では一行になっていますが、実際は各フラグごとに行を変えています。
Goro Senzai said:
コメントありがとうございます。
そういう表示ルールがあったんですね。知りませんでした。
Goro Senzai said:
コメント、とても参考になります。
ありがとうございます。
バッテリ利用可能時間以上に継続稼働させていることもあり発見しにくい現象かもしれません。
LEDの点灯状態でどのシーケンスで止まっているか、これから調査します。
これからも、よろしくお願いします。
Goro Senzai said:
確かOpticalFlowのスレッドにも書いたと思いますが、少なくとも以前チェックした際には、PX4 Native Stack用のPX4FLOW ファームウェアと、ArduPilot用のファームウェアには互換性がなかったと思います。
https://github.com/PX4/Flowは、アップストリームのPX4 Native Stack用で、ArduPilot用は下記の別ブランチがソースのはずですが、そちらをコンパイルしても動きませんでした。
https://github.com/priseborough/px4flow/tree/klt_flow
当時は時間もなかったので深く追求せず、用意されているバイナリを使っていましたが、ArduPilot版はメンテされていないので、いずれは、継続して改良が加えられているアップストリーム版と統合できればと考えています。
長時間稼働は、そもそもバッテリーがそんなに持たないため経験がないのですが、PX4 Native Stack版とArduPilot版のどちらも同じ症状であれば原因も同じバグではないかと思います。