💁♂️
車載開発:運転訓練アプリを作ってみた
概要
車載向けの運転訓練アプリを作ってみました。
グラスから水が零れないように運転しよう!ってやつです。
言いたいのは、ArduinoとUnityで簡単に車載連携できますよ!ってことです笑
システム構成図

簡単に言うと、車両のCANからGセンサ情報をArduinoでスニファして、Unityで物理シミュレーションしてます。
構成技術
-
ハードウェア:
- Arduino Uno
- MCP2515
詳細はこちらを
-
通信方式:
- Arduino ↔ Unity:USBシリアル通信
こちらの方の記事に詳細があります。
https://qiita.com/Ninagawa123/items/f6595dcf788dd316be8a
- Arduino ↔ Unity:USBシリアル通信
-
ソフトウェア:
- Unity(Input処理、車両挙動シミュレーション、データ記録)
液体のアクティブな物理シミュレーションは結構ハードルがあるようで、Zibra Liquidを買いました笑
- Unity(Input処理、車両挙動シミュレーション、データ記録)
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)も簡単に作れるため、車載分野でもサッと試作して実機に組み込む前の検証がしやすいです。
とりあえず動くものを用意して議論したいときにも便利なので、個人開発・社内検証の両方におすすめです。
Discussion