Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ROS Japan UG #34LT大会 前原圭祐

ROS Japan UG #34LT大会 前原圭祐

maehara-keisuke

February 17, 2020
Tweet

More Decks by maehara-keisuke

Other Decks in Technology

Transcript

  1. 2/11 © 2020 MAEHARA Keisuke やりたいこと(知りたいこと)知りたいこと)りたいこと) • 制御周期の正確性をなんの正確性をなんと正確性をなんとなく掴という観点から見て,観点から見て,普通から見て,普通の開見て,普通の開発て,普通の開発環境普通の開発環境(の正確性をなんと開発環境(知りたいこと) PC +

    Ubuntu + ROS2 )は制御用コンピュ制御用コンピュータとコンピュータとしてどのくらとしてどの正確性をなんとく掴みたい ら見て,普通の開い信用コンピュータとでき るの正確性をなんとか? – ROS2 の正確性をなんと流儀(知りたいこと)ノードにに timer を設定してして spin させる)で制御ループをを 組むと,どのくらむと,普通の開発環境どの正確性をなんとく掴みたい ら見て,普通の開い正確な制御周期の正確性をなんを得られるか?ら見て,普通の開れるか? – ユーザランドにの正確性をなんと実装は変えずに,は制御用コンピュ変えずに,えずに,普通の開発環境 linux-kernel の正確性をなんと実装は変えずに,を差し替えると有し替えると有えると有 意な変化は見られな変えずに,化は見られるか?は制御用コンピュ見て,普通の開発ら見て,普通の開れるか? – レイテンシやジッタの細かやジッタとしてどのくらの正確性をなんと細かい内訳はさてかい内訳はさておき,デは制御用コンピュさておき,普通の開発環境デバイスドにライバを介しし て実際にコンピュータにコンピュータとしてどのくらの正確性をなんと外に信号が出てくに信号が出てくるタイが出てくるタイミ出てくるタイミンてく掴みたい るタとしてどのくらイミングで測定したいで測定してしたい
  2. 3/11 © 2020 MAEHARA Keisuke 評価するソフトウェするソフトウェアの構造の正確性をなんと構造 • I/O を担うノード(う観点から見て,ノードに(知りたいこと) I/O

    ハンドにラ)と制御則を担うノードをを担うノード(う観点から見て,ノードにを分けるける – I/O ノードに • timer の正確性をなんとコールバック:出力処理→入力出てくるタイミン力処理→入力処理→入力値をを Publish • 出てくるタイミン力値を Subscribe の正確性をなんとコールバック:出力処理→入力次の周期で出力すの正確性をなんと周期の正確性をなんで出てくるタイミン力する値ををストアの構造 – 制御則を担うノードをノードに • 入力値を Subscribe の正確性をなんとコールバック:出力処理→入力制御則を担うノードを→出てくるタイミン力値をを Publish 制御則を担うノードを 出てくるタイミン力値を Pub 入力値を Sub? 入力 入力値を Pub timer? 出てくるタイミン力 Topic 出てくるタイミン力値をストアの構造 Topic I/O ノードに 制御則を担うノードをノードに
  3. 4/11 © 2020 MAEHARA Keisuke 評価するソフトウェするソフトウェアの構造の正確性をなんと構造 • SingleThreadedExecutor • rclcpp::NodeOptions().use_intra_process_comms(true)

    • I/O ノードに – パラレルポートに 1bit 出てくるタイミン力し,普通の開発環境結線によってリダイによってリダイレクトされた出てくるタイミン力 を 1bit 入力として読み込むみ込むむ • 制御則を担うノードをノードに – 受け取った入力をけ取った入力を反転った入力を反転して出力としてして出てくるタイミン力として返すす • 外に信号が出てく部には制御周期ごには制御用コンピュ制御周期の正確性をなんごとに値をが出てくるタイミ反転して出力としてするよう観点から見て,な矩形波が生成されるが出てくるタイミ生成されるされる ppdev パラレルポート linux カーネル ハードにウェアの構造 ミドにルウェアの構造 ROS2 ユーザランドに ppdev logical_out logical_in I/O ノードに 制御則を担うノードをノードに シやジッタの細かングで測定したいルスレッドにエグで測定したいゼキュータとしてどのくら timer parallel _out parallel _in ※ アの構造クチュエータとしてどのくら出てくるタイミン力が出てくるタイミ 1 周  期の正確性をなん分ける遅れて出力されるれて出てくるタイミン力されるよう観点から見て,  なディジタとしてどのくらル制御系を想定を想定して トピック
  4. 5/11 © 2020 MAEHARA Keisuke 評価するソフトウェ環境 CPU : Core i5-6500

    Chipset:Z170 LPT Header USB データとしてどのくら 収集 I/O ノードに実行ターミナルタとしてどのくらーミナル データとしてどのくら収集タとしてどのくらーミナル 簡易ロガー:ロガー:出力処理→入力 nucleo-H743ZI2 I/O 割り込みの両エッり込むみの正確性をなんと両エッジのタイミエッジの正確性をなんとタとしてどのくらイミングで測定したいで,普通の開発環境 1[μs]μs]s] ごとにカウントアの構造ップをするタとしてどのくらイマの値を記録の正確性をなんと値をを記録 on board USB-serial 出てくるタイミン典:出力処理→入力 https:// www.asus.com/ media/global/ products/ tkC82KRIK7stRrFD/ WHftJnuxFb6WlETV _setting_fff_1_90_e nd_500.png バスバッファ + 動作確認用コンピュータと LED 時間 “ ”
  5. 6/11 © 2020 MAEHARA Keisuke 評価するソフトウェ条件 • ROS2 Dashing Diademata

    • 目標制御周期の正確性をなんとして,普通の開発環境 1[μs]ms] および 10[μs]ms] を評価するソフトウェする • 1 試行ターミナルあたり,普通の開発環境制御周期の正確性をなん換算でで 10,000[μs]cycle] 分けるの正確性をなんとデータとしてどのくらを取った入力を反転得られるか?する • linux-kernel として,普通の開発環境 Ubuntu リポジトリに標準で用意されていで用コンピュータと意な変化は見られされている 5.3.0-28-generic と 5.3.0-28-lowlatency を評価するソフトウェする • 特別な負荷は与えずな負荷は与えず,は制御用コンピュ与えず,えず,普通の開発環境 1 つの正確性をなんと条件で 4 回測定してする カーネル 制御周期 1st 2nd 3rd 4th generic-kernel 1[ms] ? ? ? ? 10[ms] ? ? ? ? lowlatency-kernel 1[ms] ? ? ? ? 10[ms] ? ? ? ?
  6. 7/11 © 2020 MAEHARA Keisuke 評価するソフトウェ結果(知りたいこと) generic, 1[μs]ms] ) 1st

    mean = 1037 pstdev = 239 max = 9024 min = 812 2nd mean = 1022 pstdev = 164 max = 5086 min = 832 3rd mean = 1158 pstdev = 487 max = 13047 min = 727 4th mean = 1146 pstdev = 447 max = 6109 min = 803 ヒストグで測定したいラムのピークが左にの正確性をなんとピークが出てくるタイミ左に寄っている.に寄っている.っている. 最悪値をが出てくるタイミ目標値をの正確性をなんと 10 倍以上になるケースもになるケースも.
  7. 8/11 © 2020 MAEHARA Keisuke 評価するソフトウェ結果(知りたいこと) generic, 10[μs]ms] ) 1st

    mean = 10023 pstdev = 49 max = 13144 min = 6878 2nd mean = 10024 pstdev = 107 max = 20106 min = 7774 3rd mean = 10024 pstdev = 28 max = 10250 min = 9799 4th mean = 10026 pstdev = 13 max = 10181 min = 9873 目標周期の正確性をなん 1[μs]ms] の正確性をなんと場合よりもピークがよりもピークが出てくるタイミセンタとしてどのくらーに寄っている.るよう観点から見て,になったが出てくるタイミ,普通の開発環境 最悪値をが出てくるタイミ目標値をの正確性をなんと 2 倍になるケースも.
  8. 9/11 © 2020 MAEHARA Keisuke 評価するソフトウェ結果(知りたいこと) lowlatency, 1[μs]ms] ) 1st

    mean = 1022 pstdev = 146 max = 3048 min = 839 2nd mean = 1019 pstdev = 137 max = 2864 min = 828 3rd mean = 1016 pstdev = 144 max = 8925 min = 875 4th mean = 1020 pstdev = 179 max = 8957 min = 501 generic-kernel の正確性をなんと場合よりもピークがと同様,普通の開発環境ピークが出てくるタイミ左に寄っている.に寄っている.っている. 最悪値を / 標準で用意されてい偏差し替えると有ともに generic-kernel よりマの値を記録シやジッタの細かな傾向は見られる.は制御用コンピュ見て,普通の開発ら見て,普通の開れる.
  9. 10/11 © 2020 MAEHARA Keisuke 評価するソフトウェ結果(知りたいこと) lowlatency, 10[μs]ms] ) 1st

    mean = 10022 pstdev = 28 max = 10616 min = 9427 2nd mean = 10022 pstdev = 29 max = 10652 min = 9340 3rd mean = 10023 pstdev = 28 max = 10288 min = 9741 4th mean = 10023 pstdev = 34 max = 11618 min = 8428 目標周期の正確性をなん 1[μs]ms] の正確性をなんと場合よりもピークがよりもピークが出てくるタイミセンタとしてどのくらーに寄っている.るよう観点から見て,になった. 最悪値をについては制御用コンピュ generic-kernel よりも改善してそう.要してそう観点から見て,.要 N 増し評価.し評価するソフトウェ.
  10. 11/11 © 2020 MAEHARA Keisuke まとめ • I/O ノードにの正確性をなんと起床をを ROS2

    (知りたいこと)と Linux )任せにした条件でせにした条件で – generic-kernel でも lowlatency-kernel でも,普通の開発環境制御周期の正確性をなん 1[μs]ms] は制御用コンピュ厳しそしそ う観点から見て,.おとなしく掴みたい ,普通の開発環境マの値を記録イコンサブシやジッタの細かステムのピークが左にを組むと,どのくらみ合よりもピークがわせましょう観点から見て, – 制御周期の正確性をなん 10[μs]ms] く掴みたい ら見て,普通の開いなら見て,普通の開,普通の開発環境そこそこきれいなヒストグで測定したいラムのピークが左にが出てくるタイミ得られるか?ら見て,普通の開れ た.ただし,普通の開発環境少ない試行回数のない試行ターミナル回数のなかでもの正確性をなんとなかでも generic-kernel では制御用コンピュ制御周期の正確性をなんの正確性をなんと 最悪値をが出てくるタイミ 2 倍になるタとしてどのくらイミングで測定したいもあった.シやジッタの細かステムのピークが左にの正確性をなんと安定して動作に問題なな ければ lowlatency-kernel 推奨.