![]()
近年、物流・倉庫・屋内外移動ロボット(AMR: Autonomous Mobile Robot)用途において、「安定した自律走行ソフトウェア」と「豊富なセンサーを備えたロボットプラットフォーム」の両方を備え、迅速にインテグレーションできる環境を整えることが、開発/展開の鍵となっています。本記事では、自動運転用オープンソースソフトウェアAutowareの軽量版であるAutoware Coreと、ハードウェア・センサー・計算機プラットフォームを備えたNova Carterを「インテグレーション」して使うための手順を解説します。
背景
過去にAutowareとNova Carterとのインテグレーションを実施し、その成果を「Isaac PerceptorとAutowareを組み合わせたNova Carterの自動運転」としてNVIDIA GTC 2025で弊社近藤が発表しました。
本インテグレーションの過程で行ったNova CarterのチュートリアルはIsaac Sim上で動作します。チュートリアルでは以下のようなNVIDIA Isaac ROSの主要機能を試せます。
- Navigation:自律的な移動と経路計画
- DNN Inference:深層学習ベースの推論。たとえば、セグメンテーション、物体認識、ポーズ推定、深度画像推定などのNVIDIA TritonやTensorRTを用いたアクセラレーション・軽量化が可能
- Visual SLAM:1つ以上のステレオカメラとIMUから自己位置推定が行えるだけでなく、キーポイント点群を用いてnavigation用の地図作成も可能
- Nvblox:Sparseな点群を用いるVisual SLAMに対し、三次元的に再構成された地図を作成可能。navigation用のコストマップとしても利用可能。セマンティックセグメンテーションも備えており、地図から検知オブジェクトの除去が可能
チュートリアルは以下のドキュメントからアクセス可能です。 https://docs.isaacsim.omniverse.nvidia.com/5.1.0/assets/nova_carter_landing_page.html
これらNova Carterの機能とIsaac ROSとの連携をAutowareでも実現できないかと考え、まずは標準のAutowareでのインテグレーションを行いました。その後、より軽量なAutowareであるAutoware Coreを用いて同様のインテグレーションを実施しました。
Nova CarterをAutoware Coreで走行させる様子
Autoware Coreの概要
Autoware Coreは、複数あるAutowareの種類のうち「品質を意識したROS 2パッケージ群を備えた基盤ソフトウェアスタック」です。
従来のAutoware.AIやAutoware.Autoと比べて、以下のような特徴があります。
- 品質を上げるための取り組み(PRレビュー/CIビルド/テストカバレッジ)を備えています
- 「Core」と「Universe」という2層構造を持ち、Coreは安定性重視、Universeはより実験的・拡張的なパッケージ群として設計されています
- 軽量・扱いやすさという観点では、例えば従来の大規模自動車向けのスタックから、技術検証/ロボット用途に向けて「必要最小限」を意識しており、カスタマイズ/実装が行いやすいです
このように、Autoware Coreは「実装検証/開発用途」から「展開用途」まで広く使える基盤として魅力的です。
Autoware Coreノード図
Nova Carterの概要
Nova Carterは、Segway RoboticsとNVIDIAによる協業で生まれた自律移動ロボットプラットフォームです。
主な特徴を以下にまとめます。
- 車体プラットフォームとしてSegwayのRMP Lite/移動機構を採用しています
- 計算機プラットフォームとしてNVIDIA Jetson AGX Orinを搭載、64 GBメモリ/2 TB SSD/10GbE PCIeなど強力な仕様です
- センサー構成が非常に豊富で、4つのステレオカメラ(Hawk)、4つの魚眼カメラ(Owl)、2つの2D LiDAR、1つの3D LiDAR等を備えています
- ロボット開発プラットフォームとして「すぐ使える」状態で、ROS 2対応・開発者向けに設計されており、屋内/屋外混在環境、倉庫・物流など幅広い用途を想定しています
このように、Nova Carterはハード/センサー/計算リソースが揃った「ロボット基盤」であり、Autoware Coreと組み合わせることで、自律移動ロボットシステムを比較的短期間で構築可能です。
インテグレーションのメリット
Autoware CoreとNova Carterを組み合わせる最大のメリットは、「自動運転ソフトウェア」と「豊富なセンサーと計算リソースを備えたロボットハードウェア」を最小限のセットアップで連携できる点にあります。具体的には以下のとおりです。
ロボットプラットフォームの「即戦力化」
Nova Carterはすでに多種多様なセンサーとJetson AGX Orinを備えており、これをAutoware Coreの標準的なSensing / Localization / Planning / Controlパイプラインに接続するだけで、自律走行システムとしての基本構造が完成します。
Autoware Coreの軽量性・扱いやすさ
Autoware CoreはAutoware Universeなどに比べて構成がシンプルで、
- 依存関係が少ない
- パッケージ構成が明確
- Launch構成の管理が楽
という利点があり、ロボット用途でも扱いやすい点が大きな魅力です。
多様なユースケース展開
Autoware Coreの柔軟性とNova Carterの屋内外対応性能の組み合わせにより、以下のようなユースケースに適用しやすくなります。
- 倉庫内の物流ロボット
- 屋内外巡回ロボット
- 研究用モビリティプラットフォーム
- 地図作成(SLAM/Mapping)ロボット
使用するリポジトリと環境構築手順
本記事で扱うインテグレーションでは以下のリポジトリを用います。https://github.com/tier4/autoware_nova_carter/tree/autoware_core
READMEに記載された内容をもとに、記事向けにわかりやすい表現で整理します。
事前準備(地図の作成)
実際にNova CarterとAutoware Coreとのインテグレーションを実施するには地図の作成が必要です。地図はAutoware documentationのCreating mapsを参考に作成でき、pointcloud mapとvector mapを用意する必要があります。
小型移動ロボット向けにvector mapを作成する場合、自動車のように車道の白線に沿ったレーンを作成する手法が取れないため、手動走行させた軌跡の通りにレーンを作成することができるbag2laneletが有用です。また、vector mapはVector Map Builderによって作成・編集が可能です。
前提環境
以下の環境を前提としています。
- Ubuntu 22.04
- ROS 2 Humble
- NVIDIA Jetson AGX Orin(Nova Carter搭載)
- CUDA, TensorRT, NVIDIA Driver
- Docker, nvidia-container-toolkit
リポジトリのクローン
$ git clone -b autoware_core \ https://github.com/tier4/autoware_nova_carter.git $ cd autoware_nova_carter
Dockerイメージのビルド
Autoware Core環境はDockerで管理できるため、環境構築が容易になります。
# For nova_carter $ docker build -t autoware_nova_carter -f ./docker/Dockerfile.nova_carter .
# For autoware_core $ docker build -t autoware_core -f ./docker/Dockerfile.autoware_core .
ビルドには一定時間がかかります。途中で依存パッケージを取得するため、インターネット接続が必要です。
Nova Carterの起動
Terminal 1(Sensor群を起動)
$ ./docker_sensing_vehicle.sh
(コンテナ内のターミナルに入ります)
# source /autoware_nova_carter/install/setup.bash # ros2 launch autoware_nova_carter_sensing_launch sensing.launch.xml
Terminal 2(Vehicle module群を起動)
$ docker exec -it vehicle_sensing /bin/bash
(コンテナ内のターミナルに入ります)
# ros2 launch autoware_nova_carter_vehicle vehicle.launch.xml
起動後に下記のトピックを確認することで、Sensor群とVehicle Module群が動作していることを確認できます。
Sensors
# Lidar $ ros2 topic echo /sensing/lidar/top/pointcloud_raw
# IMU $ ros2 topic echo /sensing/imu/imu_data
# Velocity Reports $ ros2 topic echo /vehicle/status/velocity_status
Vehicle
# Vehicle Velocity $ ros2 topic echo /vehicle/status/velocity_status
# Virtual Steering Angle calculated from angular velocity $ ros2 topic echo /vehicle/status/steering_status
Autoware Coreの起動
後述のコマンドで起動します。map_path:=PATH_TO_MAPにはpointcloud map(pointcloud_map.pcd)とvector map(lanelet2_map.osm)が格納されたフォルダパスを設定してください。フォルダへのパス名を「PATH_TO_MAP」とする場合、$HOME/autoware_map下に配置し、
$HOME/autoware_map/PATH_TO_MAP ├── lanelet2_map.osm └── pointcloud_map.pcd
となるように必要なファイルをデプロイしてください。
それでは、いよいよAutoware CoreでNova Carterを走行させます。
$ ./docker_run_autoware.sh
(コンテナ内のターミナルに入ります)
# source install/setup.bash # source /opt/autoware/setup.bash # ros2 launch \ autoware_core \ autoware_core.launch.xml \ map_path:=/autoware_map/PATH_TO_MAP \ vehicle_model:=autoware_nova_carter \ sensor_model:=sample_sensor_kit \ data_path:=/autoware_data \ launch_vehicle:=false
起動後、RVIZの画面からゴールを指定すると走行を開始します。

以下のトピック受信を端末から確認することで、システムが正常に動いていることを確認することができます。
Localization
# Fused velocity information from vehicle status report and IMU ros2 topic echo /localization/twist_estimator/twist_with_covariance
# Pose Estimation from NDT Scan Matcher $ ros2 topic echo /localization/pose_estimator/pose_with_covariance
# Final localization output after fusing NDT Scan Matcher pose and vehicle velocity $ ros2 topic echo /localization/kinematic_state
Planning
# Planned Trajectory $ ros2 topic echo /planning/trajectory
Control
# Control command output to vehicle $ ros2 topic echo /control/command/control_cmd
関係するトピックが問題なく流れていればシステム全体が正常に機能しています。
システムの概要
この章では、Autoware CoreとNova Carterをつなぐために追加で実装した箇所について説明します。やりとりの概要図を以下に示します。

Autoware Coreへの入力
本記事公開時点のAutoware Coreへのセンサー入力は以下の通りです。
- GNSS(任意)
- LiDAR
- IMU
- 車体から得られる速度・舵角
今回はNova Carterに搭載されているLiDAR、IMU、そして車両インターフェース(指令加速・舵角値、期待車速・舵角を車両に送信し、車両から現在の速度・舵角を取得する役割を担うインターフェース)を用いてAutoware Coreとインテグレーションしています。
センサー群の起動
Nova Carterに搭載されているセンサー群はこちらのlaunchファイルで起動します。
autoware_nova_carter_sensing/launch/sensing.launch.xml
<?xml version="1.0" encoding="UTF-8"?> <launch>
<!-- launch sensors from nova_carter_bringup except for hesai --> <arg name="mode" default="real_world" description="Operating mode" /> <arg name="rosbag" default="None" description="Rosbag file" /> <arg name="enabled_stereo_cameras" default="front_stereo_camera,left_stereo_camera,right_stereo_camera" description="Enabled stereo cameras" /> <arg name="enabled_fisheye_cameras" default="front_fisheye_camera" description="Enabled fisheye cameras" /> <arg name="enabled_2d_lidars" default="front_2d_lidar,back_2d_lidar" description="Enabled 2D lidars" /> <arg name="enable_3d_lidar" default="false" description="Enable 3D lidar" /> <arg name="type_negotiation_duration_s" default="5" description="Type negotiation duration in seconds" />
<include file="$(find-pkg-share isaac_ros_perceptor_bringup)/launch/drivers/nova_sensor_abstraction_layer.launch.py"> <arg name="mode" value="real_world" /> <arg name="rosbag" value="None" /> <arg name="enabled_stereo_cameras" value="front_stereo_camera,left_stereo_camera,right_stereo_camera" /> <arg name="enabled_fisheye_cameras" value="front_fisheye_camera" /> <arg name="enabled_2d_lidars" value="front_2d_lidar,back_2d_lidar" /> <arg name="enable_3d_lidar" value="false" /> <arg name="type_negotiation_duration_s" value="5" /> </include>
<!-- hesai --> <arg name="launch_hw" default="true" description="Whether to connect to a real sensor (true) or to accept packet messages (false)."> <choice value="true" /> <choice value="false" /> </arg> <arg name="config_file" default="$(find-pkg-share autoware_nova_carter_sensing)/config/PandarXT32.param.yaml"/>
<node pkg="nebula_ros" exec="hesai_ros_wrapper_node" name="hesai_ros_wrapper_node" output="screen"> <param from="$(var config_file)" allow_substs="true"/> <param name="launch_hw" value="$(var launch_hw)"/> <param name="frame_id" value="front_3d_lidar"/> <remap from="pandar_points" to="/sensing/lidar/top/pointcloud_raw"/> </node>
</launch>
メインのセンサー群の起動はNova Carterが提供しているnova_sensor_abstraction_layer.launch.pyから行います。2D LiDARやカメラはAutoware Coreでは現在利用していませんが、ログの取得や今後の活用を考慮して一緒に起動するよう引数を設定しています。また、3D LiDARについてはNova Carterで利用している標準のドライバーは引数の設定でオフにしており、別途Autoware向けに追加情報を付与して点群を出力するために、Autowareコミュニティで開発されているnebulaパッケージのドライバーで起動しています。
また、Autoware Coreが解釈できるように以下のようなトピック名の翻訳を行なっています。
<remap from="pandar_points" to="/sensing/lidar/top/pointcloud_raw"/>
車両本体の起動
Nova Carterの車体本体はこちらのlaunchファイルで起動します。
<?xml version="1.0" encoding="UTF-8"?> <launch> <arg name="initial_engage_state" default="false" description="/vehicle/engage state after starting Autoware"/> <arg name="launch_vehicle_interface" default="true"/>
<!-- vehicle description --> <include file="$(find-pkg-share nova_carter_description)/launch/nova_carter_description.launch.py"/>
<!-- vehicle interface --> <group if="$(var launch_vehicle_interface)"> <node pkg="autoware_nova_carter_interface" exec="autoware_nova_carter_interface_node" name="nova_carter_interface" output="screen"> <param from="$(find-pkg-share autoware_nova_carter_interface)/config/nova_carter_interface.param.yaml" /> <remap from="odom" to="nova_carter/odom"/> <remap from="vehicle_velocity_report" to="/vehicle/status/velocity_status"/> <remap from="steering_status_report" to="/vehicle/status/steering_status"/> <remap from="control_mode_report" to="/vehicle/status/control_mode"/> <remap from="control_mode_request" to="/control/control_mode_request"/> <remap from="control_cmd" to="/control/command/control_cmd"/> </node>
<include file="$(find-pkg-share nova_carter_bringup)/launch/include/segway_include.launch.py"> <arg name="enable_wheel_odometry" value="false"/> <arg name="namespace" value="nova_carter"/> </include>
<node pkg="topic_tools" exec="relay" name="imu_topic_relay" output="log"> <param name="input_topic" value="/nova_carter/imu"/> <param name="output_topic" value="/sensing/imu/imu_data"/> <param name="type" value="sensor_msgs/msg/Imu"/> <param name="reliability" value="best_effort"/> </node>
<node pkg="tf2_ros" exec="static_transform_publisher" name="imu_tf" args="0 0 0 0 0 0 base_link segway_imu" output="log"/>
<include file="$(find-pkg-share isaac_ros_perceptor_bringup)/launch/algorithms/twist_mux.launch.py"> </include>
</group> </launch>
こちらでも、車両のメインのドライバーはNova Carterが提供しているnova_carter_bringupパッケージのsegway_include.launch.pyをそのまま起動しています。
ただし、nova_carter_bringupが出力する車速情報や受け付ける制御信号はAutowareのインタフェースとは異なるため、その橋渡しをするアダプターとして、autoware_nova_carter_interfaceも起動しています。Nova Carterは移動ロボットとして車速と角速度で制御する一方、Autowareは一般車両を制御することを想定しているので、車速と操舵角で制御を行っています。autoware_nova_carter_interfaceでは、Nova Carterが出力しているロボットの車速や回転角速度から、車速と仮想的な操舵角の情報に分解することでAutowareが期待する車両の制御情報への変換を行っています。

