基于ROS 2与aiSim实时孪生技术实现小车自主导航虚实共生
2026/9/2 18:55:38 网站建设 项目流程

在机器人开发中,你是否曾为实体小车昂贵的硬件成本、复杂的调试环境以及难以复现的极端场景而头疼?传统的仿真方案往往与真实物理世界存在“隔阂”,导致仿真中表现良好的算法,一旦部署到实体机器人上就“水土不服”。本文将带你深入一个前沿的解决方案:基于 ROS 2 和 aiSim 实时孪生技术,构建一个从虚拟仿真到物理世界无缝衔接的小车自主导航系统。通过本文,你将掌握如何利用 aiSim 创建高保真的虚拟环境,训练和验证你的导航算法,并最终将同一套代码近乎零修改地部署到真实的 ROS 2 小车上,实现真正的“虚实共生”。

本文适合有一定 ROS 2 基础,希望将算法开发与测试效率提升一个量级的机器人开发者、自动驾驶入门者以及高校研究团队。无论你是想验证一个新的 SLAM 建图算法,还是测试导航栈在复杂动态场景下的鲁棒性,这套流程都能为你提供一个高效、安全且可重复的沙盒环境。

1. 背景与核心概念:为何需要实时孪生?

在深入实战之前,我们有必要厘清几个核心概念,理解它们如何共同构成现代机器人开发的基石。

ROS 2 (Robot Operating System 2): 机器人领域的“操作系统”,提供了一套标准的通信中间件和工具集。它允许开发者将复杂的机器人系统拆分为独立的、可复用的节点(Node),这些节点通过话题(Topic)、服务(Service)和动作(Action)进行通信。ROS 2 解决了 ROS 1 在实时性、安全性和跨平台方面的诸多限制,已成为机器人开发的主流框架。

自主导航 (Autonomous Navigation): 指机器人仅依靠自身的传感器(如激光雷达、摄像头、IMU)和计算资源,在没有人工干预的情况下,在未知或部分已知的环境中实现从起点到目标点的安全移动。其核心技术栈通常包括:

  • SLAM (Simultaneous Localization and Mapping):即时定位与地图构建。机器人一边运动,一边构建环境地图,并同时估算自己在地图中的位置。常见的算法有cartographer,gmapping(ROS1),slam_toolbox等。
  • 定位 (Localization):在已知地图中确定自身位姿。AMCL (自适应蒙特卡洛定位) 是 ROS 中经典的基于粒子滤波的定位算法。
  • 路径规划 (Path Planning):分为全局规划(从起点到终点的粗略路径)和局部规划(避开动态障碍物的实时轨迹)。ROS 的nav2导航栈是这一功能的集大成者。

仿真 (Simulation): 在虚拟环境中模拟机器人的物理特性、传感器数据和环境交互。Gazebo 是 ROS 生态中最著名的物理仿真器。仿真的价值在于低成本、高效率、可重复和安全地测试算法。

实时孪生 (Real-time Digital Twin): 这是连接虚拟与物理世界的关键桥梁。它不仅仅是一个静态的 3D 模型,而是一个与物理实体实时同步、双向交互的高保真虚拟映射。在机器人领域,这意味着:

  1. 虚拟到实体 (V2P):在仿真中验证的控制算法、导航策略可以直接下发到实体机器人。
  2. 实体到虚拟 (P2V):实体机器人的状态(位姿、传感器数据)可以实时反馈到虚拟模型中,用于监控、分析和预测。
  3. 硬件在环 (HIL):将部分真实硬件(如控制器、传感器)接入仿真回路,进行半实物测试。

aiSim: 一个专注于自动驾驶和机器人仿真的高保真平台。与 Gazebo 相比,aiSim 通常在图形渲染逼真度、传感器模型(尤其是摄像头和激光雷达)的物理准确性、以及大规模场景的生成与管理方面更为强大。它支持与 ROS 2 的无缝集成,是构建实时孪生系统的理想仿真环境。

核心痛点与解决方案:传统工作流中,算法在 Gazebo 中调试好后,移植到实体车需要大量适配(传感器驱动、坐标变换、动力学参数等),过程繁琐且易出错。而基于 ROS 2 + aiSim 的实时孪生方案,旨在通过统一接口高保真模型,最大化仿真与实车的一致性,实现“一次开发,处处运行”,显著降低开发周期和风险。

2. 环境准备与版本说明

工欲善其事,必先利其器。本节将详细列出搭建本实战项目所需的软件环境。请务必注意版本兼容性,这是后续所有步骤能顺利运行的基础。

操作系统: Ubuntu Linux 是 ROS 2 的原生和首选平台。推荐使用Ubuntu 22.04 LTS (Jammy Jellyfish),因为它有最广泛的 ROS 2 发行版支持和社区资源。本文示例将基于此系统。

ROS 2 发行版: 我们选择ROS 2 Humble Hawksbill,它是 Ubuntu 22.04 的长期支持(LTS)版本,稳定且功能完善。请勿在未经验证的情况下混用不同发行版的包。

aiSim: 你需要从 aiSim 的官方渠道获取安装包或使用其云服务。由于 aiSim 是商业软件,具体安装步骤请遵循其官方文档。本文将重点介绍其与 ROS 2 的集成和场景配置方法。确保你安装的 aiSim 版本支持 ROS 2 Humble 的接口。

机器人模型与导航栈

  • 机器人模型:我们将使用一个经典的差分驱动机器人模型,它包含底盘、两个驱动轮、一个激光雷达(如sensor_msgs/LaserScan)和必要的 TF 变换。
  • 导航栈:使用Nav2。在 ROS 2 Humble 中,可以通过apt直接安装。
    sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-turtlebot3*
    (注:我们借用 TurtleBot3 的包来快速获取一些通用的启动文件和配置,但会替换其模型和传感器配置以匹配我们的仿真和实车)

工作空间: 创建一个标准的 ROS 2 工作空间。

mkdir -p ~/ros2_autonav_ws/src cd ~/ros2_autonav_ws/src

关键工具

  • colcon: ROS 2 的构建工具。sudo apt install python3-colcon-common-extensions
  • rviz2: ROS 2 的可视化工具,用于查看传感器数据、地图和机器人状态。
  • rosdep: 用于安装系统依赖。sudo apt install python3-rosdep2 && sudo rosdep init && rosdep update

版本一致性提醒: 整个项目的核心——URDF 机器人描述文件、传感器话题名称、TF 框架名称、导航参数配置文件——必须在仿真(aiSim)和实体小车中保持完全一致。这是实现“虚实共生”最关键的一步。

3. 核心原理与架构拆解

在开始动手搭建之前,理解整个系统的数据流和组件交互至关重要。这能帮助你在出现问题时快速定位。

3.1 系统架构图(逻辑描述)

整个系统可以分为三个层次:仿真层算法层实体层。它们通过 ROS 2 这个统一的通信总线连接。

[ aiSim 高保真仿真环境 ] | | (发布) /scan (LaserScan), /odom (Odometry), /camera/image_raw (Image) | (订阅) /cmd_vel (Twist) | V [ ROS 2 通信网络 (DDS) ] | | (统一的话题、服务、TF 树) | V [ Nav2 导航算法栈 ] ├── SLAM (slam_toolbox) -- 建图模式 ├── AMCL -- 定位模式 ├── 全局规划器 (NavFn, Smac) ├── 局部规划器 (DWB, RPP) └── 行为树控制器 (BT Navigator) | | (发布) /cmd_vel (Twist) | (订阅) /scan, /odom, /amcl_pose 等 | V [ 实体 ROS 2 小车 ] ├── 底层驱动节点 (发布 /odom, 订阅 /cmd_vel) ├── 激光雷达驱动节点 (发布 /scan) └── TF 广播节点

关键点

  1. 话题统一:无论数据来自 aiSim 的虚拟传感器还是实体小车的真实传感器,它们发布到 ROS 2 网络中的话题名称和消息类型必须相同。例如,激光雷达数据都叫/scan,类型都是sensor_msgs/LaserScan
  2. TF 树一致:机器人各部件(如base_link,laser,odom,map)之间的坐标变换关系必须在 URDF 文件中明确定义,并且在仿真和实车中保持一致。这是导航栈正确工作的前提。
  3. 控制接口统一:导航栈输出的速度命令/cmd_vel(geometry_msgs/Twist) 必须能被 aiSim 中的机器人模型和实体小车的底层电机控制器正确解析和执行。

3.2 Nav2 导航栈工作流程

