ApolloとCarSim/TruckSimの共同シミュレーション

ApolloとCarSim/TruckSimの共同シミュレーション

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転載したものです。転載については出典元にお問い合わせください。

1. 背景

シミュレーションは自動運転の研究開発において重要な役割を果たしており、研究開発の効率を大幅に向上させ、アルゴリズムの信頼性を保証することができます。 Baidu Apollo システムは、自動運転を学びたい人に適した優れたオープンソース プラットフォームです。 Carsim/Trucksim は、古典的な車両ダイナミクスシミュレーション ツールです。

本日は、Apollo と Trucksim を組み合わせてローカル リアルタイム シミュレーションを実現する方法についてご紹介したいと思います。このドキュメントは、シミュレーション プラットフォームを構築し、アポロ システムを学習する初心者に適しています。

2. 建築設計

Apollo プロジェクトのコア コードは C++ で実装されています。Trucksim でよく使用されるインターフェイスは、simulink、python、C です。この記事では、まず、Apollo、simulink、Trucksim の共同シミュレーションのアーキテクチャと、このシミュレーションの欠点について説明します。 Apollo と Trucksim の共同シミュレーションについてお話しましょう。

2.1 Apollo、Simulink、Trucksimソリューション

Simulink と Apollo は ROS を介して通信できます。Apollo のメッセージ データ形式は protobuf であり、Simulink の ROS ツールは標準の ROS msg のみをサポートしているため、Apollo に形式変換ノードを追加できます。 Simulink を使用して Trucksim を呼び出す方法についてはオンライン リソースが多数あるため、詳細には触れません。

Simulink ソリューション図

2.2 Apollo、rosbridge、Trucksimソリューション

QT プロジェクトを作成し、Websocket を介して Apollo プロジェクトと通信します。Apollo プロジェクトに rosbridge を追加して (Apollo 5.0 以降のバージョンでは cyber_bridge を使用)、ros メッセージ (または cyber メッセージ) と Websocket 間の変換を実現します。 QT プロジェクトは、Websocket クライアントの役割を果たします。 QT は C++ で実装されており、Trucksim の動的ライブラリを呼び出して、Trucksim をリアルタイムで実行する機能を実現します。

ロズブリッジ解図

3. 機能実装

3.1 Apollo、Simulink、Trucksimソリューション

3.1.1 Simulinkの設定

Simulink ツールキットには ROS サポート パッケージが含まれています。ROS ネットワーク アドレスの構成を図 2 に示します。ホスト名/IP アドレスとポートは、それぞれ ROS_MASTER_URI のアドレスとポート番号であり、上記の通信メカニズムで説明されています。

ROSネットワークアドレスを設定する

ROS サブスクライバーはインターフェースからメッセージを受信するため、トピック、メッセージ タイプ、サンプル時間はインターフェース内のプログラムに対応している必要があります。

ROS サブスクリプションの設定

デバッグと検証を容易にするために、MATLAB 側で ROS が起動されるようになりました。設定プロセスは次のとおりです。

MATLAB セットアップ手順:

 >> setenv('ROS_MASTER_URI','http://192.168.103.122:11311') >> setenv('ROS_IP','192.168.103.198') >> rosinit('192.168.103.122')

3.1.2 トラックシムの設定

設定インターフェース

Trucksim はウィザードベースのプログラミング プログラムです。パラメータ構成インターフェイス: トラックの場合は 5A Tractor (SS_SSS) を選択します。具体的なパラメータについては、図 3 を参照してください。制御インターフェイス: モデルの場合は simulink を選択します。

メインインターフェース

入力パラメータ設定インターフェース

出力パラメータ設定インターフェース

3.2 Apollo、rosbridge、Trucksimソリューション

3.2.1 apollo での rosbridge の設定

rosbridge のインストールに関するオンライン チュートリアルは多数あるため、この記事では詳細には触れません。

使い方は次のとおりです:

ros_pkgs_ws をCDに追加

キャットキンメイク

rosbridgeを開始

ソース /apollo/ros_pkgs_ws/devel/setup.bash

PATH=/usr/local/miniconda2/bin:$PATH

roslaunch rosbridge_server rosbridge_websocket.launch

3.2.1 Qtプロジェクトの設定手順

3.2.1.1 Qt と CMake のバージョン情報

3.2.1.3 アポロ計画とQT計画のインターフェース定義

/アポロ/トラックシム/ポーズ