またセンサー群と同様に、Autoware Coreが解釈できるように以下のようなトピック名の翻訳を行なっています。
<remap from="vehicle_velocity_report" to="/vehicle/status/velocity_status"/> <remap from="steering_status_report" to="/vehicle/status/steering_status"/> <remap from="control_mode_report" to="/vehicle/status/control_mode"/> <remap from="control_mode_request" to="/control/control_mode_request"/> <remap from="control_cmd" to="/control/command/control_cmd"/>
.......
<param name="output_topic" value="/sensing/imu/imu_data"/> <param name="type" value="sensor_msgs/msg/Imu"/>
.......
Autoware Coreの起動
こちらのlaunchファイルで起動しています。トピック名の翻訳など、ここでは特に行う変更はありません。
autoware_core/autoware_core/launch/autoware_core.launch.xml
まとめ
本記事では、高性能なセンサーと計算リソースを統合したロボットプラットフォームであるNova Carterと、軽量な自動運転ソフトウェアスタックであるAutoware Coreのインテグレーション手順を解説しました。Nova Carterが提供する堅牢なハードウェア基盤と、Autoware Coreのシンプルで扱いやすいソフトウェア構成を組み合わせることで、屋内・屋外の多様な環境に対応可能な自律移動ロボットシステムを、迅速に構築・展開できます。まとめますと、
- Autoware Coreは軽量で扱いやすく、ロボット用途に適している
- Nova Carterはオールインワンなロボット開発プラットフォーム
- もともとのNova Carterの高い機能性に加え、Autoware Coreのインテグレーションのしやすさによって容易にインテグレーションを行えた
になります。ここまで読んでくださり、ありがとうございました。
謝辞
本ブログで紹介したインテグレーションにあたり、エヌビディア合同会社様のご厚意でNova Carterをレンタルさせていただきました。ご協力くださったエヌビディア合同会社様に心より感謝申し上げます。
執筆者プロフィール
満留 諒介 | Autowareエンジニアリング部
2018年、ティアフォーに入社。Autowareエンジニアリング部部長として、Autowareの開発や品質向上に従事。2021年からはAutowareの管理団体であるThe Autoware FoundationのTechnical Steering Committeeの議長も担当し、Autowareのコードメンテナンスに加え、ワーキンググループの組織化や、Autowareの開発ロードマップの整理等、コミュニティ運営やプロジェクトのサポートに携わっている。
佐々木 淳弥 | Autowareエンジニアリング部
2024年、ティアフォーに入社。Autowareエンジニアリング部でソフトウェアエンジニアを担当。大学の学部時代は工学を専攻し、大学院時代に素粒子物理学(実験)を専攻。修士(理学)。博士課程満期退学後、映像解析プラットフォームを開発するベンチャー企業でソフトウェア開発から映像解析プラットフォームの保守・運用を行いつつ、映像解析技術を学ぶ。その後、ティアフォーに入社。
ティアフォーでは、「自動運転の民主化」というビジョンに共感を持ち、自らそれを実現する意欲に満ち溢れた新しい仲間を募集しています。
多くの職種で採用をしています。詳細は、ティアフォーの「求人ページ」をご覧ください。
「どの職種で自分の経験を活かせるかが分からない」「希望する職種が見つからない」などの場合は、ぜひ「キャリア登録」をお願いします。
お問い合わせ先
- メディア取材やイベント登壇のご依頼:pr@tier4.jp
- ビジネスや協業のご相談:sales@tier4.jp
ソーシャルメディア
X (Japan/Global) | LinkedIn | Facebook | Instagram | YouTube
関連リンク