Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

クローラモデルを修正する #14

Open
maopotcha opened this issue Apr 7, 2023 · 24 comments
Open

クローラモデルを修正する #14

maopotcha opened this issue Apr 7, 2023 · 24 comments
Assignees
Labels
優先度:高 優先度:高

Comments

@maopotcha
Copy link
Collaborator

@yosuke
以下の対応をお願いいたします。

概要

クローラ部に指令(/tracks/cmd_vel)を与えた時の挙動が実機と合わせ込みできるようにする

目的

  • 同じ指令(/tracks/cmd_vel)に対し、実機とシミュレータとで走行部の滑りの挙動が異なる
     (おそらく、実機よりもシミュレータの方が旋回動作時の地面に対する滑りが大きくなっている)

やること

  • 同じ指令(/tracks/cmd_vel)に対する挙動が実機と会うようにパラメータを調整する
  • 実機の平均値とシミュレーション結果とが合うようにしたい
  • 滑りを決定するパラメータをユーザ側で調整可能なようにGUIを設けてもよい

その他

@yosuke
Copy link
Contributor

yosuke commented Apr 28, 2023

Wheel Colliderを使うとForward FrictionとSideways Frictionを別個に設定できるので、特にクローラーの旋回滑りを調整する際に有効と思われる。
https://docs.unity3d.com/ja/2019.4/Manual/class-WheelCollider.html

@yosuke
Copy link
Contributor

yosuke commented May 26, 2023

各クローラーにWheel Colliderが設定してあるのだが、それと同時に元々のURDFで定義されているMeshColliderも有効になっているため、喧嘩してしまっていそう。
スクリーンショット 2023-05-26 15 21 47

@yosuke
Copy link
Contributor

yosuke commented Jul 28, 2023

WheelColliderを有効にするには、親オブジェクトがRigidBodyである必要がある。URDFからインポートしたモデルはRigidBodyではなく、ArticulationBodyになってしまうので、今は設定されているものの有効化されていない状態。有効化されると緑の輪が出るので確認できる。
スクリーンショット 2023-07-28 152029

@yosuke
Copy link
Contributor

yosuke commented Jul 28, 2023

RigidBodyのリンクを最上位に作成して、その下にWheelCollliderを作成して、その下に既存のArticulationBodyをぶら下げればよいとのこと。ややハッキング的な解決法だが試してみる。
https://forum.unity.com/threads/articulationbody-and-wheel-colliders.1395376/#post-8784814

@yosuke
Copy link
Contributor

yosuke commented Jul 28, 2023

上記階層を作ればWheelCollliderを有効化できることを確認。

自動で作成されるサスペンションが原因で跳ね回ってしまうためパラメータ調整中。

@yosuke
Copy link
Contributor

yosuke commented Aug 5, 2023

クローラの挙動を再現するためにwheel colliderを縦に複数並べるとうまく回転できなくなるが、sideways stiffnessを調整することできれいに回転可能になった。
詳しくは以下のレポジトリ参照
https://github.com/brihernandez/PhysicsTankExample

@yosuke
Copy link
Contributor

yosuke commented Aug 28, 2023

wheel colliderが使われている直上のrigid bodyにcollision shapeが設定されていないと車両が安定しない。
https://qiita.com/comocc/items/5cc8423acb8d748112d1

unityは慣性行列(inertia tensor)の計算にcollision shapeを使っているらしく、collision shapeを設定しないと慣性行列がかなり小さくなってしまう。
さらにwheel colliderは直上のrigid bodyの慣性行列しか考慮してくれない(下にarticulation bodyをぶら下げても大きな慣性として考慮してくれない)ため、こうなるようだ。

適切な慣性行列を設定しても良いのだが、とりあえずはcollision shapeを設定することで対処する。

@yosuke
Copy link
Contributor

yosuke commented Aug 28, 2023

zx120についてはwheel colliderを使う形に切り替え完了。シミュレーションが破綻するような大きな飛び跳ねはなくなったが、微小に飛び跳ねているらしく、時間を置くと少しづつ位置がズレていってしまう。
スクリーンショット 2023-08-28 161249

@yosuke
Copy link
Contributor

yosuke commented Aug 28, 2023

本体のrigid bodyの慣性行列を大きめに設定したところ微小な振動が抑制されて、安定してきれいに動くようになった。

wheel colliderを使った方が旋回がきれいにできるようだ。

wheel colliderは、車軸への出力がvelocityではなくeffortなので、PIDコントローラなどで制御する必要あり。

@yosuke
Copy link
Contributor

yosuke commented Sep 7, 2023

PIDコントローラが実装できたので、ブランチを作成してpush完了。
とりあえずzx120のみを変更した状態だが、ダンプトラックについても動きを確かめたいので、もう少し作業してからmainブランチにマージ予定。
https://github.com/pwri-opera/OperaSim-PhysX/tree/feature/fix_wheel_colllision

@yosuke
Copy link
Contributor

yosuke commented Oct 5, 2023

diff drive controllerの単位変換部分が間違っていそうだったので修正を実施。

c30rの両前輪が回らないで踏ん張ってしまう問題あり。

上記問題以外は大体直せた状態。

@maopotcha
Copy link
Collaborator Author

@yosuke
クローラの旋回時の滑りを、ユーザ側で調整できるようにしていただきたいのですが、そのような調整パラメータをGUI上に設けて、READMEに使い方を追記いただけないでしょうか。

@TaroABEJido
Copy link
Contributor

@yosuke @maopotcha @genkiiii @numata-1740
下記の件について ,実機に於いて地面の状況が変われば滑り具合も変わりうると思うので,私もユーザ側で調整できるようにした方が良いと感じています.
#14 (comment)

また,このパラメータについてどの程度の範囲の値がよいか実機で調べておいて,何かしらのデータとして公開するのも良いとも思っています.

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

@maopotcha @TaroABEJido
縦に複数の車輪が並んでいて、特に横滑りのパラメータについては車輪ごとに異なるものを設定している(旋回中心から遠いものほど横滑りしやすくしている)ので、その部分をもっと楽に設定できるようにできないか検討しています。
今のやり方だと、旋回速度がこれ以上「早くする」方向には調整できなさそうなのですが、調整したいのは路面状況に合わせて「遅くする」方向で良いでしょうか?
旋回を早くする調整が必要そうでしたらその方法も検討します。

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

@maopotcha @TaroABEJido
あと、滑りやすさは路面のマテリアルとの相互作用なので、クローラーの滑り調整というよりはTerrainの滑りを調整する形でも検討しています(そちらのほうがパラメーター一つで調整できて楽かもしれません)。

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

Terrainの滑り係数(Physics Material)を変化させてみたが動作は変わらなかった。
Wheel colliderはPhysics Materialの設定を無視するとのこと。
https://docs.unity3d.com/Manual/wheel-colliders-friction.html

@TaroABEJido
Copy link
Contributor

@maopotcha@numata-1740@yosuke
対応いただきありがとうございます.この件について遠藤さんとも相談してみます.

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

Diff Drive Controller上で、各車輪のForward FrictionとSideways Frictionを一括設定できるようにしてみたところ、こちらは良さそうな感じ。
c30rとic120ともに、Frictionを大きくしても軽い傾斜が登れない状態のため、PIDパラメータをもう少し調整した方が良い。

@TaroABEJido
Copy link
Contributor

@yosuke @maopotcha @numata-1740
遠藤さんに相談したところ,
実機の挙動が滑りにより変わらないのではということ,
より厳密にするのであれば別のやり方の方が良いのでは
ということでした.

そのため,一旦この件は保留で良いとのことでした.
取り急ぎ連絡です.

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

@TaroABEJido @maopotcha
とりあえず、ゆるい坂が登れない問題が発覚したので、そちらを直しています。
やや理論からは逸脱しますが、ForwardFrictionパラメータを「10」に設定するとクローラーが地面を掴んで踏ん張りが効くようになるようです。
あと車輪にクッション性を持たせると登るようになってくれそうなので、調整します。

@yosuke
Copy link
Contributor

yosuke commented Apr 18, 2024

Wheel Colliderのサスペンションのストロークは長めに設定した方が重機らしい動きになる(凹凸のある地面での踏ん張りも効くようになる)。残りの調整はまた後日。

@maopotcha maopotcha added this to the プレ大会仕様の完成 milestone May 1, 2024
@kasahara-san
Copy link

本日のSIP会議での内容です。

本日の発表でご覧いただいた動画ですが、現在のmainブランチ(commit id:a78843c)に上がっているもののunity上のパラメータを独自に変更したものでした。
具体的には6つある"wheel_collider"の全ての"sideway_friction"の"extremum slip"の値を大きく(1000程度)した際に動画の状態になったとのことです
後輩に作業をしてもらったのですが、一部私の認識に齟齬があり、摩擦係数を大きくした際にこのような動作をしたとの誤認識のまま倉爪先生に伝えてしまっていました。申し訳ありません
変更内容として動画ように大幅に滑る状態になるのは、その通りかと思います

maximum.slip.1.mp4

ただ、添付画像のように、ic120停止時に横滑りする現象はデフォルトのパラメータ設定でも確認をしており、こちらについてご対応いただけますと幸いです。
よろしくお願いいたします
Screenshot from 2024-07-03 12-58-18

@yosuke
Copy link
Contributor

yosuke commented Jul 3, 2024

@kasahara-san (@maopotcha)
情報ありがとうございます。wheel colliderは色々なパラメータが設定できる分、どのパラメータをどう調整するのが良いか、こちらでも手探りの状態で、知見を共有し合いながら進められれば幸いです。

後半の横滑りの問題は、ある程度長く時間が経過するとこうなる、のだと理解しています。
wheel colliderとそれに固定された車体が微小に振動しており、それが様々な不具合の原因になっていることが、最近わかってきています。プロジェクトの物理シミュレーション設定で、 Default Solver Iterations を現在の50から最大の255に変更すると振動がかなり収まることもわかってきています。
https://docs.unity3d.com/ja/560/Manual/class-PhysicsManager.html

mainブランチの設定も変更しておきたいと思いますが、取り急ぎ情報共有させていただきます。

@kasahara-san
Copy link

@yosuke さん
情報ありがとうございます
Default Solver Iterationsを255に変更したところ、停止時の横滑りがかなり収まりました
しばらくはこの設定で諸々の動作検証をしていこうと思います

@maopotcha maopotcha added the 優先度:高 優先度:高 label Jul 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
優先度:高 優先度:高
Projects
None yet
Development

No branches or pull requests

4 participants