Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
morimoto committed Dec 2, 2024
1 parent 9fcaa73 commit b57f8e8
Show file tree
Hide file tree
Showing 231 changed files with 13,032 additions and 16,140 deletions.
168 changes: 59 additions & 109 deletions README.md

Large diffs are not rendered by default.

9 changes: 5 additions & 4 deletions common/README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
# 共通

## はじめに
## 概要

Autoware.Universe Commonフォルダは他のAutowareコンポーネントで使用される一般的でテスト用のライブラリのほか、RVIZ2における視覚化に便利なプラグインで構成されています
Autoware.Universeの共通フォルダは、その他のAutowareコンポーネントで使用される共通ライブラリとテストライブラリ、およびRVIZ2での視覚化のための有益なプラグインで構成されています

!!! note

このフォルダに記載されているもののほかに、ユーザーは `autoware_tools/common` のドキュメント [ページ](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/) のアドオンも閲覧できます
このフォルダに記載されているライブラリに加えて、ユーザーは `autoware_tools/common` ドキュメントでアドオンの一部を確認することもできます [ページ](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/)

## ハイライト

一般的に使われているライブラリを以下に示します
一般的に使用されるライブラリの一部を示します

1. `autoware_universe_utils`
2. `autoware_motion_utils`

3 changes: 1 addition & 2 deletions common/autoware_ad_api_specs/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
# autoware_adapi_specs
404: 見つかりません

このパッケージは、Autoware AD APIの仕様です。
7 changes: 4 additions & 3 deletions common/autoware_component_interface_tools/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
## autoware_component_interface_tools
# autoware_component_interface_tools

このパッケージでは、コンポーネント・インターフェイスに関する次のツールを提供します
このパッケージは、コンポーネントインターフェースの次のツールを提供します

## service_log_checker

`component_interface_utils`のサービスログを監視し、レスポンスステータスがエラーかどうかを表示します。
component_interface_utilsのサービスログを監視し、応答ステータスがエラーの場合に表示します。

3 changes: 2 additions & 1 deletion common/autoware_geography_utils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

## 目的

このパッケージには、その他の package で使用される地理関連関数があります。必要に応じて参照してください。
このパッケージには、他のパッケージで使用される地理関連の関数が含まれていますので、必要に応じて参照してください。

47 changes: 24 additions & 23 deletions common/autoware_grid_map_utils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,48 @@

## 概要

このパッケージには、ポリゴン内にあるグリッドマップのすべてのセルを反復処理するために使用される `grid_map::PolygonIterator` の再実装が含まれます
このパッケージには、いくつかのポリゴン内に含まれるグリッドマップ内のすべてのセルを反復処理するために使用される`grid_map::PolygonIterator`の実装が含まれます

## アルゴリズム

この実装では、ラスタライズされた画像にポリゴンを描画するために使用される一般的なアルゴリズムである [走査線アルゴリズム](https://ja.wikipedia.org/wiki/%E8%B5%B0%E6%9F%A5%E7%B7%9A%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B6%E3%83%B3) を使用します。
このアルゴリズムをグリッドマップに適用した主な考え方は次のとおりです
この実装では、ラスター化された画像にポリゴンを描画するために一般的に使用される[走査線アルゴリズム](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%82%AD%E3%83%9F%E3%81%AE%E3%83%90%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B0%E3%83%A0)を使用します。
グリッドマップに適応されたアルゴリズムの主な考え方は次のとおりです

- グリッドマップの行とポリゴン端の交点を計算します
- 各行について、各交点のペア間の列を計算します
- 結果の `(行、列)` インデックスはポリゴン内にあります
- グリッドマップの行とポリゴンエッジのエッジとの交点を計算する
- 各行について、交点の各ペア間の列を計算する
- 結果の`(row, column)`インデックスはポリゴンの内側です

走査線アルゴリズムの詳細については、リファレンスを参照してください
走査線アルゴリズムの詳細については、参照をご覧ください

## API

`autoware::grid_map_utils::PolygonIterator` は、元の [`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html) と同じ API に従います
`autoware::grid_map_utils::PolygonIterator`は、元の[`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html)と同じAPIに従います

## 前提
## 前提条件

`autoware::grid_map_utils::PolygonIterator` の動作が `grid_map::PolygonIterator` と一致するのは、ポリゴンの端がどのセルの中心とも _完全に_ 交差しない場合のみです
このような場合、交差したセルがポリゴンの内側と外側のどちらと見なされるかは、浮動小数点の精度誤差によって異なる場合があります
`autoware::grid_map_utils::PolygonIterator`の動作は、ポリゴンのエッジがセルの中心を正確には横切らない場合にのみ、`grid_map::PolygonIterator`と一致することが保証されます
そのような場合、交差したセルがポリゴンの内側または外側と見なされるかどうかは、浮動小数点の誤差により異なる場合があります

## パフォーマンス

`test/benchmarking.cpp` にベンチマークコードを実装しており`autoware::grid_map_utils::PolygonIterator``grid_map::PolygonIterator` とまったく同じように動作することを検証するためにも使用しています
ベンチマークコードは`test/benchmarking.cpp`に実装されており`autoware::grid_map_utils::PolygonIterator``grid_map::PolygonIterator`とまったく同じように動作することを検証するためにも使用されます

次の図は、このパッケージ (`autoware_grid_map_utils`) の実装と元の (`grid_map`) 実装のランタイムを比較したものです
測定した時間は、イテレータの構築とすべてのインデックスの反復処理を含み、対数スケールで示しています
結果は、側辺長が `100 <= n <= 1000` の正方形グリッドマップ (サイズ=`n` は、`n x n` セルのグリッドを表します) で、頂点数が `3 <= m <= 100` のランダムなポリゴンでばらつきがあり、各パラメーター `(n,m)` は 10 回繰り返して取得されました
次の図は、このパッケージ(`autoware_grid_map_utils`)の実装とオリジナル実装(`grid_map`)のランタイムを比較したものです
測定された時間は、イテレータの構築とすべてのインデックスのイテレーションを含み、対数スケールを使用して表示されます
結果は、辺のサイズが`100 <= n <= 1000`の正方形グリッドマップ (`n`のサイズは`n x n`セルグリッドを意味します)、頂点数が`3 <= m <= 100`のランダムポリゴン、および各パラメータ`(n,m)`を10回繰り返す結果によって得られました

![ランタイムの比較](media/runtime_comparison.png)
![ランタイム比較](media/runtime_comparison.png)

## 今後改善予定
## 今後の改善

複数のポリゴンに対する走査線アルゴリズムのバリエーションがあります
これらは、複数のポリゴンのいずれかに含まれるセルを反復処理する場合に実装できます
複数のポリゴンに対して走査線アルゴリズムのさまざまなバリエーションが存在します
これらは、複数のポリゴンの少なくとも1つに含まれるセルを反復処理する場合に実装できます

現在の実装は、中心点がポリゴン内にある場合にセルが選択される、元の `grid_map::PolygonIterator` の動作を模倣しています
例えば、この動作は、ポリゴンに重なるセルのみを返すように変更できます
現在の実装は、セルの中心位置がポリゴンの内側にある場合にセルを選択する、元の`grid_map::PolygonIterator`の動作を模倣します
この動作は、たとえばポリゴンと重なるすべてのセルのみを返すように変更できます

## 参考資料
## 参照

- <https://ja.wikipedia.org/wiki/%E8%B5%B0%E6%9F%A5%E7%B7%9A%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B6%E3%83%B3>
- <https://ja.wikipedia.org/wiki/%E3%82%BD%E3%82%AD%E3%83%9F%E3%81%AE%E3%83%90%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B0%E3%83%A0>
- <https://web.cs.ucdavis.edu/~ma/ECS175_S00/Notes/0411_b.pdf>

50 changes: 24 additions & 26 deletions common/autoware_interpolation/README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,41 @@
# 補間パッケージ

このパッケージでは、線形およびスプライン補間関数が提供されます
このパッケージは、線形補間とスプライン補完関数を提供します

## 線形補間

`lerp(src_val, dst_val, ratio)`スカラー補間用)は、`ratio`を使用して`src_val``dst_val`を補間します
これは`C++20``std::lerp(src_val, dst_val, ratio)`に置き換えられます。
`lerp(src_val, dst_val, ratio)` (スカラー補間用) は`ratio`を介して`src_val``dst_val`を補完します
これは`C++20`では`std::lerp(src_val, dst_val, ratio)`に置き換えられます。

`lerp(base_keys, base_values, query_keys)`ベクトル補間用は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれに線形回帰を適用します
その後、x軸の`query_keys`に対してy軸の補間値を計算します
`lerp(base_keys, base_values, query_keys)` (ベクトル補間用) は、x値が`base_keys`で、y値が`base_values`である連続する2点に単回帰を適用します
その後、x軸の`query_keys`に対してy軸上の補完値を計算します

## スプライン補間

`spline(base_keys, base_values, query_keys)`ベクトル補間用は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれにスプライン回帰を適用します
その後、x軸の`query_keys`に対してy軸の補間値を計算します
`spline(base_keys, base_values, query_keys)` (ベクトル補間用) は、x値が`base_keys`で、y値が`base_values`である連続する2点にスプライン回帰を適用します
その後、x軸の`query_keys`に対してy軸上の補完値を計算します

### 計算コストの評価

100点に対するスプライン補間の計算コストを評価し、3対角行列アルゴリズムという最良のものを採用しました
3対角行列アルゴリズム以外の方法は`spline_interpolation`パッケージに存在しますが、Autowareからは削除されています
100ポイントのスプライン補間の計算コストを評価し、三対角行列アルゴリズムである最良のものを採用しました
三対角行列アルゴリズム以外の方法は、Autowareから削除された`spline_interpolation`パッケージに存在します

| 手法 | 計算時間 |
| ---------------------- | ---------- |
| 三対角行列アルゴリズム | 0.007 [ms] |
| 前処理共役勾配法 | 0.024 [ms] |
| 逐次過剰緩和法 | 0.074 [ms] |
| 手法 | 計算時間 |
| --------------------------------- | ---------------- |
| 三重対角行列法 | 0.007 [ms] |
| 前処理された共役勾配法 | 0.024 [ms] |
| 逐次オーバーリラクゼーション | 0.074 [ms] |

### スプライン補間アルゴリズム
### スプライン補完アルゴリズム

`base_keys` ($x_i$) と `base_values` ($y_i$) のサイズが $N + 1$ であると仮定すると、以下の式でスプライン補間を計算し、$y_i$ と $y_{i+1}$ の間に補間します
`base_keys` ($x_i$) と `base_values` ($y_i$) のサイズが $N + 1$ であると仮定すると、次の式を使用してスプライン補完を計算し、$y_i$ と $y_{i+1}$ の間を補完します

$$
Y_i(x) = a_i (x - x_i)^3 + b_i (x - x_i)^2 + c_i (x - x_i) + d_i \ \ \ (i = 0, \dots, N-1)
$$

スプライン補間の制約条件は以下のとおりです。制約条件の数は $4N$ であり、これはスプライン補間の変数の数と等しいです。
スプライン補完の制約は次のとおりです。
制約の数は $4N$ で、スプライン補完の変数の数と同じです。

$$
\begin{align}
Expand All @@ -47,7 +48,7 @@ Y''_{N-1} (x_N) & = 0
\end{align}
$$

[この記事](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf) によると、スプライン補間は次の線形方程式として定式化されます
[この記事](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf)によると、スプライン補完は次の線形方程式として定式化されます

$$
\begin{align}
Expand All @@ -66,7 +67,7 @@ $$
\end{align}
$$

ここで
ここで

$$
\begin{align}
Expand All @@ -75,23 +76,20 @@ w_i & = 6 \left(\frac{y_{i+1} - y_{i+1}}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}}\ri
\end{align}
$$

この線形方程式の係数行列は三対角行列です。そのため、降下勾配法を使用せずに線形方程式を解くことができる三対角行列アルゴリズムで解くことができます
この線形方程式の係数行列は三重対角行列です。したがって、勾配降下法を利用せずに線形方程式を解くことができる三重対角行列アルゴリズムで解くことができます

三対角行列アルゴリズムを使用してこの線形方程式を解くと、スプライン補間の係数を次のように計算できます
三重対角行列アルゴリズムを使用してこの線形方程式を解くと、次のスプライン補完の係数を求めることができます

$$
\begin{align}
a_i & = \frac{v_{i+1} - v_i}{6 (x_{i+1} - x_i)} \ \ \ (i = 0, \dots, N-1) \\
b_i & = \frac{v_i}{2} \ \ \ (i = 0, \dots, N-1) \\
c_i & = \frac{y_{i+1} - y_i}{x_{i+1} - x_i} - \frac{1}{6}(x_{i+1} - x_i)(2 v_i + v_{i+1}) \ \ \ (i = 0, \dots, N-1) \\
\end{align}
$$
### 三対角行列アルゴリズム
線形方程式は[こちら](https://www.iist.ac.in/sites/default/files/people/tdma.pdf)の記事に従い、三対角行列アルゴリズムで解いていきます。実装上は、線形方程式の変数は以下のようになります
変数が実装で次のように表される線形方程式の三対角行列を、[こちらの記事](https://www.iist.ac.in/sites/default/files/people/tdma.pdf) に従って解きます
$$
\begin{align}
\begin{pmatrix}
b_0 & c_0 & & \\
Expand All @@ -104,4 +102,4 @@ x =
d_0 \\ d_2 \\ d_3 \\ \vdots \\ d_{N-1}
\end{pmatrix}
\end{align}
$$
5 changes: 3 additions & 2 deletions common/autoware_kalman_filter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

## 目的

この共通パッケージには、時差付きカルマンフィルタとカルマンフィルの計算が含まれます
こちらの一般的なパッケージには、遅延時間のカルマンフィルタとカルマンフィルタの計算が含まれています

## 想定 / 既知の制限
## 決められた条件/既知の制限

TBD.

Loading

0 comments on commit b57f8e8

Please sign in to comment.