💁‍♂️

車載開発:運転訓練アプリを作ってみた

に公開

概要

車載向けの運転訓練アプリを作ってみました。
グラスから水が零れないように運転しよう!ってやつです。

https://youtube.com/shorts/3xTGJnZngf0?si=eAN5_RK-xJUUpQDy

言いたいのは、ArduinoとUnityで簡単に車載連携できますよ!ってことです笑


システム構成図


簡単に言うと、車両のCANからGセンサ情報をArduinoでスニファして、Unityで物理シミュレーションしてます。


構成技術

  • ハードウェア

  • 通信方式

  • ソフトウェア

    • Unity(Input処理、車両挙動シミュレーション、データ記録)
      液体のアクティブな物理シミュレーションは結構ハードルがあるようで、Zibra Liquidを買いました笑

unityは昔ちらほら触ってたのでそこまで苦労はなかったです。
Zibra Liquidもさすがに高いだけあって笑、かなり直感的にできますね。物理シミュ関係はほぼ全部インスペクタ上で完結してます。これもどこかで書きたいです。

車載情報⇒Unityへの物理値変換も実質ここくらいです。

    // Update is called once per frame
    void FixedUpdate()
    {
        if (toggle.isOn){
            if(im.Button_R){
                Vector3 __torque = new Vector3(0, im.mouseAcceleration.x * torque_facter, 0);
                rb.AddRelativeTorque  (__torque, ForceMode.Acceleration);            // 力を加える
            }
            else{
                Vector3 force = im.mouseAcceleration * force_facter;    // 力を設定
                force = Vector3.ClampMagnitude(force, maxForceMagnitude);
                rb.AddRelativeForce  (force, ForceMode.Acceleration);            // 力を加える
            }
        }
        else{
            Vector3 force = im.mouseAcceleration * force_facter;    // 力を設定
            force = Vector3.ClampMagnitude(force, maxForceMagnitude);
            rb.AddRelativeForce  (force, ForceMode.Acceleration);            // 力を加える
            Vector3 __torque = new Vector3(0, im.Yawrate * torque_facter, 0);
            rb.AddRelativeTorque  (__torque, ForceMode.Acceleration);            // 力を加える
            float F = Mass * (linearAcc.z - 9.8f);
        }
    }

まとめ

Unityを使えばGUI系のPoC(Proof of Concept)も簡単に作れるため、車載分野でもサッと試作して実機に組み込む前の検証がしやすいです。
とりあえず動くものを用意して議論したいときにも便利なので、個人開発・社内検証の両方におすすめです。

個人:nnnwa4create@gmail.com

Discussion