Ommo Technologies获数千万美元融资,助力机器人空间感知进化
赋予机器人“空间直觉”Ommo Technologies 如何用数千万美元 A 轮融资推动机器人感知进化1. 背景与核心概念机器人的“空间直觉”到底是什么1.1 从“看得见”到“感知得到”如果要给机器人装上一种新的能力让它不再只是“摄像头看到障碍物然后停下来”而是真正像人一样知道自己身处何处、周围物体怎么分布、接下来该怎么移动这种能力可以称为“空间直觉”。过去几年自动驾驶、仓储物流机器人和服务机器人快速发展但我们发现一个普遍瓶颈很多机器人对环境的理解仍然停留在“传感器数据拼接”的层面缺少一种统一、实时、低成本的定位与建图能力。近期看到 Ommo Technologies 获得数千万美元 A 轮融资的消息这家公司的核心方向就是赋予机器人更接近人类的“空间直觉”。所谓空间直觉通俗讲就是机器人在没有 GPS、没有昂贵激光雷达的情况下依然能搞清楚“我在哪”“周围是什么”“下一步往哪走”。1.2 核心技术领域空间感知与定位技术在机器人技术体系里这种能力通常对应几个专业方向定位Localization机器人确定自身在环境中的位置和姿态。建图Mapping机器人构建环境的空间模型。导航Navigation在已知地图和实时感知基础上规划路径。感知Perception识别障碍物、边界、动态物体和可通行区域。Ommo Technologies 并非做一款具体的机器人整机而是聚焦在感知与定位的技术层这套技术最大的特点是不依赖高精 GPS也不完全依赖昂贵的激光雷达而是通过多种传感器融合和算法让小型的轮式机器人、人形机器人或工业 AGV 获得实时空间理解能力。1.3 为什么“空间直觉”成为行业关注点先看行业背景。过去几年自动配送车、扫地机器人、仓储机器人开始大规模落地但真正让机器人进入复杂室内环境的场景还面临三个核心问题成本问题高精度激光雷达价格昂贵难以在消费级或中小型商用场景普及。环境限制室内没有 GPS 信号走廊、货架、玻璃幕墙等场景对视觉算法干扰大。实时性问题机器人在动态环境中的决策必须足够快否则一旦遇到行人或临时障碍物很难安全避让。Ommo Technologies 的方向正是尝试用更轻量、低成本的传感器组合和稳定算法补齐这些短板。换句话说融资背后不仅是一家公司的成长信号更代表资本对机器人感知技术从“实验室走向规模化落地”的预期。1.4 本文适合哪些读者这篇教程并不是单纯报道融资新闻而是结合机器人空间感知的技术特点拆解这类系统从原理到工程落地中的关键问题。如果你属于以下人群本文会很有帮助刚入门机器人定位与建图SLAM的学习者正在做移动机器人、AGV 或自动驾驶小车的开发者关注机器人传感器选型与融合算法的工程师想了解低成本空间感知方案的产品经理或技术管理者。读完这篇文章你会理解一套典型空间感知系统的组成、环境准备、核心算法思路、工程实现步骤以及常见坑点。更重要的是你能够把“空间直觉”从抽象概念落成可运行的代码和数据流程。2. 环境准备与版本说明搭建一套可复现的空间感知实验环境2.1 技术栈选择我们以 Ommo Technologies 这类空间感知技术的通用架构为基础做一个典型实验环境。实际项目中可能会使用 ROS 2、Python、C、OpenCV、PCL点云库等组件。本文为了让你快速跑通采用一套适合学习的最小技术栈操作系统Ubuntu 20.04 或 Ubuntu 22.04推荐 22.04LTS 支持更好机器人中间件ROS 2 Humble Hawksbill编程语言Python 3.8、C17可选感知库OpenCV 4.x点云处理PCL 1.12 或更高版本仿真环境Gazebo 11 或 Gazebo Classic可视化工具RViz22.2 硬件与传感器选型参考如果你的目标是复现“低成本空间感知”可以参考以下传感器组合传感器用途成本区间参考注意事项单目相机或双目相机视觉特征提取、深度估计低对光照敏感需要标定2D 激光雷达如 RPLIDAR建图与避障中低只能感知平面不能感知高度IMU惯性测量单元位姿估计、运动补偿低存在零漂需要融合滤波轮式里程计相对位移推算低打滑场景误差大需要校正超声波传感器可选近距离避障低不能作为主定位源这里需要提前说明具体的硬件版本、传感器型号需要根据项目预算和场景调整。本文重点演示通用方法不是绑定特定硬件。2.3 ROS 2 安装命令在 Ubuntu 22.04 上安装 ROS 2 Humble核心步骤分享如下。配置软件源sudo apt update sudo apt install -y software-properties-common curl sudo add-apt-repository universe sudo add-apt-repository restricted sudo add-apt-repository multiverse sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-desktop python3-argcomplete安装完成后配置环境变量echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc安装常用开发工具和依赖库sudo apt install -y python3-pip python3-colcon-common-extensions pip3 install numpy opencv-python sudo apt install -y ros-humble-pcl-ros ros-humble-rviz2 ros-humble-gazebo-ros-pkgs2.4 工作空间初始化我们创建一个名为spatial_perception_ws的 ROS 2 工作空间mkdir -p ~/spatial_perception_ws/src cd ~/spatial_perception_ws colcon build source install/setup.bash到这里环境已经准备完成。接下来我们要理解一个关键问题空间感知系统到底靠哪些核心原理工作。3. 核心原理拆解定位、建图与感知融合3.1 从 SLAM 开始理解空间感知SLAMSimultaneous Localization and Mapping同步定位与建图是空间感知系统最基础的能力之一。它的任务是让机器人在未知环境中一边移动一边构建环境地图同时确定自身在地图中的位置。用一句话概括机器人没有“上帝视角”它只能通过传感器观察局部环境SLAM 算法负责把这些局部观察拼成一个全局一致的空间认知。一个简化流程图如下传感器数据 - 前端里程计特征提取与匹配 - 后端优化位姿图优化 - 回环检测 - 地图构建 - 定位输出3.2 传感器融合的核心思路Ommo Technologies 这类公司强调的“空间直觉”往往不是单一传感器得出的结果而是多传感器融合。以视觉和 IMU 融合为例VIOVisual-Inertial Odometry它的核心优势在于视觉提供丰富的环境特征但受光照和运动模糊影响IMU 提供高频运动信息适合短时间估计但存在累积漂移将两者放入卡尔曼滤波或因子图优化框架可以获得比单传感器更稳定、更准确的位姿估计。在 ROS 2 中我们常用robot_localization包来实现多传感器融合。它是一个非线性状态估计器可以融合里程计、IMU、GPS如果有等数据。3.3 空间感知中常见的三种地图表示地图类型特点适用场景栅格地图Occupancy Grid Map将环境划分为网格每个格子标记占用概率2D 激光雷达建图、导航规划特征点地图Feature Map保存视觉特征点和描述子Visual SLAM适合定位点云地图Point Cloud Map保存环境的三维点云3D 感知、避障、高精度定位Ommo Technologies 的生产级系统通常会综合使用多种地图表示。简单实验时2D 栅格地图最容易上手如果你想做更立体的“空间直觉”建议从 3D 点云建图开始。3.4 回环检测纠正累计漂移的关键一个常见误区是只要传感器精度够高机器人位置就一定准。实际上在任何基于增量估计的系统里误差都会累计。时间一长机器人自认为的位置可能已经偏离真实位置很远。回环检测Loop Closure就是解决这个问题的关键策略当机器人回到曾经到过的区域时算法识别出“我见过这里”然后通过图优化把历史轨迹和地图拉回一致状态。4. 完整实战案例基于 ROS 2 构建一个低成本的机器人空间感知节点4.1 案例需求我们将构建一个简单的空间感知节点它能做到订阅激光雷达扫描话题/scan订阅 IMU 话题/imu/data订阅里程计话题/odom通过robot_localization融合位姿使用slam_toolbox构建 2D 栅格地图在 RViz2 中可视化地图和机器人轨迹这个案例虽然不完全是 Ommo Technologies 的全部商业方案但它覆盖了“空间直觉”最底层的定位、建图与融合环节适合作为入门到进阶的桥梁。4.2 创建功能包在src目录下创建功能包cd ~/spatial_perception_ws/src ros2 pkg create spatial_perception_demo --build-type ament_python --dependencies rclpy sensor_msgs geometry_msgs nav_msgs visualization_msgs4.3 编写位姿融合配置robot_localization使用 YAML 配置文件描述传感器话题和噪声参数。我们创建一个配置文件。文件路径~/spatial_perception_ws/src/spatial_perception_demo/config/ekf.yaml# EKF 配置示例 # 用于融合轮式里程计和 IMU 数据 frequency: 30.0 sensor_timeout: 0.1 two_d_mode: true # 是否发布 TF 变换 publish_tf: true map_frame: map odom_frame: odom base_link_frame: base_link world_frame: odom # 里程计输入 odom0: /odom odom0_config: [true, true, false, false, false, false, false, false, false, false, false, true, true, false, false] # IMU 输入 imu0: /imu/data imu0_config: [false, false, false, true, true, false, false, false, false, false, false, true, true, false, false]每个参数的含义需要简单说明frequency滤波器的输出频率。two_d_mode二维模式适合平面移动机器人。odom0_config和imu0_config长度为 15 的布尔数组分别对应 x、y、z、roll、pitch、yaw、vx、vy、vz、vrx、vry、vrz、ax、ay、az 是否启用。实际使用中你需要根据传感器话题的可用字段微调这些布尔值。4.4 编写核心感知节点下面我们编写一个简单的 Python 节点它订阅激光雷达/scan并在控制台打印扫描密度。这虽然不是完整的 SLAM 算法但能帮助你理解一个感知节点的基本结构。文件路径~/spatial_perception_ws/src/spatial_perception_demo/spatial_perception_demo/laser_listener.py#!/usr/bin/env python3 import rclpy from rclpy.node import Node from sensor_msgs.msg import LaserScan class LaserListener(Node): def __init__(self): super().__init__(laser_listener) self.subscription self.create_subscription( LaserScan, /scan, self.scan_callback, 10 ) self.subscription self.scan_count 0 def scan_callback(self, msg): self.scan_count 1 ranges list(msg.ranges) valid_points sum(1 for r in ranges if r 0.1 and r 30.0) self.get_logger().info( fReceived scan {self.scan_count}: total{len(ranges)} valid{valid_points} ) def main(argsNone): rclpy.init(argsargs) node LaserListener() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ __main__: main()这个节点展示了 ROS 2 编程的基本范式初始化节点、订阅话题、回调处理、日志输出。真正的空间感知系统中回调里会放入特征提取、帧间匹配、状态更新等更复杂逻辑。4.5 配置编译入口修改setup.py加入控制台脚本入口entry_points{ console_scripts: [ laser_listener spatial_perception_demo.laser_listener:main, ], },然后重新编译cd ~/spatial_perception_ws colcon build --packages-select spatial_perception_demo source install/setup.bash4.6 在仿真环境中运行验证为了快速验证我们使用 Gazebo 启动一个带有激光雷达的移动机器人模型。如果你还没有现成的机器人模型可以参考以下流程启动一个简单仿真# 启动 Gazebo 世界 ros2 launch gazebo_ros gazebo.launch.py world:worlds/empty.world # 在一个新终端中启动机器人模型假设你有机器人描述包 ros2 launch your_robot_bringup robot.launch.py # 在新终端中启动激光监听节点 ros2 run spatial_perception_demo laser_listener如果没有现成机器人模型可以使用 ROS 2 自带的turtlebot3仿真包作为替代sudo apt install -y ros-humble-turtlebot3-simulations export TURTLEBOT3_MODELburger ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py启动后你会看到激光监听节点不断打印扫描数据。如果一切正常说明你已经具备进一步移植 SLAM 算法的基础。4.7 启动 SLAM 建图使用slam_toolbox进行 2D 栅格地图构建sudo apt install -y ros-humble-slam-toolbox新建一个 launch 文件来启动 SLAMros2 launch slam_toolbox online_async_launch.py启动后在 RViz2 中订阅/map话题并固定坐标系到map。此时如果通过键盘遥控机器人移动你会看到地图逐渐被构建出来。# 安装键盘遥控包 sudo apt install -y ros-humble-teleop-twist-keyboard # 新终端运行键盘遥控 ros2 run teleop_twist_keyboard teleop_twist_keyboard注意终端中显示的按键映射i前进、j左转、l右转、,后退。机器人在环境中移动时RViz2 中的地图会不断更新。到这里你已经完成了一个完整的空间感知链路传感器数据采集、位姿融合、2D 建图、实时可视化。这套流程在生产环境中会被进一步优化但整体架构是一致的。5. 常见问题与排查思路5.1 TF 树异常问题现象常见原因解决思路RViz2 报错 Fixed Frame [map] does not exist没有启动 map-odom 的 TF 变换检查robot_localization是否正常运行或手动启动静态 TF 发布机器人模型显示位置与地图不一致TF 时间戳不一致检查传感器时间同步确认各节点使用相同的时间源地图静止不更新SLAM 节点未收到扫描数据检查/scan话题是否有数据使用ros2 topic info /scan查看5.2 位姿漂移严重漂移是空间感知里的经典难题。可能原因包括激光雷达安装位置不水平导致扫描数据倾斜IMU 没有正确校准零漂明显里程计打滑轮式编码器数据不可靠回环检测失败历史轨迹误差无法修正。排查思路检查传感器静态标定是否准确。使用 RViz2 查看各传感器数据是否对齐。让机器人在同一路径反复运动观察误差累积情况。如果漂移明显考虑降低robot_localization对里程计的信任权重或增加回环检测频率。5.3 地图出现重影重影通常是因为机器人在建图过程中快速旋转或移动导致激光扫描匹配失败。解决方案包括降低机器人移动速度增加激光雷达帧率在激光扫描匹配时设置更严格的约束使用 IMU 数据辅助帧间位姿估计。5.4 Python 节点启动失败如果运行ros2 run spatial_perception_demo laser_listener报模块找不到常见原因是包没有正确安装。先确认已经执行cd ~/spatial_perception_ws colcon build --packages-select spatial_perception_demo source install/setup.bash同时检查setup.py中的console_scripts是否指向正确模块路径。6. 最佳实践与工程建议6.1 传感器标定是空间感知的基石很多机器人项目从一开始就忽视传感器标定结果后续定位、建图、避障全都受影响。建议在项目初期就完成相机内参与畸变标定激光雷达与相机的外参标定IMU 零偏标定轮式里程计尺度标定。标定完成后将标定参数作为独立配置文件管理不要硬编码在代码中。6.2 保持时间同步与坐标系一致性在 ROS 2 中空间感知系统严重依赖 TF 树和时间戳。工程上建议所有传感器话题使用一致的时钟源在启动文件中明确map - odom - base_link - sensor_link的 TF 关系对传感器数据进行时间插值尽量让融合算法使用同一时刻的数据不要让多个节点同时发布相同的 TF否则会出现冲突。6.3 日志与诊断机制生产环境中的空间感知系统必须能快速定位问题。建议开启 ROS 2 诊断机制ros2 run diagnostic_aggregator diagnostic_aggregator同时在每个核心算法节点中加入周期性健康检查日志例如发布处理帧率、传感器数据延迟、状态协方差等指标。这样一旦出现漂移异常可以及时从日志中看出原因。6.4 回环检测与地图更新策略在建图阶段回环检测是提高地图一致性的核心。但在生产系统中地图不可能无限量增长需要考虑地图分区与分层管理关键区域设置语义标签定期保存子地图避免单点故障导致全图丢失长时间运行时删除陈旧点并重新优化局部图。6.5 安全边界与降级策略如果机器人突然丢失定位例如传感器被遮挡或点云匹配失败系统必须进入安全模式降低运动速度或停在原地停止执行自动化任务在控制台与远程监控端同时告警等待恢复后重新初始化定位不允许盲目继续移动。这些降级策略在实际部署中比算法本身更重要因为一旦机器人在错误位姿下继续运动后果可能是碰撞或设备损坏。7. 总结与学习路线本文围绕 Ommo Technologies 的融资消息出发拆解了机器人“空间直觉”背后的核心技术链路定位、建图、传感器融合和实时导航。虽然融资新闻是切入点但真正有价值的是这些技术在工程中的落地方式。通过本文的案例你已经掌握ROS 2 环境搭建与工作空间组织robot_localization融合里程计与 IMU 的基本配置激光雷达数据订阅与处理节点编写slam_toolbox构建 2D 栅格地图的完整流程空间感知系统常见问题的排查方法。下一步如果你希望继续深入可以从以下几个方向选择学习cartographer等高精度激光雷达 SLAM 算法研究视觉惯性里程计VIO在无人机和手持设备上的应用学习 3D 点云处理与深度学习方法在感知中的应用实践多机器人协作建图与定位结合强化学习或端到端学习探索“空间直觉”的更高级形态。如果你正带着机器人项目建议优先关注传感器标定、时间同步和降级策略。这三件事看起来基础但在真实场景中决定系统是否稳定。动手在一台真实小车或仿真环境里跑通 SLAM比只看理论重要得多。希望你也能在实践中建立属于自己的“空间直觉”。