Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

⑤ポジションを設定する(非推奨)

Last updated at Posted at 2019-08-24

トップページへ

#警告
この内容を行うことにより、以下の事態が引き起こされる可能性があります。
・ドローンが常にガタガタ揺れるようになる。修復はできず、アセットの入れ直しの時点から行わないとダメ。
・Unity上でのビルドによって.exeファイルとして出力するできなくなる。(ビルド時にコンパイルエラーが出る、恐らく対処法なし)

これらのことから、この作業を行う前に必ずプロジェクトを複製し、バックアップとして保存しておいてください。
何か問題が起きても、当方は一切の責任を負うことはできませんので、ご了承ください。

##この作業を行う必要性
ご存じの方も多いでしょうが、UnityにはRigidBodyというものが存在します。
RigidBodyは物体に物理特性を与える機能であり、簡潔に言えば「Unityの物理エンジンそのもの」です。通常はこの機能を利用して、あらゆる物理的動作をシミュレートします。

しかし、AirSimは「他の物理エンジンから移植されたもの」であるため、独自で物理的な計算を行っています。
そのため、RigidBodyはドローン本体には一切使うことができません。

無理に使用すると、AirSimの計算と見た目の位置が一致せず、ドローンの挙動が不安定になります。
このためAirSim on Unityではデフォルトで「実行時にRigidBodyの一部機能は強制的にOFFになる」ように設定されています。

ただし、どうしてもRigidBodyで利用可能な機能を利用したい場合もあります。
私の場合は「上下移動の固定」を行いました。目的の達成の為には、この作業は避けて通れませんでしたので…
他にも、「各方向に等速直線運動したい・ワープさせたい」などといったことができるようなります。

##作業内容
DataManager.csを書き換えます。
このファイルは、AirSim\Unity\UnityDemo\Assets\AirSimAssets\Scripts\Utilities上に存在します。

具体的には35~49行目を書き換えます。以下のように記述されている箇所です。

 public static void SetToUnity(AirSimVector src, ref Vector3 dst) {
     dst.Set(src.y, -src.z, src.x);
 }

 public static void SetToAirSim(Vector3 src, ref AirSimVector dst) {
     dst.Set(src.z, src.x, -src.y);
 }

 public static void SetToUnity(AirSimQuaternion src, ref Quaternion dst) {
     dst.Set(-src.y, src.z, -src.x, src.w);
 }

 public static void SetToAirSim(Quaternion src, ref AirSimQuaternion dst) {
     dst.Set(src.z, -src.x, -src.y, src.w);
 }

どうやらDataManager.csは、ドローンに関するデータの受け渡しの役割を担っているようです。
この受け渡している情報を任意の値に変更することで、理想の動作を実現させます。
(少々手荒な手法ですが…)

この4つの値を変更したときの挙動について、調査結果を以下の表に示します。

関数 効果
public static void SetToUnity(AirSimVector src, ref Vector3 dst) ドローンの位置を固定する。3軸で個別に設定可能。例えば、-src.zに30を設定すれば、高さが30で固定される。
public static void SetToAirSim(Vector3 src, ref AirSimVector dst) 絶対変更してはダメ。ドローンがガタガタ揺れるようになり、後で値を戻しても修正不可
public static void SetToUnity(AirSimQuaternion src, ref Quaternion dst) ドローンの動きを制限する。基本的にSetToUnityの方で代用できるが、src.zを0にすれば回転を制限できるのがメリット。
public static void SetToAirSim(Quaternion src, ref AirSimQuaternion dst) 効果不明。src.wを固定すると上下移動以外できなくなることを確認済み。使わない方が無難

前のページに戻る    <トップに戻る

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?