Deprecated
このセクションには、非推奨となり artefacts でサポートされなくなった記事(設定ガイド、チュートリアルなど)が含まれています。ワークフローの参考として引き続き使用できるため、ここに残されています- チュートリアル: 回帰テストの自動化とパラメータ調整 - ROS1 と turtlesim を使用した例
これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.
ロボットシステムの開発中、開発者は新機能の開発やコンポーネントの統合のために多数のテストを実行します。このチュートリアルでは、Artefactsプラットフォームが具体的な例を用いて、以下の3つの一般的なユースケースによりロボット開発をより効率的にする方法を紹介します:
ロボティクスのユースケースに関連しながらも、最小限のコードで設定不要なチュートリアルを提供するため、ROS1とそのシンプルなturtlesimシミュレータを用いた参照実装を構築しました。
ここで紹介するArtefactsの概念はすべて、ROS1やturtlesimの例を超えて一般的に適用できます。これらはあなた自身のユースケースの参考やレシピとして機能することを意図しています。
以下の各例には、テストの根拠 + テスト説明 + テスト結果が含まれており、Artefactsを活用する方法について明確なガイダンスを提供しています。このチュートリアルでは実装の詳細を最小限に抑えていますが、すべてのユースケースをサポートするデモコードは[demo-ros1-turtlesim]で確認できます。
チュートリアルの例は概念の複雑さに応じて段階的に進むよう選ばれているため、順番に従うことをお勧めします。ROS1とturtlesimの事前知識があることを前提としています。
根拠: 複雑なシステムにおけるベストプラクティス:既に実装された機能が後続の実装によって劣化しないことを保証するテストを定義すること:回帰テスト。
テスト説明: 主な特徴は、テストが自動的に最初から最後まで実行され、合格/不合格をArtefactsダッシュボードに報告できることです。
この例では、以下のように回帰テストを定義します:

テストのセットアップ:
rostestとArtefactsのセットアップは簡単です:
rostest テストクラスを作成する。
unittest.TestCase を継承する。setUp() メソッドを提供する。例えば、ロボットを開始位置に配置し、テストに必要なリソースを準備する。test_mytest() メソッドを提供する。tearDown() メソッドを提供する。.launch ファイルのartefacts.yaml ファイルを作成する。 参照例を参照。以下のようにシンプルにできます:project: demo-ros1-turtlesim
jobs:
turtle_regression:
type: test
runtime:
simulator: turtlesim
framework: ros1:noetic
scenarios:
settings:
- name: simple_regression_test
ros_testpackage: turtle_simple
ros_testfile: turtle_simple.launch
このテストの実行は、以下の3つの方法のいずれかで行えます:
artefacts run rover_trajectoryartefacts run-remote rover_trajectoryまとめ:
回帰テストについては:これらのテストを継続的インテグレーションパイプラインに含めることで、新しい開発が以前に機能していた機能を壊した場合にアラートが発生することを保証できます。
より一般的には、このシンプルなセットアップは実際に、Artefactsの使用と任意の種類のテストの作成に関する基本的な内容をすべてカバーしています:
rostest と unittestを使用しました。 ArtefactsはROS2と launch_test (およびその他のフレームワーク)もサポートしています。Artefactsの重要な機能は、多数(本当に多数!)のテストを簡単に調整できることです:この例では、YAML設定ファイルに1つの追加概念(パラメータのリスト)を加えるだけで、50のテストを自動的に実行します。
また、 rosbag_postprocess スクリプトを使用して各テストの終了時にテスト指標を自動的に計算する方法も紹介します。
根拠: 50のテストを実行することで、シミュレーションやテスト設定の非決定的な側面を特定し定量化することができます。これは再現性テストと呼ばれます。同一のパラメータでテストを実行した際の指標のばらつきを定量化することで、将来の実装が実際に計算された指標の改善/劣化につながるのか(あるいは単に統計的なばらつきの影響なのか)を適切な確信度で結論付けることができます。
テスト説明:
この例は前述のturtlesimの正方形軌道の上に構築しています。
この再現性テストをより現実的にするため、シミュレートされたホイールオドメトリセンサーを作成し、そこから亀の位置を計算するノードを追加します (see turtle_odom.py参照)。これは、IMUとモーターエンコーダデータをカルマンフィルターに融合したり、SLAMを実装したり、その他の位置推定フレームワークを使用したりする可能性のあるロボティクスアプリケーションに関連するスタンドインです。
各テスト実行について、以下のようなさまざまな指標を計算し、実行ごとにどのように変化するかを確認します:
cumulative distance_final: テスト中に亀が移動した総距離(グラウンドトゥルース)error horizontal final: 軌道の終了時における、推定された亀のx位置とy位置とグラウンドトゥルースとの間の誤差(ユークリッド距離、メートル単位)error orientation final: 軌道の終了時における、推定された亀のヨー(向き)方向とグラウンドトゥルースとの間の誤差(絶対値、度単位)time delta max: 各推定メッセージとグラウンドトゥルースメッセージ間の最大タイムスタンプ不一致。低い値は誤差指標が一貫して計算されることを保証します。テストのセットアップ:
Artefactsを使用すると、わずかな追加手順だけで済みます:
artefacts.yamlを以下のように設定します:
rosbag_record キーを追加rosbag_postprocessキーを追加params キーの下に、X個のダミー値のリストを持つダミーパラメータを追加artefacts.yaml ファイルの参照例 を参照してください。以下のようにシンプルにできます:
project: demo-ros1-turtlesim
jobs:
turtle_repeat:
type: test
runtime:
simulator: turtlesim
framework: ros1:noetic
scenarios:
settings:
- name: turtle_repeatability
ros_testpackage: turtle_odometry
ros_testfile: test_odometry.launch
rosbag_record: all
rosbag_postprocess: turtle_post_process.py
params:
dummy: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # Artefacts will run 10 scenarios, each with the value from this parameter list
このテストはローカル (artefacts run turtle_repeatability) またはArtefactsインフラで実行できます。どちらの場合も、Artefactsは10のテストを順番に自動的に実行します。その後、各テストの結果はArtefactsダッシュボードのクラウドにログ記録されます。
Artefactダッシュボードはテスト中に作成されたすべてのファイルを、豊富な視覚化をサポートして表示します。特に、HTML形式のグラフ (例 plotly製)が表示されます。
Artefactsダッシュボードから、灰色の矢印ボタンをクリックすると、すべてのシナリオの結果をCSVでエクスポートしてさらに分析することができます。
テスト結果:
シンプルな分析 ( jupyter notebookの例を参照)では、各指標の統計を計算しグラフを作成します:

シミュレーションの非決定的な性質により、まったく同じ条件で実行されたテストの指標でも変動が生じます。
これらの変動は、後続のテストで誤った結論に達しないように定量化することが重要です:
まとめ
YAML設定ファイルにXパラメータをリストとして指定するだけで、Artefactsは自動的にXテストを実行し、すべての結果をArtefactsダッシュボードに保存します。
後処理スクリプトを指定するだけで、Artefactsは各テストの終了時にそれを実行し、結果の指標を各テストのArtefactダッシュボードにアップロードできます。
テスト中に作成されたすべてのファイルは、豊富な視覚化サポートとともにアップロードされます。これにより、より深い洞察を得るためのテスト結果のインタラクティブな探索が可能になります。
根拠:
従来、ロボティクスにおけるパラメータ調整は時間がかかり、エラーが発生しやすい理由は以下の通りです:
Artefactsは、テストの各側面を指定し、パラメータ化し、パラメータセット間で自動的にグリッド検索を実行しながら、すべての結果をログに記録し、中央ダッシュボードに表示するフレームワークを提供します。
テスト説明: この例は前述のturtlesimの再現性テストの上に構築しています。
今回の目標は、実際に亀の位置推定精度を向上させることです。具体的には、 horizontal error final と orientation error final の2つの指標を最小化することです。
この例では、調整可能なパラメータは odom_tuning_theta と odom_tuning_forwardの2つだけで、これらは亀のモックセンサーを使用したオドメトリ計算に影響します
これら2つのパラメータそれぞれに10個の値をテストすると、すでに100の組み合わせになります。これは従来の/手動テスト設定では扱いにくいでしょう!しかし、Artefactsを使えば簡単に設定でき、昼食時にテストを実行させ、その後Artefactsダッシュボードで結果を確認できます。
テストのセットアップ:
上記の2つのテスト設定を基に、さらに2つの要素を実装するだけです:
artefacts.yaml に渡された各パラメータはArtefactsによってROS rosparam サーバーで利用可能になります。そのため、起動時に rosparam サーバーをチェックするための数行をオドメトリノードに追加するだけです(rospy.get_param('test/odom_tuning_theta')).artefacts.yaml に追加します。これらはArtefactsによって実装された自動グリッドカバレッジの基礎として機能します:パラメータの組み合わせごとにテストシナリオがトリガーされます (完全な例)。 例えば、以下の.yamlでは102=10010^2 = 100
102=100のテストシナリオが作成されます!project: demo-ros1-turtlesim
jobs:
turtle_grid:
type: test
runtime:
simulator: turtlesim
framework: ros1:noetic
scenarios:
settings:
- name: turtle_gridsearch
ros_testpackage: turtle_odometry
ros_testfile: turtle_odometry.launch
rosbag_record: all
rosbag_postprocess: turtle_post_process.py --skip_figures
params:
test/odom_tuning_theta: [0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5]
test/odom_tuning_forward: [0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5]
テスト結果:
Artefactsダッシュボードからジョブ結果をCSVとしてダウンロードした後、各シナリオの関心のある2つの指標をプロットできます (jupyterノートブック参照):

ここでは値が低いほど良く、目標は両方の指標を共同で最小化することです。 両方の指標にわたって結果を比較することをより実用的にするために、性能指標(figure of merit)を定義するのが一般的です:
$FoM = \displaystyle\sum_i w_i * m_i$ ここで各 $w_i$ は各指標 $m_i$ に割り当てられた重みです
これらはプロジェクトの目標に従って選択すべきです(例えば、方向誤差を最小化することと水平誤差を最小化することのどちらが重要か?)。ここでは、方向誤差1度が水平誤差10cmに相当すると選択します。 次に、100のシナリオそれぞれの性能指標をプロットします:

パラメータの関数として性能指標をプロットすることで、検索内でのトレンドを見つけることができます。ここでは、両方のパラメータの値が低いほど性能指標が低くなり、以下の図に示されています:

最高の位置推定精度につながるパラメータは次のとおりです:
まとめ
この例では、一度だけの設定後、Artefactsに単一のコマンドで100のテストを実行するよう指示しました。その後、計算されたすべての指標をCSVとしてエクスポートし、これを使用して亀の位置推定アルゴリズムを調整するための最適なパラメータセットを特定しました。この方法論は、多くの異なるパラメータ値を試す必要のあるあらゆる種類のアルゴリズムの調整に適用できます。
このチュートリアルでは、一般的なロボティクス開発のユースケースでArtefactsを使用する方法を説明しました:
rostest でテストを記述し、ローカルとArtefactsインフラのクラウドの両方で自動的に実行する方法。