{"op":"publish", "topic":"/apollo/tucksim/pose", "msg": { "header": {"timestamp_sec":1572253610.76292, "sequence_num":77}, "trucksimpose": {"XCG_TM":30.9964522249, // 单位:m "YCG_TM":0.657853758823, // 单位:m "ZCG_TM":1.00644079555, // 单位:m "YAW":-0.015505948987, // 单位:rad "VX":7.81497285565, // 单位:m/s "STEER_SW":2.84450684087, // 单位:rad "AV_Y":0.133153549217, // 单位:rad/s "GEARSTAT":5.0, // 无单位"XCG_TM2":22.5890979801, // 单位:m "YCG_TM2":-0.471483304991, // 单位:m "ZCG_TM2":2.08466406388, // 单位:m "YAW_2":-0.0253130178796, // 单位:rad "VY":0.326368169782, // 单位:m/s "DISTANCE":31.0034324244, // 单位:m "DELTA_YAW":-0.015505948987, // 单位:rad "DISTANCE_2":22.5940178822, // 单位:m "DELTA_YAW_2":-0.0253130178796 // 单位:rad/s } } }

4. ユーザーエクスペリエンス

  1. TruckSim モデルの離散時間補正は 0.001 秒に設定され、つまりモデル更新頻度は 1000 Hz となり、ステップごとに 2 回の更新を行う積分方法 (AM-2、RK-2 など) が選択されます。

注:
1) 実車は高次の非線形連続システムです。TruckSim は、固定時間ステップ離散化システムを通じて実車をシミュレートします。モデルのステップ サイズが大きい場合 (事前に設定した 0.01 秒など)、モデルの精度は低下します。TruckSim モデルは、サスペンション システム、パワー システム、ステアリング システム、ブレーキ システム、タイヤ モデル、空力などのシステムで構成される複雑なシステムです。これらのシステムの 1 つ以上が大きな時間ステップのために不正確になると、車両の揺れがより顕著になります。

2) モデルの更新頻度は、TruckSim 公式サイトで推奨されている 1000hz に設定されています。この頻度で車両の揺れの問題を解決できることが実証されています。

  1. インターフェイス スレッドの読み込み頻度はタイマーによって制御されます。simfile.sim、ライセンス、および DLL の読み込みと呼び出しの頻度は 1000hz に設定されており、これは Trucksim モデルの離散ステップ長と一致しています。

注:
3 つの積分方法の影響を受け、ステップごとに 2 回の更新を行う積分方法を選択した場合、VS_EXT_EQ_IN と VS_EXT_EQ_OUT の更新頻度は読み込み頻度の 2 倍、つまり 2000hz になります。

オリジナルリンク: https://mp.weixin.qq.com/s/8QNp5iQebE3lPJzEgq_bOA

<<:  未来を受け入れる: 2024 年のホームオートメーションの 5 つのトレンド

>>:  まだ NeRF に取り組んでいますか?リアルタイムレンダリングでリアルな自動運転データを生成!ストリートガウス:すべての SOTA を超えよう!

ブログ    
ブログ    

推薦する

ディープラーニングの「ディープ」とはどういう意味ですか?

ディープラーニングの「深さ」については、ここ数年で多くの議論がなされてきました。私の周りではさまざま...

...

Python の顔認識の優れた教育例、顔認識システムを構築するための 40 行のコード!

[[229034]] Face Id は、高性能な顔認証ソフトウェアです。公式の主張は、「100 ...

あなたを偲んで!孫建博士が早朝に逝去されました。AIは偉大な人物を失い、Megviiは技術リーダーを失いました。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

2020 年に最も注目される人工知能 (AI) アプリケーション トップ 10

人工知能または機械知能は、学習アルゴリズムを通じて人間のような知能をシミュレートします。今日、人工知...

一枚の写真で「踊り続ける」ことができ、SHERFは人間の神経放射場を駆動できる新しい方法を一般化することができます

人体神経放射線分野の目標は、2D 人体画像から高品質の 3D デジタル人間を復元して駆動し、それによ...

Photoshop の新しい AI 機能により、数回クリックするだけで空を置き換えることができます

海外メディアの報道によると、 AdobeはPhotoshopにAIを搭載した空の置き換えツールを追加...

ビジネスインテリジェンスの歴史と発展についてお話ししましょう

1865 年に、リチャード・ミラー・デベンスは著書『A Complete Collection of...

HKU などが GraphGPT をリリース: パラメータを 1/50 に微調整し、精度を 10 倍向上! LLMは長いトークンなしでグラフ構造を理解できる

グラフニューラルネットワークは、グラフ構造のデータを分析および学習するための強力なフレームワークとな...

...

GPUパフォーマンスを最大化

AI プロジェクトを高速化するためのデフォルトのアプローチは、GPU クラスターのサイズを増やすこと...

Nature: AI はなぜいつも差別的なのか?

[[241142]]ビッグデータダイジェスト制作編集者: Hu Jia、Wang Yiding、X...

人工知能は今や人間の感情を認識できるほど賢くなった

AIに「感情」を与える時が来たのかもしれない[[236486]]今後のビジネスモデルはますます「感情...