Nav2 采用行为树(Behavior Tree)来组织导航任务,其核心流程如下:

  1. 初始化:启动各功能节点(规划器、控制器、恢复器),加载参数。
  2. 激活:通过LifecycleManager将节点切换到活跃状态。
  3. 接收目标:通过NavigateToPoseAction 或FollowWaypointsAction 接收一个目标位姿。
  4. 全局规划:根据当前位姿(来自amclodom)和目标位姿,在地图上计算一条全局路径。
  5. 局部规划与控制:局部规划器结合全局路径和实时传感器(如/scan)数据,生成局部的、无碰撞的速度命令 (/cmd_vel)。
  6. 跟踪与恢复:行为树监控任务执行状态,如果机器人被困住(如长时间无法接近目标),会触发恢复行为(如清除代价地图、旋转)。

3.3 aiSim 的 ROS 2 接口

aiSim 通过一个 ROS 2 桥接节点(或插件)与外部 ROS 2 网络通信。这个桥接节点会:

  • 发布:将仿真中虚拟传感器的数据转换为标准的 ROS 2 消息并发布。
  • 订阅:订阅 ROS 2 网络中的控制命令(如/cmd_vel),并将其施加到仿真中的机器人模型上。
  • 提供 TF:根据仿真中机器人的位姿,广播odom->base_link等 TF 变换。

你的主要配置工作,就是在 aiSim 中设置好这些话题的名称和帧 ID,使其与你的 Nav2 配置完全匹配。

4. 完整实战:从仿真到实车

接下来,我们将分步构建一个完整的自主导航系统。首先在 aiSim 中验证所有功能,然后将配置迁移到实体小车。

4.1 步骤一:创建统一的机器人描述 (URDF/Xacro)

这是实现一致性的基石。我们创建一个描述机器人物理属性和传感器布局的 URDF 文件。

<!-- 文件: ~/ros2_autonav_ws/src/my_robot_description/urdf/my_robot.urdf.xacro --> <?xml version="1.0"?> <robot name="my_autonav_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <!-- 定义常量,如轮子半径、底盘尺寸等 --> <xacro:property name="base_length" value="0.3" /> <xacro:property name="base_width" value="0.25" /> <xacro:property name="base_height" value="0.1" /> <xacro:property name="wheel_radius" value="0.05" /> <!-- 基础连杆 (base_footprint -> base_link) --> <link name="base_footprint"/> <joint name="base_footprint_joint" type="fixed"> <parent link="base_footprint"/> <child link="base_link"/> <origin xyz="0 0 ${base_height/2}" rpy="0 0 0"/> </joint> <link name="base_link"> <visual> <geometry> <box size="${base_length} ${base_width} ${base_height}"/> </geometry> <material name="blue"> <color rgba="0 0 0.8 1"/> </material> </visual> <collision> <geometry> <box size="${base_length} ${base_width} ${base_height}"/> </geometry> </collision> <inertial> <mass value="5.0"/> <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/> </inertial> </link> <!-- 激光雷达 (base_link -> laser) --> <joint name="laser_joint" type="fixed"> <parent link="base_link"/> <child link="laser"/> <origin xyz="0.15 0 0.05" rpy="0 0 0"/> <!-- 雷达安装在车体前部中心,略高于底盘 --> </joint> <link name="laser"> <visual> <geometry> <cylinder length="0.05" radius="0.03"/> </geometry> <material name="red"> <color rgba="0.8 0 0 1"/> </material> </visual> <!-- 注意:传感器插件在Gazebo或aiSim中配置,URDF只描述物理外观和TF关系 --> </link> <!-- 差分驱动轮 (左轮和右轮) --> <!-- 左轮 --> <joint name="left_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="left_wheel"/> <origin xyz="0 ${base_width/2} -${base_height/2}" rpy="${pi/2} 0 0"/> <axis xyz="0 1 0"/> </joint> <link name="left_wheel">...</link> <!-- 轮子几何和惯性定义省略,类似base_link --> <!-- 右轮 --> <joint name="right_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="right_wheel"/> <origin xyz="0 -${base_width/2} -${base_height/2}" rpy="${pi/2} 0 0"/> <axis xyz="0 1 0"/> </joint> <link name="right_wheel">...</link> <!-- 定义从 base_link 到 odom 的变换,通常由里程计节点发布,这里不定义固定joint --> </robot>

关键:这个 URDF 定义了base_footprint,base_link,laser等关键坐标系。实体小车的机械结构和传感器安装必须与此描述相符

4.2 步骤二:配置 aiSim 仿真环境

在 aiSim 中,你需要做两件事:

  1. 导入机器人模型:将上述 URDF 文件导入 aiSim,或者使用 aiSim 提供的工具创建与之匹配的 3D 模型。确保模型在仿真中的动力学参数(质量、摩擦等)尽可能接近真实小车。
  2. 配置传感器与 ROS 2 桥接
    • 为模型添加一个激光雷达传感器,设置其参数(如扫描角度、分辨率、最大最小距离)与你的实体激光雷达(如 RPLidar A1)一致。
    • 在传感器配置中,指定其发布的ROS 2 话题名称为/scan帧 ID (Frame ID) 为laser
    • 为模型添加一个差分驱动控制器,并指定其订阅的ROS 2 控制话题为/cmd_vel
    • 配置 aiSim 的 ROS 2 桥接,使其发布机器人的里程计信息到/odom话题,帧 ID 为odom,子帧 ID 为base_footprint

这样,当你在 aiSim 中启动场景时,一个与你的 URDF 描述一致、并且发布了标准 ROS 2 话题的虚拟机器人就准备好了。

4.3 步骤三:启动 Nav2 并建图 (SLAM)

首先,确保你的 ROS 2 工作空间已构建,并且 aiSim 的 ROS 2 桥接已经运行,虚拟机器人正在发布/scan/odom数据。

1. 启动 RViz2 和 TF 树:

# 在新的终端中 source ~/ros2_autonav_ws/install/setup.bash ros2 launch my_robot_description display.launch.py # 这个 launch 文件会启动 robot_state_publisher (发布TF) 和 rviz2

在 RViz2 中,添加LaserScan显示,话题选择/scan;添加TF显示。你应该能看到虚拟机器人的模型和激光扫描线。

2. 启动 SLAM 工具箱进行建图:

# 在新的终端中 source ~/ros2_autonav_ws/install/setup.bash ros2 launch slam_toolbox online_async_launch.py params_file:=/path/to/your/mapper_params.yaml

你需要创建一个mapper_params.yaml配置文件,其中指定frame_idodombase_framebase_footprint

3. 使用键盘遥控控制机器人探索环境:

# 在新的终端中 source ~/ros2_autonav_ws/install/setup.bash ros2 run teleop_twist_keyboard teleop_twist_keyboard

按照提示,用键盘控制虚拟机器人在 aiSim 场景中移动,扫描整个区域。

4. 保存地图:当建图完成后,使用map_saver保存地图。

# 在新的终端中 source ~/ros2_autonav_ws/install/setup.bash ros2 run nav2_map_server map_saver_cli -f ~/my_sim_map

这将在你的家目录下生成my_sim_map.pgm(地图图像)和my_sim_map.yaml(地图元数据)两个文件。

4.4 步骤四:在仿真中进行自主导航

有了地图,我们就可以测试自主导航了。

1. 启动 Nav2 的所有节点(定位模式):

# 在新的终端中 source ~/ros2_autonav_ws/install/setup.bash ros2 launch nav2_bringup bringup_launch.py \ params_file:=/path/to/your/nav2_params.yaml \ map:=/home/your_user/my_sim_map.yaml

关键的nav2_params.yaml需要仔细配置,特别是:

amcl: ros__parameters: base_frame_id: "base_footprint" odom_frame_id: "odom" global_frame_id: "map" # ... 其他粒子滤波参数 bt_navigator: ros__parameters: global_frame: "map" robot_base_frame: "base_footprint" odom_topic: "/odom" # ... 其他参数 planner_server: ros__parameters: expected_planner_frequency: 20.0 # ... 规划器插件 controller_server: ros__parameters: expected_controller_frequency: 20.0 base_frame_id: "base_footprint" odom_topic: "/odom" # ... 控制器插件和代价地图参数

2. 在 RViz2 中设置导航目标:启动 RViz2 的Nav2插件(或使用ros2 run rviz2 rviz2手动添加Nav2Goal工具)。在地图上点击一点并选择方向,作为导航目标。如果配置正确,你会看到:

  • 一条从机器人当前位置到目标的全局路径(通常为绿色)。
  • 机器人开始自主移动,局部规划器会生成局部轨迹(通常为红色/蓝色)并发布/cmd_vel
  • 在 aiSim 中,虚拟机器人应开始沿着这条路径向目标点运动。

4.5 步骤五:迁移到实体 ROS 2 小车

这是“虚实共生”的最终检验。假设你的实体小车已安装 Ubuntu 和 ROS 2 Humble,并拥有:

  • 一个发布/scan话题的激光雷达驱动节点。
  • 一个发布/odom话题的里程计节点(通常由电机编码器或视觉里程计计算得出)。
  • 一个订阅/cmd_vel话题并控制电机的底层驱动节点。

迁移工作非常简单:

  1. 复制配置文件:将你在仿真中使用的nav2_params.yamlmapper_params.yaml以及保存的my_sim_map.pgm.yaml文件,复制到实体小车的 ROS 2 工作空间中。
  2. 确保 TF 树一致:使用ros2 run tf2_tools view_frames命令在实体小车上查看 TF 树,确保map->odom->base_footprint->base_link->laser的变换关系与仿真中完全一致。如果不一致,需要调整你的 URDF 或驱动节点中 TF 广播的代码。
  3. 启动导航:在实体小车上,使用与仿真中完全相同的命令启动 Nav2:
    ros2 launch nav2_bringup bringup_launch.py \ params_file:=/path/to/your/nav2_params.yaml \ map:=/path/to/your/my_sim_map.yaml
  4. 测试:通过 RViz2(可以在一台远程电脑上运行)给实体小车发送导航目标。观察其行为是否与在 aiSim 仿真中一致。

理想情况下,由于算法参数、TF 框架、话题接口完全一致,实体小车应能立即复现在仿真中的导航性能。这就是“一次配置,虚实通用”的魅力。

5. 常见问题与排查思路

在实际操作中,你可能会遇到各种问题。下面是一个快速排查指南。

问题现象可能原因排查步骤与解决方案
RViz2 中看不到激光数据 (/scan)1. aiSim ROS桥接未启动或配置错误。
2. 话题名称不匹配。
3. RViz2 中话题订阅错误。
1.ros2 topic list查看是否有/scan话题。如果没有,检查 aiSim 桥接配置。
2.ros2 topic echo /scan查看是否有数据流。
3. 确认 RViz2 中 LaserScan 显示插件订阅的话题是/scan
机器人模型在 RViz2 中显示错位或破碎1. URDF 文件语法错误。
2.robot_state_publisher节点未运行或参数错误。
3. TF 变换错误。
1. 使用check_urdf命令验证 URDF。
2.ros2 topic echo /tf_static查看静态 TF 是否正确发布。
3. 在 RViz2 中检查 TF 显示,确认各坐标系关系是否符合预期。
SLAM 建图时地图不更新或错乱1./scan/odom数据有问题。
2. TF 变换odom->base_footprint不正确。
3. SLAM 参数(如分辨率、最大范围)设置不当。
1. 确认/odom话题数据是否正常(速度、位置不应为 NaN)。
2. 使用ros2 run tf2_ros tf2_echo odom base_footprint实时查看变换,检查是否连续、合理。
3. 调整 SLAM 参数,特别是map_update_intervalscanrange_max
Nav2 启动失败或节点崩溃1. 参数文件 YAML 语法错误。
2. 指定的插件(规划器、控制器)未安装或名称错误。
3. 依赖的服务(如map_server)未启动。
1. 仔细检查nav2_params.yaml文件,特别是缩进和冒号后的空格。
2. 查看崩溃节点的日志ros2 run <node_name> --ros-args --log-level debug
3. 使用ros2 lifecycle命令查看各节点状态,确保它们都成功激活 (active)。
机器人收到目标后不移动,或原地旋转1. 代价地图(costmap)参数过于保守,机器人认为所有区域都是障碍。
2. 局部规划器参数(如最大速度、加速度)设置过小。
3. 传感器数据 (/scan) 未正确融入代价地图。
1. 在 RViz2 中查看local_costmapglobal_costmap。检查障碍物膨胀半径 (inflation_radius) 是否过大。
2. 检查controller_server参数中的max_vel_x,max_rot_velocity等。
3. 确认/scan话题的帧 ID 与代价地图配置中的robot_base_frame能通过 TF 树正确关联。
仿真与实车行为差异巨大1.动力学差异:仿真中机器人质量、摩擦等参数与实车不符。
2.传感器噪声差异:仿真传感器过于理想,实车传感器噪声大、有畸变。
3.控制延迟差异:仿真控制响应即时,实车电机驱动有延迟。
1. 在 aiSim 中调整机器人模型的动力学参数,使其更接近实车。
2. 在 aiSim 中为激光雷达添加噪声模型。或在 Nav2 参数中增大inflation_radius以应对实车传感器的不确定性。
3. 在实车的底层驱动中,加入速度平滑或低通滤波,并考虑在 Nav2 的控制器参数中增加odom数据的延迟补偿。

6. 最佳实践与工程建议

掌握了基本流程后,遵循以下最佳实践能让你的虚实共生系统更加鲁棒和高效。

1. 参数管理与版本控制:

  • 将所有的配置文件(URDF, Nav2 YAML, SLAM YAML, aiSim 场景文件)纳入 Git 等版本控制系统。
  • 仿真环境实车环境创建独立的参数文件目录(如config/sim/config/real/),它们共享大部分基础配置,只在少数地方(如传感器噪声参数、最大速度)有差异。使用 ROS 2 的include指令或 launch 文件参数来管理这些差异。

2. 传感器标定与 TF 校准:

  • 这是实车成功的关键!必须精确测量激光雷达、IMU 等传感器相对于base_link的安装位置和角度,并准确反映在 URDF 文件中。
  • 对于差分驱动机器人,务必进行轮子里程计标定。使用ros2 run robot_localization ekf_node等工具融合编码器和 IMU 数据,可以得到更准确的/odom信息,大幅提升导航精度。

3. 仿真环境逼真度:

  • 不要只在一个简单的空房间里测试。在 aiSim 中构建多样化的场景:长走廊、动态行人、玻璃门(对激光雷达是透明的)、斜坡等。
  • 为虚拟传感器添加符合真实物理特性的噪声、抖动和丢包模型。这能迫使你的导航算法在仿真阶段就具备更强的鲁棒性。

4. 导航算法调参:

  • 全局规划器NavFn稳定,Smac(State Lattice, Hybrid-A*)更适合非完整约束机器人。根据场景选择。
  • 局部规划器DWB(Dynamic Window Approach) 很常用,但其参数众多(如sim_time,vx_samples,path_distance_bias)。调参时,优先在仿真中进行批量测试。可以编写脚本,让机器人在固定场景中执行多个导航任务,统计成功率和平均时间。
  • 恢复行为:合理配置恢复行为(旋转、清除代价地图)。过于频繁的恢复会降低效率,不配置则可能导致机器人永久卡死。

5. 系统监控与日志:

  • 使用rqt_graph可视化节点图,确保所有节点连接正常。
  • 使用ros2 topic hz /topic_name监控关键话题(如/scan,/odom,/cmd_vel)的频率是否稳定。
  • 为 Nav2 节点启用 debug 日志级别,便于分析规划失败的原因。
  • 在实车上,务必实现一个“急停”机制(例如一个独立的/emergency_stop话题),可以在算法异常时切断/cmd_vel的控制权,保障安全。

6. 持续集成与自动化测试:

  • 将你的仿真导航场景集成到 CI/CD 管道中(如 GitHub Actions)。每次代码提交后,自动在 aiSim 中运行一系列标准导航任务(如从 A 点到 B 点),并评估成功率、路径长度、碰撞次数等指标。这能有效防止代码回归。

通过将 ROS 2 强大的标准化通信能力与 aiSim 高保真的实时孪生环境相结合,我们构建了一套高效的机器人自主导航开发流程。这套流程的核心思想是通过仿真与实车在接口和配置上的高度一致,来最大化代码的复用率,将开发调试的重心前置到成本更低、效率更高、场景更丰富的虚拟世界中

从创建一个统一的机器人 URDF 描述开始,到在 aiSim 中配置传感器与控制接口,再到使用 Nav2 完成 SLAM 建图和自主导航测试,最后将整套配置无缝迁移至实体小车——这个过程本身,就是对机器人系统“感知-决策-控制”闭环的深刻实践。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询