-
Notifications
You must be signed in to change notification settings - Fork 6
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
Unityの衝突検出をhakoniwa-px4sim側で受信して、物理側に反映させてみる #121
Comments
Unityの障害物検出 PDUをhakoniwa-px4sim側で読み込みできることを確認するUnity側hakoniwa-px4sim側
結果Unity側の送信データをhakoniwa-px4sim側で受信できていることを確認した。 Unityのシミュレーションは20msec周期で動作する。 よって、衝突検出したら、collisionフラグをfalseにして書き込みするようにした。 |
障害物検出時に、直接、速度方向を変更して跳ね返り現象が観測できるか確認するY軸方向に直進させて、以下のコードで跳ね返りさせてみた。
実験結果跳ね返った! 2024-01-08.9.00.09.movログ:
その他Unityのコライダーを中心のところに小さい球を置いているだけなので、見た目、めり込んでしまうのがやっぱり気になる。。 最後の手直しの時に直そう。 |
velocity_after_contact_with_wall()関数を利用して、跳ね返りの速度計算して自然な動きになるか確認するやってみた。
|
良い感じなので、正式実装に移ります。 |
お!できたの? |
はい、できました! 地面との衝突の方はうまくできてないですが、真正面からぶつかって、ちょっと下がるのはうまく行きました。 |
こんな感じで動きました。 2024-01-08.10.06.54.mov |
壁側が動かない(質量無限大)想定で作ったので、動きが思ってたのとちがうなあ。ドローン側は速度リセットしてる?それとも力でやってる? |
自分も違和感あったので、色々見直し中です。
ちなみに、修正コードはこちら。
|
Unityのコライダーの配置を変えた |
色々ぶつけてみた2024-01-08.11.16.33.mov |
ちょっと話がややこしそうなので,また話しましょう. |
壁側は Unity の物理が計算してくれているの? |
はい、unityが勝手にやってくれてます |
不思議....本格的に運動量保存で計算するとすると,相手側の質量が必要なはずなのに,Unity で相手側の質量わかるのかな?壁の倒れるの見ると,トルク(角運動量変化)も計算しているみたいですね.こちらも Unity で計算させる手もありますね(同じ Unity 内の物理ポリシーで動かした方が違和感がでない). |
情報の整理Unityの衝突情報を整理します。 Unityドローンのコライダー配置とサイズUnity側のサイズとhakoniwa-px4sim側の機体のサイズを合わせました。 コライダー設計上図の球形コライダー(衝突検出オブジェクト)で、他オブジェクトとの接触検出をします。 ちなみに、1個の球形コライダーにすると全体を覆う半径が0.13mになり、地上と接触してしまうので採用できませんでした。 Unityのコライダーによる衝突検出情報Unityの OnCollisionEnter()を使うと、コライダーが接触検出すると、接触位置を地上座標系での絶対位置が取得できます。 この値をベースに、velocity_after_contact_with_wall()を使って、速度の計算をします(col_vel)。
計算した値を、そのまま機体の速度に設定します。
あとは、通常の積分をします。 |
対応できたので、クローズします。 |
目的・背景
現状のhakoniwa-px4simでは、障害物に衝突してもすり抜けてしまう。
これは、Unity側の衝突検出を hakoniwa-px4sim側で受信できていないためです。
これを打開すべく、Unity側で障害物検出を箱庭のPDUデータとして書き込みできるようにしました。
これにより、hakoniwa-px4sim側で、衝突検出情報を元にして、物理側へフィードバックさせることができます。
よって、本 issue では、障害物と衝突して、ドローンが跳ね返る機能を実現します。
作業項目
The text was updated successfully, but these errors were encountered: