Skip to content

About

Ubuntu 24.04

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

概要

自律走行アルゴリズムの開発と検証のための、軽量で依存関係の少ない、CPP向けの2Dシミュレーター。 Dockerを活用して構築されており、VScodeのdevcontainerが使用できればそれ以外の環境構築を必要としません。ただし、ホストマシンでビルド成果物を直接実行することも可能になっています。 シミュレーターコア及びサンプルの自律走行スタックはCPPで記述されていますが、描画にはPython(matplotlib)を使用しています。 configファイルの編集によって、mapやロボットの形状・使用するアルゴリズムやそのパラメータを編集できるようになっており、実用的な簡易検証環境となることを期待しています。

※このシミュレーターはアルゴリズムの学習・検証を主な目的として作成されており、実機へのデプロイやROSとの統合は想定されておらず、実装に関してもデスクトップアプリケーションとしてのモジュール性と可読性、拡張性に重点が置かれています。

このシミュレーターで想定する問題設定

このシミュレーターでは静的な2D環境を想定しています。 地図がグリッドマップで与えられ、センサーとして抽象化されたオドメトリセンサーとLidarセンサーを用いることを想定します。 ロボットは1台で、スタートとゴールのみがワールド座標系で与えられ、ゴール到達判定はシミュレーターが行います。 ロボットが壁に衝突した場合は即座に失敗とみなし、シミュレーションを終了します。 経路生成・自己位置推定・経路追従の3つのアルゴリズムが実装されることを想定します。 経路生成はシミュレーション開始時に一度だけ行い、その後は経路追従アルゴリズムに委ねます。 オドメトリセンサーとLidarセンサーが異なる周期で値を返す状況を想定し、自己位置推定はこれら2つのセンサーによる入力を区別して受け取ります。センサーの周期はconfigで設定できます。 ロボットの形状はconfigである程度自由に定義できます。運動モデルに関しては事前に実装されたモデルをconfigで選択します。 オドメトリセンサー・Lidar・ロボットの制御コマンドに対する追従性に対してシンプルなノイズを付加します。この度合いはパラメータによって制御できます。

動作環境・バージョン

動作要件

  • dockerが使用できること

推奨要件

  • VScodeのdevcontainer拡張機能が使用できること
  • 実機またはWSLのUbuntu22.04

※動作確認は推奨要件の環境で行っています。devcontainerで開発を行う場合、VScodeのインテリセンスが動作することを確認しています。

前提条件

C++での開発経験がある読者を想定する

コンテンツ

導入方法

devcontainer使用の場合(推奨)

  1. このレポジトリからソースコードを入手する
  2. VScodeでcloneしたワークスペースを開く
  3. ワークスペースをdevcontainerで開く(例:リモートエクスプローラ->「開発コンテナー」を選択->新しい開発コンテナー(+)->コンテナーで現在のフォルダを開く) ※初回は時間がかかる
  4. ビルド:bash scripts/build_internal.sh
  5. 実行:./build/auto_drive_app ※ウィンドウが立ち上がり、自律走行のデモが実行されれば成功

ホストで実行する場合(追加の依存関係をインストールする必要があります)

  1. このレポジトリからソースコードを入手する
  2. 依存関係の入手:uv sync
  3. ビルド:bash scripts/build.sh
  4. 実行:./build/auto_drive_app ※コンテナ内で生成されるGCC 12でコンパイルされたバイナリを実行できる環境が必要です

使い方

メインとなるアプリケーションについて

auto_drive_app

scenario.tomlファイルに基づいて自律走行のシミュレーションを行います。 実行方法:./build/auto_drive_app 実行ログをauto_drive_app.logとして保存します。 終了時のスナップショットをauto_drive_app_result.pngとして保存します。

auto_drive_log_replay

replay.tomlに基づいて、auto_drive_appの結果をリプレイできます。 実行方法:./build/auto_drive_log_replay 終了時のスナップショットをauto_drive_log_replay_result.pngとして保存します。

configについて

configs/scenario.toml及びconfigs/replay.tomlが起点となるconfigで、メインのアプリケーションで参照されています。 実際にこれらのファイルにデフォルトで記載されている内容よりも遥かに多くの設定項目が必要ですが、記載が無い項目は内部でconfigs/defaults以下のconfigファイル群にフォールバックされます。 ユーザーは変更したい項目についてのみ記述することで、設定を反映できます。 具体的な設定項目やその意味については、デフォルトコンフィグのコメントを参照してください。

mapについて

シミュレーターが使用する地図はROS 2で使用されるパターンを参考に、yaml形式のメタファイルとpgm形式の実体で構成されますが、互換性の検証はしていません。 付属のmap_editor.pyを使用する(uv run tools/map_editor.py)ことで、mapを作成できます。これは、map_schema.yamlに記述されているマップの定義をリアルタイムでレンダリングし、任意のタイミングでこれを所定の形式にエクスポートできます。

基本的なディレクトリ構造について

src/以下に実装が置かれています。shared/以下には共通の部品や型定義が、features/以下には機能別の実装が置かれています。 control/:経路追従 localization/:自己位置推定 planning/:経路生成 simulation/:センサーや運動モデル、衝突判定 visualization/:描画系

※重要なポイントとして、本プロジェクトでは、シミュレーターとして統合されたオブジェクトやインタフェースは存在しません。ロボットの運動計算・衝突判定・センサーの再現・描画はそれぞれ完全に独立しており、メインアプリケーションが自己位置推定アルゴリズムの実行と併せてこれらを適切に呼び出す責務を負います。

サンプルとなるアルゴリズムの実装状況

経路追従:Pure Pursuit 自己位置推定:EKF 経路生成:A*

About

Ubuntu 24.04

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages