尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从机器狗“途途”看具身智能落地:软件定义机器人的服务能力构建

从机器狗“途途”看具身智能落地:软件定义机器人的服务能力构建 当机器狗不再只是实验室里的“网红玩具”而是能帮你拿快递、带路、甚至提醒你吃药时这意味着什么在刚刚落幕的2024世界机器人大会WRC上高德地图推出的“动量机器狗途途”给出了一个清晰的答案具身智能正在走出概念演示进入真实生活服务的深水区。从一条为视障人士设计的“智能导盲路”到现场展示的快递送达、园区巡检、家庭陪伴、物品递送、导览讲解五大服务场景“途途”的亮相不仅仅是一款新产品的发布更是对“机器狗能做什么”这一问题的系统性回应。它背后是高德地图将自身在空间计算、实时导航、多模态交互方面的能力与机器人硬件深度整合的一次大胆尝试。对于开发者、机器人爱好者以及关注AI落地应用的我们而言“途途”的出现远比一个酷炫的demo更有价值。它揭示了一个关键趋势通用移动机器人的价值核心正从“运动能力”转向“服务能力”而实现这一转变的钥匙是“场景化的软件定义”。本文将深入拆解“途途”所代表的具身智能落地逻辑并探讨其背后的技术栈、开发挑战以及给行业带来的启示。1. “途途”亮相WRC不止于炫技关键在于“服务闭环”在世界机器人大会这样一个顶尖舞台上厂商展示极限运动性能的机器狗并不少见。后空翻、爬楼梯、负重奔跑这些能力固然重要但“途途”的展示重点却截然不同。它的核心叙事是在一个个具体的、微小的生活场景中完成一个完整的、有价值的服务任务。1.1 从“导盲路”到“生活服务”场景的深化与拓展“途途”的起点是一条“智能导盲路”。这个场景选择非常巧妙高价值直接服务于视障人群社会价值和用户痛点明确。高复杂度需要精准的定位、避障、路径规划以及对人的实时跟随与交互技术挑战全面。可验证服务效果是否安全、准确带到目的地立即可判。在验证了基础服务能力后高德迅速将能力模块化拓展至五大场景快递送达从驿站到户的最后100米配送。园区巡检替代部分人工进行定时定点巡逻与环境监测。家庭陪伴针对老人或孩童进行提醒、简单物品搬运、紧急呼叫。物品递送在办公室、酒店等室内环境传递文件、物品。导览讲解在博物馆、展厅作为移动讲解员。这五个场景共同勾勒出一幅图景一台机器狗通过加载不同的“技能包”软件应用就能化身不同角色的服务提供者。这本质上是将机器狗硬件平台化其灵魂在于上层不断丰富的应用生态。1.2 为什么是“软件定义”传统机器人开发模式是“一机一用”为每个场景开发专用机器人成本高、周期长。“途途”的模式可以理解为“机器人即服务”Robot as a Service, RaaS的硬件雏形其核心是统一的硬件底盘提供标准的移动、感知激光雷达、摄像头、IMU、计算和交互语音、屏幕能力。高德的核心赋能高精地图与定位提供厘米级精度的室内外一体化地图和实时定位这是可靠移动的基础。场景化路径规划不仅仅是A到B而是考虑行人、电梯、门禁等动态因素的智能规划。多模态交互引擎融合语音、视觉、触屏实现自然的人机交互。可插拔的技能应用针对不同场景开发独立的应用模块通过应用商店或云端部署的方式加载到机器狗上。这种架构使得机器人的功能迭代速度从硬件迭代的“年”周期缩短到软件迭代的“月”甚至“周”周期。2. 核心概念解析具身智能、大小脑架构与机器人操作系统要理解“途途”背后的技术需要厘清几个关键概念。2.1 什么是“具身智能”具身智能的核心思想是智能体AI必须拥有一个物理身体具身并通过与真实环境的实时交互感知-行动循环来学习和完成任务。它不同于纯软件的AI如ChatGPT也不同于预先编程的工业机械臂。对于机器狗“途途”而言具身智能体现在感知通过摄像头“看”到快递柜编号、行人、障碍物通过激光雷达“感知”周围三维几何结构通过麦克风“听”到用户指令。理解与决策结合高德地图的语义信息“这是301室的门”、感知数据“门前有障碍物”和任务目标“递送快递”实时规划下一步动作“绕开障碍靠近门”。行动控制电机执行绕行、站立、语音播报等动作并观察行动结果形成闭环。2.2 “大小脑”架构是什么这是实现具身智能的一种主流工程架构在“途途”和相关技术讨论如网络热词中的“具身智能大小脑c代码示例”中频繁出现。组件功能定位常见实现位置技术特点“大脑”高层任务规划与认知云端或机载高性能计算单元负责复杂的AI推理、场景理解、多步任务分解、自然语言交互。可能运行大语言模型LLM或视觉语言模型VLM。延迟要求相对宽松。“小脑”底层运动控制与实时反应机器狗本体嵌入式控制器负责电机伺服控制、平衡维持、紧急避障、局部路径跟踪。要求极低的延迟毫秒级和高可靠性通常用C/C在实时操作系统RTOS上实现。“桥接层”通信与协调介于大脑和小脑之间将“大脑”的抽象指令如“走到桌子旁”翻译成“小脑”可执行的运动基元序列并同步状态。这是开发的关键难点涉及实时性、优先级调度如网络热词中提到的Linux实时调度。一个类比想象驾驶汽车。“大脑”是你规划着“从家开车到公司途中先去加油站”的整体路线和意图。“小脑”是你的脊髓和低级神经反射控制着踩油门、转方向盘、紧急刹车等肌肉动作。“桥接层”则是你的神经传导系统将你的意图转化为具体的动作指令。2.3 ROS 2机器人的“中枢神经系统”无论是“途途”还是其他现代机器人如网络热词中的“ros2机器狗导航”机器人操作系统ROS尤其是ROS 2几乎是标配。它不是一个传统意义上的操作系统而是一个分布式通信中间件框架。节点每个功能模块如激光雷达驱动、定位算法、路径规划都是一个独立的节点。话题/服务/动作节点之间通过发布/订阅话题Topic进行异步数据流通信如传感器数据通过服务Service进行同步的请求-响应通过动作Action处理长时间运行、可抢占的任务。工具链提供仿真Gazebo、可视化Rviz、调试、包管理等强大工具。对于开发者而言基于ROS 2开发机器狗应用可以复用海量的开源算法包如SLAM、导航极大地降低了开发门槛。3. 环境准备搭建机器狗仿真开发环境在接触实体机器狗之前仿真环境是学习和开发的最佳起点。我们将使用ROS 2和Gazebo仿真器模拟一个类似“途途”的机器狗开发环境。3.1 基础系统与ROS 2安装推荐使用Ubuntu 22.04 LTS操作系统并安装ROS 2 Humble Hawksbill版本。# 1. 设置软件源 sudo apt update sudo apt install curl gnupg lsb-release 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 $(source /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 2. 安装ROS 2核心包 sudo apt update sudo apt install ros-humble-desktop python3-colcon-common-extensions # 3. 配置环境变量 echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc3.2 安装机器狗仿真模型与控制器我们将使用一个开源的四足机器人模型进行仿真。这里以spot_ros2基于波士顿动力Spot的仿真或更轻量的go2_description宇树科技Go2的仿真为例。由于网络热词中提到“go2机器狗”我们以Go2为例。# 创建一个工作空间 mkdir -p ~/dog_ws/src cd ~/dog_ws/src # 克隆必要的仿真包示例需根据实际可用包调整 git clone https://github.com/unitreerobotics/unitree_ros -b ros2 # 注意unitree_ros的ros2分支可能不稳定此处仅为示例。实际开发中应寻找维护良好的ROS 2仿真包。 # 安装依赖 cd ~/dog_ws rosdep install -i --from-path src --rosdistro humble -y # 编译工作空间 colcon build --symlink-install source install/setup.bash3.3 启动仿真环境如果找到了可用的Go2仿真包通常可以通过launch文件启动。# 假设仿真包提供了如下launch文件 ros2 launch go2_description gazebo.launch.py如果无法找到稳定的Go2仿真包我们可以使用ROS 2中一个通用的四足机器人示例ros2_control_demo_example_14一个简单的RRBot变体来理解原理或者转向更成熟的Boston Dynamics Spot® 的官方仿真需授权或Isaac Sim进行高级仿真。关键点仿真的目的是验证你的算法逻辑而非追求与“途途”一模一样的模型。核心是掌握在ROS 2框架下如何订阅传感器数据、发布控制指令。4. 核心流程拆解如何让机器狗完成一项服务任务以“快递送达”场景为例拆解一个服务任务从下单到完成的软件执行流程。这个过程清晰地体现了“大小脑”协同。4.1 任务分解与规划“大脑”层自然语言指令接收用户通过App或语音对机器狗说“途途去3号楼快递柜取我的快递然后送到502室。”指令解析与场景理解LLM/VLM介入大脑中的多模态模型理解指令识别关键实体“3号楼快递柜”、“502室”、“取快递”、“送”。任务分解分解为原子步骤① 导航至3号楼快递柜② 等待用户扫码开柜③ 装载快递④ 导航至502室⑤ 通知用户取件。环境查询结合高德室内地图查询“3号楼快递柜”和“502室”的精确坐标点或语义位置。4.2 导航与移动执行“桥接层”与“小脑”层这是代码实现的核心区域。我们以从A点自主导航到B点为例。#!/usr/bin/env python3 # 文件~/dog_ws/src/my_dog_navigation/scripts/navigate_to_goal.py # 一个简化的导航节点示例使用ROS 2 Navigation2栈 import rclpy from rclpy.node import Node from geometry_msgs.msg import PoseStamped from nav2_msgs.action import NavigateToPose from action_msgs.msg import GoalStatus from rclpy.action import ActionClient class DogNavigationClient(Node): def __init__(self): super().__init__(dog_navigation_client) # 创建导航动作客户端连接Navigation2的NavigateToPose动作服务器 self._action_client ActionClient(self, NavigateToPose, navigate_to_pose) self.get_logger().info(导航客户端已启动等待服务器...) self._action_client.wait_for_server() def send_goal(self, goal_pose): 发送目标点 goal_msg NavigateToPose.Goal() goal_msg.pose goal_pose goal_msg.behavior_tree # 可指定行为树文件默认为空 self.get_logger().info(f发送导航目标: {goal_pose.pose.position.x}, {goal_pose.pose.position.y}) # 异步发送目标并设置回调函数 send_goal_future self._action_client.send_goal_async(goal_msg, feedback_callbackself.feedback_callback) send_goal_future.add_done_callback(self.goal_response_callback) def goal_response_callback(self, future): 目标被服务器接受后的回调 goal_handle future.result() if not goal_handle.accepted: self.get_logger().info(目标被拒绝) return self.get_logger().info(目标已被接受执行中...) # 获取执行结果 get_result_future goal_handle.get_result_async() get_result_future.add_done_callback(self.get_result_callback) def feedback_callback(self, feedback_msg): 导航过程中的反馈回调 feedback feedback_msg.feedback # 可以在这里处理实时反馈如当前坐标、剩余距离等 # self.get_logger().info(f剩余距离: {feedback.distance_remaining:.2f}米) def get_result_callback(self, future): 导航完成后的结果回调 result future.result().result status future.result().status if status GoalStatus.STATUS_SUCCEEDED: self.get_logger().info(导航成功) else: self.get_logger().info(f导航失败状态码: {status}) rclpy.shutdown() # 示例中导航完成即关闭 def main(argsNone): rclpy.init(argsargs) client DogNavigationClient() # 构造一个目标位姿 (示例坐标x2.0, y1.0, 朝向yaw0.0) goal_pose PoseStamped() goal_pose.header.frame_id map # 坐标系必须与地图一致 goal_pose.header.stamp client.get_clock().now().to_msg() goal_pose.pose.position.x 2.0 goal_pose.pose.position.y 1.0 goal_pose.pose.orientation.w 1.0 # 四元数w1代表朝向为0 client.send_goal(goal_pose) rclpy.spin(client) if __name__ __main__: main()代码解释这个节点是“大脑”规划层与“小脑”控制层之间的桥接层的一部分。它不关心具体的路径如何规划、如何避障它只负责向ROS 2 Navigation2系统下达一个高级目标“去(x2.0, y1.0)这个位置”。Navigation2作为中间件会调用全局规划器如A*、Dijkstra、局部规划器如TEB、DWA和控制器生成具体的速度指令并通过/cmd_vel话题发布给机器狗的底层驱动节点“小脑”。“小脑”层的驱动节点订阅/cmd_vel将其转换为每个关节电机的扭矩指令并处理实时平衡控制。4.3 技能执行与交互应用层到达快递柜后需要执行“取件”技能。这需要另一个专门的服务或动作节点。# 文件~/dog_ws/src/my_dog_skills/scripts/pickup_parcel.py # 一个简化的“取快递”技能节点 class PickupParcelSkill(Node): def __init__(self): super().__init__(pickup_parcel_skill) # 假设有服务可以控制机器狗的机械臂或顶盖开关 self._open_compartment_client self.create_client(SomeSrv, open_compartment) # 视觉识别快递柜和快递码 self._qr_subscriber self.create_subscription(Image, camera/image_raw, self.image_callback, 10) self.get_logger().info(取件技能节点已启动) async def execute(self): 执行取件流程 # 1. 视觉识别快递柜二维码 self.get_logger().info(正在识别快递柜二维码...) # ... 调用视觉识别服务 ... # 2. 等待用户扫码或通过云端验证开柜指令 # 3. 打开自身货仓 req SomeSrv.Request() req.compartment_id 1 req.action open future self._open_compartment_client.call_async(req) await future # 4. 等待装载完成可能通过重量传感器或视觉确认 # 5. 关闭货仓 self.get_logger().info(快递装载完成。)5. 关键实现桥接层与实时调度网络热词中特别提到了“具身智能大小脑c代码示例中的桥接层完整实现和实时调度优先级设置的linux系”这恰恰是工程落地的核心难点。5.1 桥接层Middleware的完整实现示例桥接层负责协议转换、数据同步和优先级管理。以下是一个高度简化的C示例展示如何将导航指令传递给底层控制器并管理多个并发的任务请求。// 文件~/dog_ws/src/my_dog_bridge/src/task_bridge.cpp #include rclcpp/rclcpp.hpp #include nav2_msgs/action/navigate_to_pose.hpp #include rclcpp_action/rclcpp_action.hpp #include unitree_interface/msg/motor_command.hpp // 假设的底层控制消息 #include queue #include mutex class TaskBridgeNode : public rclcpp::Node { public: using NavigateToPose nav2_msgs::action::NavigateToPose; using GoalHandleNavigate rclcpp_action::ServerGoalHandleNavigateToPose; TaskBridgeNode() : Node(task_bridge) { // 1. 创建Action Server接收来自“大脑”的导航任务 nav_action_server_ rclcpp_action::create_serverNavigateToPose( this, bridge_navigate_to_pose, std::bind(TaskBridgeNode::handle_goal, this, std::placeholders::_1, std::placeholders::_2), std::bind(TaskBridgeNode::handle_cancel, this, std::placeholders::_1), std::bind(TaskBridgeNode::handle_accepted, this, std::placeholders::_1)); // 2. 创建Publisher向“小脑”发送最终控制指令 motor_cmd_publisher_ this-create_publisherunitree_interface::msg::MotorCommand(low_level_cmd, 10); // 3. 创建定时器以固定频率如500Hz执行控制循环 control_timer_ this-create_wall_timer( std::chrono::milliseconds(2), // 500Hz std::bind(TaskBridgeNode::control_loop, this)); RCLCPP_INFO(this-get_logger(), 任务桥接层节点已启动); } private: // 处理导航目标 rclcpp_action::GoalResponse handle_goal(const rclcpp_action::GoalUUID uuid, std::shared_ptrconst NavigateToPose::Goal goal) { RCLCPP_INFO(this-get_logger(), 收到导航目标); (void)uuid; // 此处可添加目标验证逻辑 return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE; } // 控制循环这是核心以高优先级实时运行 void control_loop() { std::lock_guardstd::mutex lock(task_mutex_); // 1. 检查当前是否有活跃的导航任务并从Navigation2获取当前的速度指令 geometry_msgs::msg::Twist current_cmd_vel; // ... 此处应调用Navigation2的控制器或从话题订阅最新的cmd_vel ... // 2. 将cmd_vel转换为底层电机指令逆运动学解算 auto motor_cmd convert_velocity_to_motor_command(current_cmd_vel); // 3. 发布电机指令 motor_cmd_publisher_-publish(motor_cmd); } // 速度到电机指令的转换函数简化示例 unitree_interface::msg::MotorCommand convert_velocity_to_motor_command(const geometry_msgs::msg::Twist twist) { unitree_interface::msg::MotorCommand cmd; // 这里是核心控制算法根据机器狗模型进行逆运动学计算 // 实际实现非常复杂涉及步态生成、平衡控制等 // 此处仅为占位 cmd.mode 1; // 扭矩控制模式 for (int i 0; i 12; i) { // 假设12个电机 cmd.tau[i] 0.0; // 计算出的扭矩值 cmd.q[i] 0.0; // 期望关节角度 cmd.dq[i] 0.0; // 期望关节速度 } return cmd; } rclcpp_action::ServerNavigateToPose::SharedPtr nav_action_server_; rclcpp::Publisherunitree_interface::msg::MotorCommand::SharedPtr motor_cmd_publisher_; rclcpp::TimerBase::SharedPtr control_timer_; std::mutex task_mutex_; // ... 其他成员变量如当前任务队列、状态等 ... }; int main(int argc, char** argv) { rclcpp::init(argc, argv); auto node std::make_sharedTaskBridgeNode(); rclcpp::spin(node); rclcpp::shutdown(); return 0; }5.2 Linux实时调度优先级设置为了保证“小脑”控制循环的实时性500Hz或更高必须赋予其进程最高的调度优先级防止被其他系统进程打断。# 编译上述C节点 cd ~/dog_ws colcon build --packages-select my_dog_bridge # 运行节点前通过chrt命令设置实时调度策略和优先级 # FIFO调度策略(-f)优先级99最高为99最低为1 sudo chrt -f 99 ros2 run my_dog_bridge task_bridge_node更工程化的做法是在启动文件.launch.py中配置# 文件~/dog_ws/src/my_dog_bridge/launch/bridge.launch.py from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import ExecuteProcess def generate_launch_description(): # 使用ExecuteProcess包装在启动节点前执行chrt bridge_node ExecuteProcess( cmd[sudo, chrt, -f, 99, ros2, run, my_dog_bridge, task_bridge_node], outputscreen ) # 注意需要配置sudo免密码或使用Linux capabilities赋予ROS节点实时调度权限 # 更安全的方式使用setcap赋予可执行文件能力避免使用sudo # sudo setcap cap_sys_niceeip /path/to/task_bridge_node return LaunchDescription([ bridge_node, ])关键解释chrt -f 99将进程设置为SCHED_FIFO实时调度策略优先级为99。这要求进程以root权限运行。在生产环境中更推荐使用setcap赋予二进制文件CAP_SYS_NICE能力而不是直接使用sudo以提高安全性。实时调度能确保控制循环的周期抖动Jitter极小是稳定控制的关键。6. 运行与验证在仿真中测试完整服务流程6.1 启动仿真与导航栈# 终端1启动Gazebo仿真环境假设使用一个简单的四足模型 ros2 launch my_dog_simulation gazebo.launch.py # 终端2启动Navigation2导航栈需要提前配置好地图和机器人参数 ros2 launch nav2_bringup bringup_launch.py use_sim_time:True map:/path/to/your/map.yaml # 终端3启动我们编写的任务桥接层节点需要提前编译 cd ~/dog_ws source install/setup.bash sudo chrt -f 99 ros2 run my_dog_bridge task_bridge_node6.2 发送测试目标# 终端4使用命令行工具发送一个目标点 ros2 topic pub /bridge_navigate_to_pose/goal nav2_msgs/action/NavigateToPose_Goal {pose: {header: {frame_id: map}, pose: {position: {x: 5.0, y: 3.0}, orientation: {w: 1.0}}}}预期结果在Gazebo仿真界面中你应该能看到机器狗从起始位置自主规划路径并移动到目标点(5.0, 3.0)。在终端中可以看到桥接层节点和导航栈的日志输出。6.3 验证实时性# 查看桥接层节点的线程调度信息 ps -eo pid,cls,rtprio,pri,nice,cmd | grep task_bridge_node输出中CLS列应为FF表示SCHED_FIFORTPRIO列应为99。7. 常见问题与排查思路在开发类似“途途”的机器狗应用时你会遇到一些典型问题。问题现象可能原因排查方式解决方案导航目标被拒绝目标点超出地图范围目标坐标系错误导航服务器未就绪。1. 检查目标点的frame_id是否与地图一致。2. 在Rviz中可视化地图和目标点。3. 检查/amcl定位和/bt_navigator导航节点状态。确保定位成功后再发送目标使用ros2 topic echo检查地图元数据。机器狗运动抖动或摔倒控制频率不稳定电机指令延迟“小脑”控制器参数未校准。1. 使用rqt_graph检查控制话题的发布频率。2. 使用ros2 topic hz /low_level_cmd检查发布频率。3. 检查桥接层节点是否设置了实时调度。确保控制循环在实时线程中运行调整PID控制参数在仿真中先进行步态调参。建图SLAM不准确传感器激光雷达、IMU数据不同步环境特征太少算法参数不当。1. 使用ros2 topic hz检查各传感器数据频率。2. 检查/tf树是否完整、无断链。3. 尝试在特征丰富的环境中建图。使用robot_localization包进行传感器融合调整SLAM算法如Cartographer的配置参数。“大脑”与“桥接层”通信延迟高网络问题消息序列化/反序列化开销大节点负载过高。1. 使用ros2 topic delay检查话题延迟。2. 使用top或htop查看节点CPU占用率。对于高频控制数据使用零拷贝或共享内存通信如ROS 2的intra_process优化消息类型使用固定长度数组。技能执行失败视觉识别不准机械臂运动规划失败与外部系统如快递柜API通信超时。1. 单独测试视觉识别节点。2. 检查运动规划器的碰撞检测配置。3. 查看网络连接和API响应。增加视觉识别算法的鲁棒性多帧融合简化运动规划路径为外部服务调用添加重试机制和超时处理。8. 最佳实践与工程建议基于“途途”的展示和行业经验要开发一个可靠的服务型机器狗需遵循以下工程原则仿真优先持续集成在Gazebo或Isaac Sim中构建高保真仿真环境包括地形、灯光、动态障碍物。将导航、技能测试等流程自动化并入CI/CD流水线确保每次代码提交都不会破坏基础功能。清晰的“大小脑”边界与接口严格定义“大脑”任务规划和“小脑”运动控制之间的通信接口如Action、Service。“桥接层”应轻量、高效只做协议转换和简单调度复杂决策应上推到“大脑”。状态机驱动任务流每个服务任务如送快递都应建模为一个状态机例如使用smach或BehaviorTree.CPP。状态机清晰定义了任务步骤、失败处理如重试、回退、上报和成功条件提高系统的可维护性和可调试性。全面的监控与日志记录机器狗所有的传感器数据、决策日志、动作指令。这对于复现问题、优化算法至关重要。实现远程监控和诊断系统能够实时查看机器狗状态、电池、网络、任务进度等。安全第一急停机制必须有硬件和软件的双重急停。权限管理严格限制对底层控制接口的访问权限。合规性在公共区域部署时需考虑隐私摄像头、安全碰撞等法规要求。模块化与可扩展性将导航、视觉、语音、技能等模块设计为松耦合的ROS 2节点/包。定义清晰的技能接口使得新增一个服务如“浇花”只需开发新的技能包而不必修改核心框架。“途途”在WRC的展示标志着具身智能从“能动”走向“有用”。对于开发者而言其最大的启示在于机器人开发的焦点需要从追求极致的运动性能转向构建稳定、可扩展的服务软件栈。这意味着未来机器人工程师的核心竞争力将不仅是控制理论或机械设计更是构建复杂软件系统、处理多模态感知与决策、以及实现安全可靠人机交互的能力。你可以从搭建一个ROS 2仿真环境开始尝试复现一个最简单的“从A点走到B点”的导航任务然后逐步加入视觉识别、语音交互、多任务调度等模块。在这个过程中你会深刻理解“大小脑”协同的挑战并体会到“软件定义机器人”的真正含义。这条路很长但“途途”们已经迈出了从实验室到生活场景的关键一步。
返回列表