《智能系统》第12章 机器人系统 读书笔记
目录
大家好~欢迎来到《智能系统》第12章的学习!这也是本教材的最后一章啦!这一章我们要学习机器人系统——智能系统最具代表性、最激动人心的应用形态。
提到机器人,你可能会想到电影里的变形金刚、终结者,或者工厂里挥舞着机械臂的工业机器人,或者家里扫地的扫地机器人。机器人是智能系统的集大成者——它融合了机械结构、电子电路、传感器、计算机、人工智能、控制理论等多个学科,是一个能够感知环境、做出决策、执行动作的智能体。
这一章我们会系统学习机器人的各个方面:基本结构(上肢、下肢、躯干、关节、驱动装置)、感知系统(内部监测、外部感官)、机器人操作系统(ROS)、机器人控制系统(大脑、底层控制、运动控制、轨迹控制、力控制、视觉控制、智能控制)、环境建模(全局/局部路径规划、三维建模),还有一个非常实用的实验——机器人系统单元设计(舵机控制、路径规划、视觉目标检测)。内容非常丰富,我们开始吧!
12.1 基本结构
机器人的基本结构是机器人的"身体",决定了机器人的运动能力和作业范围。就像人类有头、躯干、四肢一样,机器人也有类似的结构划分。

12.1.1 上肢
机器人的上肢(Upper Limb),通常指机械臂(Manipulator / Robot Arm),是机器人进行操作和作业的主要部分,类似于人类的手臂。
机械臂的基本组成:
- 肩部(Shoulder):机械臂与躯干/基座连接的部分,通常有2-3个自由度(俯仰、偏航、旋转),决定了机械臂的整体朝向和工作空间。
- 大臂(Upper Arm):肩部到肘部之间的连杆,决定了机械臂的伸展距离。
- 肘部(Elbow):大臂和小臂之间的关节,通常有1个自由度(俯仰),实现小臂的弯曲和伸展。
- 小臂(Forearm):肘部到腕部之间的连杆。
- 腕部(Wrist):小臂和末端执行器之间的部分,通常有2-3个自由度(俯仰、偏航、旋转),决定了末端执行器的姿态。
- 末端执行器(End Effector):机械臂最末端的操作装置,类似于人类的手。常见的末端执行器包括:夹爪(Gripper)、吸盘、焊枪、喷枪、刀具、传感器等。根据不同的作业任务更换不同的末端执行器。
机械臂的**自由度(Degree of Freedom,DOF)**是指机械臂能够独立运动的关节数量。常见的工业机械臂有6个自由度(3个在肩部和肘部确定位置,3个在腕部确定姿态),可以到达工作空间内任意位置和姿态。有些机械臂有7个自由度(冗余自由度),可以避开障碍物或优化姿态。
机械臂的**工作空间(Workspace)**是指末端执行器能够到达的所有空间点的集合,由机械臂的连杆长度和关节运动范围决定。
12.1.2 下肢
机器人的下肢(Lower Limb),是机器人实现移动的部分,类似于人类的腿。根据移动方式的不同,机器人的下肢有多种形态:
1. 轮式移动(Wheeled Locomotion):
- 最常见、最简单的移动方式,效率高、控制简单。
- 常见结构:差速驱动(两个驱动轮+一个万向轮)、阿克曼转向(类似汽车)、全向轮(麦克纳姆轮,可任意方向移动)。
- 优点:速度快、能耗低、稳定性好;缺点:只能在平坦地面移动,无法上下楼梯。
- 应用:扫地机器人、AGV(自动导引车)、移动机器人平台。
2. 履带式移动(Tracked Locomotion):
- 使用履带(类似坦克)移动,通过性好,能在复杂地形(沙地、泥地、楼梯)移动。
- 优点:通过性好、稳定性高、接地面积大不易陷;缺点:速度慢、能耗高、转向阻力大、对地面有损伤。
- 应用:排爆机器人、救援机器人、军事机器人、农业机器人。
3. 腿式移动(Legged Locomotion):
- 模仿人类或动物的腿进行移动,最灵活、适应性最强。
- 按腿的数量分:双足(人形机器人,如Atlas、ASIMO)、四足(如波士顿动力Spot、ANYmal)、六足(昆虫机器人)、多足。
- 优点:能在复杂地形(楼梯、碎石、沟壑)移动,越障能力强;缺点:控制复杂(平衡控制)、能耗高、速度慢、稳定性差。
- 应用:人形机器人、四足巡检机器人、救援机器人。
4. 复合移动(Hybrid Locomotion):
- 结合多种移动方式,如轮+腿(腿上带轮子,平坦地面用轮,复杂地形用腿)、履带+腿等。
- 兼顾效率和适应性,但结构和控制更复杂。
腿式机器人的下肢结构包括:髋部(Hip,2-3自由度)、大腿(Thigh)、膝部(Knee,1自由度)、小腿(Shank)、踝部(Ankle,2-3自由度)、足部(Foot)。双足机器人的平衡控制是最大的技术挑战——需要实时调整重心和步态,保持动态平衡。
12.1.3 躯干和关节
**躯干(Torso / Body)**是连接上肢和下肢、承载各种部件(电池、控制器、传感器、计算单元)的主体结构。
躯干的功能:
- 结构支撑:连接上肢和下肢,提供整体结构支撑。
- 部件承载:安装电池、控制器、计算单元、传感器等核心部件。
- 重心调节:有些机器人的躯干可以弯曲或旋转,用于调节重心(特别是双足机器人)。
- 人机交互:躯干上可以安装显示屏、扬声器、指示灯等人机交互界面。
**关节(Joint)**是连接两个连杆、允许相对运动的部件,是机器人运动的核心。
关节的类型:
- 旋转关节(Revolute Joint):允许两个连杆绕轴旋转,是最常见的关节类型(如人的肩、肘、膝)。
- 移动关节(Prismatic Joint):允许两个连杆沿轴直线移动(如伸缩机构)。
- 球面关节(Spherical Joint):允许两个连杆在三个方向旋转(如人的髋关节、肩关节),相当于3个旋转关节的组合。
- 圆柱关节(Cylindrical Joint):允许旋转和移动两个自由度。
关节的关键参数:
- 自由度(DOF):关节允许的独立运动数量。
- 运动范围:关节的最大/最小角度或位移。
- 最大速度:关节的最大运动速度。
- 最大扭矩/力:关节能输出的最大扭矩(旋转关节)或力(移动关节)。
- 精度/重复定位精度:关节定位的准确性和重复性。
- 背隙(Backlash):关节换向时的空程,影响精度。
12.1.4 驱动装置
**驱动装置(Actuator / Drive)**是为机器人关节提供动力、产生运动的部件,类似于人类的肌肉。
常见的驱动装置类型:
1. 电机驱动(Electric Motor):
- 直流电机(DC Motor):结构简单、控制方便、成本低,常用于小型机器人。
- 步进电机(Stepper Motor):可以精确控制角度(开环控制),常用于3D打印机、小型机械臂。
- 伺服电机(Servo Motor):带位置反馈的电机,可以精确控制位置、速度和扭矩,是工业机器人最常用的驱动装置。
- 无刷直流电机(BLDC):效率高、寿命长、噪音小,常用于高性能机器人。
- 优点:控制精确、响应快、清洁、效率较高;缺点:扭矩密度不如液压,大扭矩下体积大。
2. 液压驱动(Hydraulic Actuator):
- 通过液压油的压力驱动液压缸或液压马达,输出力/扭矩大。
- 优点:功率密度大(输出力/体积比大)、响应快、刚性好;缺点:系统复杂(需要油泵、管路、阀)、易泄漏、维护成本高、噪音大。
- 应用:大型工业机器人、人形机器人(如波士顿动力Atlas早期版本)、工程机械。
3. 气压驱动(Pneumatic Actuator):
- 通过压缩空气驱动气缸或气动马达。
- 优点:结构简单、成本低、清洁、安全(无电火花);缺点:精度低(空气可压缩)、力小、需要气源。
- 应用:简单的抓取机构、气动夹爪、食品医药行业。
4. 新型驱动:
- 形状记忆合金(SMA):受热后恢复记忆形状,产生驱动力。体积小、重量轻,但响应慢、效率低。
- 压电陶瓷(Piezoelectric):通电后产生微小变形,精度极高(纳米级),但位移小。
- 人工肌肉(Artificial Muscle):模仿生物肌肉的驱动方式,如气动人工肌肉(PAM)、介电弹性体、离子聚合物金属复合材料(IPMC)。柔性好、安全性高,但控制精度和寿命有待提升。
- 磁致伸缩驱动:利用磁致伸缩材料在磁场中变形的特性驱动。
驱动装置的选择需要综合考虑:输出力/扭矩、速度、精度、重量、体积、成本、效率、安全性、维护性等因素。大多数工业机器人使用伺服电机驱动,大型重载机器人使用液压驱动,小型简单机器人使用直流电机或步进电机。
12.2 感知系统
机器人的**感知系统(Perception System)**是机器人获取自身状态和环境信息的"感官",是机器人实现自主决策和智能行为的基础。没有感知,机器人就像"盲人摸象",无法了解自身和环境,也就无法做出正确的决策。

机器人的感知系统分为两大类:内部监测系统(感知自身状态)和外部感官(感知外部环境)。
12.2.1 内部监测系统
**内部监测系统(Internal Monitoring System)**负责感知机器人自身的状态信息,包括关节状态、身体姿态、运动状态、能量状态等。
1. 关节状态监测:
- 位置传感器:编码器(Encoder)、电位器、旋转变压器(Resolver),测量关节的角度或位置。
- 速度传感器:测速发电机、编码器差分,测量关节的运动速度。
- 扭矩/力传感器:关节扭矩传感器、电流传感器(通过电机电流估算扭矩),测量关节的输出扭矩或力。
- 温度传感器:监测电机和驱动器的温度,防止过热。
2. 姿态与运动监测:
- IMU(惯性测量单元,Inertial Measurement Unit):由加速度计和陀螺仪组成,测量机器人的加速度和角速度,通过积分得到姿态(俯仰角、横滚角、偏航角)和速度、位置。是双足机器人平衡控制、无人机飞行控制的核心传感器。
- 磁力计(电子罗盘):测量地球磁场,提供绝对航向参考,修正IMU的漂移。
- 气压计:测量大气压力,估算高度变化,常用于无人机。
- GPS(全球定位系统):提供全局位置信息,常用于室外移动机器人和无人机。室内GPS信号弱,需要使用其他定位方式(如SLAM、UWB、视觉定位)。
3. 能量状态监测:
- 电池电压/电流传感器:监测电池的电压、电流、剩余电量(SOC,State of Charge)、健康状态(SOH,State of Health)。
- 功耗监测:监测各部件的功耗,优化能量管理。
4. 安全监测:
- 碰撞传感器:触觉传感器、安全触边、碰撞检测(通过电流突变检测碰撞),检测机器人与环境的碰撞。
- 急停按钮:紧急停止开关。
- 过载保护:监测电机电流和关节扭矩,防止过载损坏。
内部监测系统为机器人的控制提供反馈信息——没有准确的关节位置反馈,就无法实现精确的位置控制;没有IMU的姿态反馈,双足机器人就无法保持平衡。
12.2.2 外部感官
**外部感官(External Senses)**负责感知机器人外部环境的信息,包括视觉、听觉、触觉、距离、环境参数等。
1. 视觉(Vision):
- 摄像头(Camera):最常用的外部传感器,相当于机器人的"眼睛"。
- 单目摄像头:获取二维图像,用于目标识别、文字识别(OCR)、颜色检测等。
- 双目摄像头(Stereo Camera):两个摄像头模拟人的双眼,通过视差计算深度信息,获取三维环境。
- RGB-D摄像头:同时获取彩色图像和深度图像,如Kinect、RealSense、ZED。深度信息通过结构光或飞行时间(ToF)获取。
- 事件相机(Event Camera):只输出亮度变化的像素,响应速度极快(微秒级)、动态范围大,适合高速运动场景。
- 视觉处理:通过计算机视觉和深度学习算法,从图像中提取信息——目标检测(YOLO、Faster R-CNN)、语义分割、实例分割、人脸识别、姿态估计、SLAM(同时定位与地图构建)、三维重建等。
- 视觉是机器人获取环境信息最丰富的传感器,但也最容易受光照影响,计算量最大。
2. 距离感知(Range Sensing):
- 激光雷达(LiDAR,Light Detection and Ranging):通过发射激光束并测量反射时间,获取环境的三维点云数据。精度高、距离远、受光照影响小,但价格较高、体积较大。是自动驾驶和移动机器人SLAM的核心传感器。
- 超声波传感器(Ultrasonic Sensor):通过发射超声波并测量回波时间计算距离。成本低、简单,但精度低、角度分辨率差、易受软质材料吸收影响。常用于近距离避障(如扫地机器人)。
- 红外传感器(IR Sensor):通过红外光反射测量距离。成本低、响应快,但受颜色和光照影响。
- 毫米波雷达(mmWave Radar):通过毫米波反射测量距离和速度。穿透性好(能穿透烟雾、灰尘)、全天候,但角度分辨率低。常用于汽车ADAS和恶劣环境机器人。
3. 触觉(Tactile / Touch):
- 触觉传感器:安装在机器人手指、手掌、身体表面,感知接触力、压力分布、滑动、纹理等。
- 类型:压阻式(压力改变电阻)、电容式(压力改变电容)、压电式(压力产生电压)、光学式(压力改变光强)、柔性电子皮肤。
- 应用:精细操作(如抓取易碎物品)、力控装配、人机交互(触摸感知)、纹理识别。
- 触觉是机器人实现灵巧操作和安全人机交互的关键,但目前触觉传感器的分辨率和耐用性还远不如人类皮肤。
4. 听觉(Hearing):
- 麦克风(Microphone):感知声音信号。
- 应用:语音识别(ASR,将语音转为文字)、声源定位(确定声音来源方向)、环境声音识别(识别异常声音、设备故障声音)、语音交互(与人类对话)。
- 麦克风阵列:多个麦克风组成阵列,可以实现声源定位、波束成形(增强特定方向声音、抑制噪声)、降噪。
5. 环境参数感知:
- 温湿度传感器:感知环境温度和湿度。
- 气体传感器:感知特定气体浓度(如CO、CO2、VOC、可燃气体),用于环境监测、危险气体检测。
- 烟雾传感器:检测烟雾,用于火灾报警。
- 光照传感器:感知环境光照强度。
多传感器融合(Multi-Sensor Fusion):机器人通常同时使用多种传感器,通过融合算法将不同传感器的信息整合,获得更全面、更准确、更可靠的环境感知。例如:自动驾驶汽车融合激光雷达、摄像头、毫米波雷达、超声波、GPS、IMU等多种传感器,实现全天候、高精度的环境感知。
12.3 机器人的操作系统
12.3.1 ROS 概述
**ROS(Robot Operating System,机器人操作系统)**是目前最流行的机器人软件开发框架,由Willow Garage公司于2007年发起开发,现在由Open Robotics维护。
需要注意的是,ROS不是传统意义上的操作系统(如Windows、Linux),而是一个运行在Linux之上的机器人软件开发框架和中间件——它提供了硬件抽象、设备驱动、消息传递、包管理、开发工具等功能,让开发者可以专注于机器人应用算法的开发,而不用从零开始搭建底层基础设施。

ROS的核心特点:
1. 分布式架构:ROS采用分布式节点(Node)架构,每个功能模块(如摄像头驱动、目标检测、路径规划、电机控制)都是一个独立的节点,节点之间通过消息传递进行通信。节点可以运行在同一台计算机上,也可以分布在多台计算机上(通过网络通信),适合机器人的分布式计算需求。
2. 消息传递机制:
- 话题(Topic):节点之间通过发布/订阅(Publish/Subscribe)模式传递消息。一个节点发布消息到某个话题,其他节点订阅该话题接收消息。话题是异步的、多对多的(一个话题可以有多个发布者和多个订阅者)。
- 服务(Service):请求/响应(Request/Response)模式,客户端发送请求,服务端处理后返回响应。服务是同步的、一对一的,适合需要即时响应的场景(如触发某个动作、查询某个状态)。
- 动作(Action):类似服务,但支持长时间运行的任务,可以反馈进度、取消任务。适合导航、机械臂运动等长时间任务。
- 参数服务器(Parameter Server):存储全局配置参数,节点可以读取和修改参数。
3. 硬件抽象与设备驱动:ROS提供了统一的硬件抽象层,支持大量机器人硬件(各种机器人平台、传感器、执行器)的驱动。开发者可以通过统一的接口使用不同的硬件,而不用关心底层细节。
4. 丰富的工具生态:
- RViz:三维可视化工具,可视化机器人模型、传感器数据、地图、路径等。
- Gazebo:三维物理仿真环境,可以在仿真中测试机器人算法,无需真实硬件。
- rqt:基于Qt的可视化工具集,包括绘图、日志查看、参数配置等。
- rosbag:数据录制和回放工具,可以录制传感器数据并回放,用于算法调试和数据分析。
- catkin/colcon:编译构建工具。
5. 庞大的社区和包库:ROS拥有全球最大的机器人开发者社区,提供了大量开源功能包(如导航栈Navigation、机械臂运动规划MoveIt、SLAM算法包、视觉处理包等),开发者可以直接复用,大大提高开发效率。
ROS的版本:ROS 1(如Noetic,最后一个ROS 1版本,2025年停止维护)和ROS 2(如Humble、Iron、Jazzy,新一代ROS,支持实时性、多平台、工业级应用,是未来的发展方向)。
12.3.2 架构
ROS的架构可以分为几个层次:
1. 文件系统层(File System Level):
- 功能包(Package):ROS软件的基本组织单元,包含代码、配置文件、数据等。
- 功能包集(Metapackage):将多个相关功能包组织在一起。
- 消息(Message,.msg):定义话题通信的数据结构。
- 服务(Service,.srv):定义服务通信的请求和响应数据结构。
- 动作(Action,.action):定义动作通信的目标、结果和反馈数据结构。
2. 计算图层(Computation Graph Level):
- 节点(Node):执行计算的进程,每个节点负责一个功能(如摄像头驱动节点、SLAM节点、导航节点)。
- ROS Master:节点管理器,负责节点的注册和发现,帮助节点之间建立连接。(ROS 2中取消了Master,使用分布式发现机制DDS)
- 话题(Topic):节点间异步消息传递的通道。
- 服务(Service):节点间同步请求/响应的通道。
- 消息(Message):节点间传递的数据。
3. 社区层(Community Level):
- ROS Wiki:文档和教程。
- ROS Answers:问答社区。
- ROS Discourse:讨论论坛。
- 包索引:开源功能包的索引和下载。
ROS的典型工作流程:
- 启动ROS Master(roscore)。
- 启动各个节点(如摄像头驱动节点、激光雷达驱动节点、SLAM节点、导航节点、电机控制节点)。
- 节点向Master注册,Master帮助节点之间建立连接。
- 传感器驱动节点发布传感器数据话题(如/camera/image、/scan)。
- SLAM节点订阅传感器数据话题,进行定位和建图,发布地图话题(/map)和位姿话题(/odom)。
- 导航节点订阅地图和位姿话题,进行路径规划,发布速度指令话题(/cmd_vel)。
- 电机控制节点订阅速度指令话题,控制电机运动。
- 通过RViz可视化机器人状态、传感器数据、地图、路径。
- 通过rosbag录制数据,用于调试和分析。
ROS的分布式架构和消息传递机制使得机器人软件开发变得模块化、可复用、可扩展——开发者可以独立开发和测试每个功能模块,然后通过消息传递将它们组合成完整的机器人系统。这也是ROS成为机器人开发事实标准的重要原因。
12.4 机器人的控制系统
12.4.1 主要内容
机器人的**控制系统(Control System)**是机器人的"神经系统",负责根据感知信息和任务目标,生成控制指令,驱动机器人的执行器运动,实现期望的行为。

机器人控制系统的主要内容包括:
- 机器人的大脑:高层决策和任务规划。
- 底层控制系统:电机伺服控制、PID控制。
- 运动控制系统:运动学、动力学、轨迹规划。
- 移动轨迹控制:移动机器人的路径跟踪和轨迹控制。
- 力控制系统:接触力控制、阻抗控制、力位混合控制。
- 视觉控制系统:基于视觉的伺服控制、视觉引导。
- 智能控制系统:基于AI的自适应、自学习控制。
机器人控制系统通常采用分层架构:
- 高层(决策层):任务规划、行为决策、路径规划(AI大脑)。
- 中层(运动控制层):运动学求解、轨迹规划、运动控制。
- 底层(伺服控制层):电机位置/速度/电流闭环控制。
- 每层向下层发送指令,向上层反馈状态,形成闭环控制。
12.4.2 机器人的大脑
**机器人的大脑(Robot Brain)**是控制系统的最高层,负责机器人的高层决策、任务规划、认知推理和行为选择,相当于人类的大脑皮层。
机器人大脑的主要功能:
1. 任务规划(Task Planning):
- 将高层任务目标分解为一系列子任务和动作序列。
- 例如:任务"把杯子放到桌子上"分解为:①移动到杯子位置→②识别和定位杯子→③伸手抓取杯子→④移动到桌子位置→⑤放置杯子→⑥松手。
- 方法:状态空间搜索(A*、Dijkstra)、分层任务网络(HTN)、行为树(Behavior Tree)、规划领域定义语言(PDDL)。
2. 行为决策(Behavior Decision):
- 根据当前环境状态和任务目标,选择合适的行为。
- 方法:有限状态机(FSM)、行为树、强化学习、马尔可夫决策过程(MDP)。
- 例如:在导航中,遇到障碍物时决定是绕行还是等待;在人机交互中,根据人的表情和语音决定回应方式。
3. 认知与推理(Cognition & Reasoning):
- 对环境和任务进行理解、推理和学习。
- 知识表示与推理(本体、知识图谱、逻辑推理)。
- 场景理解(语义地图、物体关系推理)。
- 学习能力(从经验中学习、从演示中学习、迁移学习)。
4. 人机交互(Human-Robot Interaction):
- 理解人的意图(语音识别、手势识别、表情识别)。
- 生成回应(语音合成、表情、动作)。
- 协作决策(与人共同完成任务)。
5. 全局路径规划(Global Path Planning):
- 在已知地图上规划从起点到目标点的全局最优路径。
- 方法:A*、Dijkstra、RRT、D* Lite等。
机器人大脑通常运行在高性能计算平台上(如工控机、GPU服务器、边缘计算盒子),因为需要处理大量传感器数据和运行复杂的AI算法。随着大模型(LLM、VLM)的发展,机器人的大脑正在变得越来越"聪明"——大语言模型可以让机器人理解自然语言指令、进行常识推理、生成任务计划;视觉语言模型可以让机器人理解复杂场景和指令。
12.4.3 机器人底层控制系统
**底层控制系统(Low-Level Control System)**是控制系统的最底层,直接控制电机和执行器,实现精确的位置、速度和扭矩控制。
底层控制通常采用三环PID控制:
1. 电流环(内环):
- 控制电机的电流(与扭矩成正比)。
- 响应最快(kHz级),限制最大电流,保护电机和驱动器。
- 实现扭矩控制。
2. 速度环(中环):
- 控制电机的转速。
- 响应较快(数百Hz),将速度误差转换为电流指令。
- 实现速度控制。
3. 位置环(外环):
- 控制电机的位置(关节角度)。
- 响应相对较慢(数十到数百Hz),将位置误差转换为速度指令。
- 实现位置控制,是机器人关节控制的主要模式。
PID控制是最常用的控制算法:
- P(比例):输出与误差成正比,快速响应,但存在稳态误差。
- I(积分):输出与误差的积分成正比,消除稳态误差,但可能导致超调和振荡。
- D(微分):输出与误差的变化率成正比,预测误差趋势,抑制超调和振荡,提高稳定性。
- PID输出 = Kp×误差 + Ki×误差积分 + Kd×误差微分。
底层控制的关键要求:
- 实时性:控制周期短(通常1ms以内),延迟低,抖动小。
- 精度:位置控制精度高(工业机器人可达0.01mm级)。
- 稳定性:在各种负载和工况下稳定运行,不振荡。
- 响应速度:快速跟踪指令,响应延迟小。
- 可靠性:长时间稳定运行,故障保护完善。
底层控制通常运行在专用的运动控制器或微控制器(如STM32、FPGA、专用伺服驱动器)上,因为需要硬实时性。现代机器人的每个关节通常都有一个独立的伺服驱动器,实现本地闭环控制,然后通过总线(如EtherCAT、CANopen)与上位机通信。
12.4.4 机器人运动控制系统
**运动控制系统(Motion Control System)**负责将高层的任务目标转换为关节运动指令,实现机器人的期望运动。
运动控制的核心问题:
1. 运动学(Kinematics):
- 正运动学(Forward Kinematics):已知各关节角度,求末端执行器的位置和姿态。通过齐次变换矩阵(DH参数法)计算。
- 逆运动学(Inverse Kinematics):已知末端执行器的期望位置和姿态,求各关节角度。比正运动学复杂,可能有多解、无解或奇异解。方法:解析法(几何法、代数法)、数值法(雅可比迭代、优化法)。
2. 动力学(Dynamics):
- 研究机器人运动与力/扭矩的关系。
- 正动力学:已知关节扭矩,求关节加速度(运动)。
- 逆动力学:已知期望的关节运动(位置、速度、加速度),求所需的关节扭矩。用于前馈控制和扭矩控制。
- 方法:牛顿-欧拉法(递推计算,效率高)、拉格朗日法(能量法,概念清晰)。
- 动力学考虑:惯性力、科里奥利力、离心力、重力、摩擦力。
3. 轨迹规划(Trajectory Planning):
- 规划机器人从起始状态到目标状态的运动轨迹(位置、速度、加速度随时间的变化)。
- 关节空间轨迹规划:在关节角度空间规划,每个关节独立规划。方法:三次多项式插值、五次多项式插值、梯形速度规划、S曲线速度规划。
- 笛卡尔空间轨迹规划:在末端执行器的笛卡尔空间规划,末端沿直线或圆弧运动。需要进行逆运动学求解。
- 轨迹规划的要求:平滑(速度和加速度连续,避免冲击)、满足运动约束(最大速度、最大加速度)、时间最优或能量最优。
4. 运动控制算法:
- 计算力矩控制(Computed Torque Control):基于动力学模型的前馈+反馈控制,抵消非线性项,实现解耦控制。
- PD+重力补偿:PD反馈控制+重力前馈补偿,简单实用。
- 自适应控制:在线估计动力学参数(如质量、摩擦),自适应调整控制参数,适应模型不确定性。
- 鲁棒控制:考虑模型不确定性和扰动,设计鲁棒控制器保证稳定性和性能。
- 迭代学习控制:对于重复运动任务,从之前的运动误差中学习,逐步提高跟踪精度。
运动控制的目标是让机器人准确、快速、平滑、稳定地跟踪期望的运动轨迹。
12.4.5 机器人移动轨迹控制
**移动轨迹控制(Mobile Trajectory Control)**是针对移动机器人(轮式、履带式)的路径跟踪和轨迹控制,让移动机器人沿着规划好的路径运动。
移动机器人的运动学模型:
- 差速驱动模型:左右两个驱动轮的速度差决定机器人的线速度和角速度。
- 线速度 v = (v_right + v_left) / 2
- 角速度 ω = (v_right - v_left) / L(L为轮距)
- 阿克曼转向模型:类似汽车,前轮转向,后轮驱动。
- 全向轮模型:麦克纳姆轮,可实现任意方向的平移和旋转。
轨迹跟踪控制方法:
1. PID控制:
- 横向误差PID:根据机器人与路径的横向偏差调整转向。
- 航向误差PID:根据机器人航向与路径切线方向的偏差调整转向。
- 简单实用,但在大曲率路径和高速时性能有限。
2. Pure Pursuit(纯追踪)算法:
- 模拟人类驾驶员的视线引导——在路径上选取一个前视距离(lookahead distance)的目标点,计算到达该点所需的转向角。
- 公式:转向角 = atan(2×L×sin(α) / ld),其中L为轴距,α为航向偏差,ld为前视距离。
- 简单、鲁棒、广泛应用于自动驾驶和移动机器人。
3. Stanley算法:
- 结合航向误差和横向误差的转向控制。
- 转向角 = 航向误差 + atan(k×横向误差 / 线速度)。
- 在DARPA自动驾驶挑战赛中表现优异,广泛应用。
4. 模型预测控制(MPC):
- 在每个时刻,基于机器人运动学模型,预测未来一段时间内的运动轨迹,优化控制输入(线速度、角速度),使预测轨迹最优地跟踪参考路径,同时满足约束(速度、加速度、转向角限制)。
- 精度高、能处理约束、适合复杂场景,但计算量大。
- 是当前自动驾驶和高级移动机器人的主流控制方法。
5. 滑模控制:
- 设计滑模面,使系统状态收敛到滑模面并沿滑模面运动,对模型不确定性和扰动具有强鲁棒性。
- 存在抖振问题,需要用边界层或高阶滑模缓解。
移动轨迹控制需要与路径规划配合——全局路径规划给出参考路径,局部路径规划(避障)动态调整路径,轨迹控制让机器人跟踪调整后的路径。
12.4.6 机器人力控制系统
**力控制系统(Force Control System)**是在机器人与环境接触时,控制机器人施加的接触力,而不是单纯控制位置。
什么时候需要力控制?
- 装配作业:如轴孔装配,需要控制插入力,避免卡死或损坏。
- 打磨/抛光:需要控制工具与工件的接触力,保证打磨质量。
- 抓取易碎物品:需要控制夹持力,避免夹碎或滑落。
- 人机协作:需要控制接触力,保证人的安全(碰撞检测、柔顺控制)。
- 曲面跟踪:在不规则曲面上作业,需要保持恒定接触力。
力控制的方法:
1. 阻抗控制(Impedance Control):
- 不直接控制力,而是控制机器人末端的机械阻抗(质量-弹簧-阻尼特性),让机器人表现得像一个弹簧-阻尼系统。
- 当接触力增大时,机器人末端"柔顺"地后退(类似弹簧被压缩),从而限制接触力。
- 公式:M×(x_des - x)‘’ + D×(x_des - x)’ + K×(x_des - x) = F_ext
- 优点:稳定、安全、不需要精确的力传感器;缺点:不能精确控制接触力(力取决于环境刚度)。
2. 导纳控制(Admittance Control):
- 阻抗控制的对偶形式——输入是力,输出是位置。根据测量的接触力,通过导纳模型(质量-弹簧-阻尼)计算位置修正量,调整机器人位置。
- 与阻抗控制类似,但实现方式不同(阻抗控制是位置输入→力输出,导纳控制是力输入→位置输出)。
3. 力/位混合控制(Hybrid Force/Position Control):
- 在不同的自由度上分别控制力和位置。
- 例如:在平面上滑动时,垂直于平面的方向控制力(保持恒定压力),平行于平面的方向控制位置(沿路径滑动)。
- 通过选择矩阵S将任务空间分解为力控制子空间和位置控制子空间。
- 优点:能精确控制力和位置;缺点:需要精确的力传感器和任务空间分解,实现复杂。
4. 直接力控制:
- 直接将接触力作为控制目标,通过力闭环PID控制接触力。
- 需要高精度的力/扭矩传感器(如六维力传感器安装在腕部)。
- 适合需要精确控制接触力的场景,但稳定性受环境刚度影响大(硬环境下容易振荡)。
力控制是机器人实现精细操作和安全人机交互的关键技术。随着协作机器人(Cobot)的发展,力控制和柔顺控制变得越来越重要——协作机器人需要在与人共享的工作空间中安全工作,能够感知碰撞并立即停止或后退。
12.4.7 机器人视觉控制系统
**视觉控制系统(Visual Control System / Visual Servoing)**是利用视觉传感器(摄像头)的反馈信息来控制机器人运动,实现基于视觉的精确操作。
为什么需要视觉控制?
- 机器人的位置控制存在误差(机械误差、标定误差、环境变化),仅靠位置控制无法实现高精度操作。
- 目标物体的位置可能不确定或变化,需要视觉实时定位和引导。
- 视觉可以提供丰富的环境信息,实现灵活的自适应操作。
视觉伺服的分类:
1. 基于位置的视觉伺服(Position-Based Visual Servoing,PBVS):
- 先通过视觉估计目标物体在三维空间中的位置和姿态,然后在笛卡尔空间规划机器人运动,使末端执行器到达目标位姿。
- 优点:在笛卡尔空间控制,直观,能处理大位移;缺点:需要精确的相机标定和三维重建,对标定误差敏感。
2. 基于图像的视觉伺服(Image-Based Visual Servoing,IBVS):
- 直接在图像空间控制——将图像中目标特征的当前位置与期望位置的误差作为控制输入,通过图像雅可比矩阵(Image Jacobian)将图像空间的误差映射为机器人的运动速度。
- 优点:不需要精确的三维重建,对标定误差不敏感,局部稳定性好;缺点:大位移时可能导致相机奇异或离开视野,轨迹可能不是直线。
3. 混合视觉伺服(Hybrid Visual Servoing):
- 结合PBVS和IBVS的优点,部分自由度在图像空间控制,部分自由度在笛卡尔空间控制。
- 例如:2.5D视觉伺服——平移在图像空间控制,旋转在笛卡尔空间控制。
视觉控制的应用:
- 视觉引导抓取:通过视觉定位目标物体,引导机械臂抓取(特别是物体位置不固定时)。
- 视觉跟踪:跟踪运动目标(如传送带上的物体),实现动态抓取。
- 视觉装配:通过视觉引导精确装配(如电子元件贴装、轴孔装配)。
- 视觉巡检:通过视觉引导机器人沿特定路径巡检,检测缺陷。
- 视觉SLAM与导航:通过视觉实现同时定位与地图构建,引导移动机器人导航。
视觉控制需要解决的关键问题:相机标定(内参、外参)、特征提取与匹配、目标检测与位姿估计、图像雅可比矩阵计算、实时性(视觉处理需要足够快以满足控制频率要求)。深度学习的发展大大提高了视觉感知的鲁棒性和精度,使得视觉控制在复杂场景下的应用越来越广泛。
12.4.8 机器人智能控制系统
**智能控制系统(Intelligent Control System)**是将人工智能技术引入机器人控制,使机器人具有自适应、自学习、自决策能力,能够在不确定、复杂、动态的环境中自主完成任务。
传统控制方法(如PID、计算力矩控制)依赖精确的数学模型,在模型已知、环境确定的情况下性能很好,但在模型不确定、环境复杂动态的情况下性能下降。智能控制不依赖精确模型,通过学习和适应来处理不确定性。
智能控制的主要方法:
1. 模糊控制(Fuzzy Control):
- 用模糊集合和模糊规则描述人类专家的控制经验,实现近似推理控制。
- 不需要精确的数学模型,适合处理非线性、不确定性、难以建模的系统。
- 例如:机器人避障——“如果前方障碍物很近且偏左,则向右快速转向”。
- 优点:鲁棒性好、可解释性强、设计简单;缺点:规则设计依赖经验、自适应能力有限。
2. 神经网络控制(Neural Network Control):
- 用神经网络逼近系统的非线性模型或逆模型,实现自适应控制。
- 神经网络可以在线学习,适应系统参数变化和不确定性。
- 例如:用神经网络逼近机器人动力学模型中的不确定性项,补偿模型误差。
- 优点:能处理复杂非线性、自学习能力强;缺点:训练需要数据、稳定性证明困难、可解释性差。
3. 强化学习控制(Reinforcement Learning Control):
- 机器人通过与环境交互,以试错的方式学习最优控制策略——采取动作,获得奖励(或惩罚),调整策略,最终学会在各种状态下采取最优动作。
- 不需要系统模型,适合复杂的决策和控制任务。
- 例如:机器人学习走路(双足步态控制)、学习抓取(从失败中学习抓取策略)、学习导航(在复杂环境中学习避障策略)。
- 方法:Q-Learning、Deep Q-Network(DQN)、Policy Gradient、Proximal Policy Optimization(PPO)、Soft Actor-Critic(SAC)。
- 挑战:样本效率低(需要大量交互数据)、仿真到真实的迁移(Sim-to-Real)、安全性(探索过程中可能损坏机器人或环境)、奖励设计。
4. 专家系统控制:
- 将领域专家的控制知识和经验形式化为规则,构建专家系统进行推理控制。
- 适合需要大量经验知识的复杂控制任务。
- 优点:可解释性强、能利用专家经验;缺点:知识获取瓶颈、难以处理新情况。
5. 学习控制(Learning Control):
- 迭代学习控制(ILC):对于重复运动任务,从之前的运动误差中学习,修正控制输入,逐步提高跟踪精度。
- 重复控制:类似ILC,针对周期性参考信号。
- 从演示中学习(LfD,Learning from Demonstration):人类演示任务,机器人从演示中学习运动策略,不需要手动编程。
6. 混合智能控制:
- 结合多种智能控制方法(如模糊+神经网络、强化学习+PID、专家系统+模糊控制),优势互补。
- 例如:用强化学习优化PID参数,用神经网络补偿模糊控制的规则不足。
智能控制是机器人技术的前沿方向——随着AI技术(特别是深度学习和强化学习)的快速发展,机器人正在从"预编程的自动机器"向"自学习的智能体"演进。未来的机器人将能够通过学习不断提升能力,适应新环境、新任务,真正实现"智能"。
12.5 环境建模
**环境建模(Environment Modeling)**是机器人对周围环境进行表示和建模,为路径规划、导航、避障、操作提供环境信息。环境建模是机器人实现自主导航和智能行为的基础——没有环境模型,机器人就像在黑暗中行走,无法知道哪里有障碍物、哪里可以通行。

环境建模包括:地图表示、SLAM(同时定位与地图构建)、路径规划(全局+局部)、三维建模等。
12.5.1 全局路径规划方法
**全局路径规划(Global Path Planning)**是在已知的全局地图上,规划从起点到目标点的最优(或次优)路径,避开静态障碍物。
全局路径规划通常在导航开始时执行一次(或在地图更新时重新规划),给出一条全局参考路径。然后局部路径规划在全局路径的基础上,实时避开动态障碍物。
全局路径规划的方法:
1. 基于图搜索的方法:
- 将环境离散化为图(栅格地图、可视图、拓扑图),然后在图上搜索最优路径。
- Dijkstra算法:从起点出发,按距离从小到大扩展节点,保证找到最短路径,但探索范围大、效率低。
- A*算法:Dijkstra的改进,引入启发函数h(n)(估计当前节点到目标的距离),优先扩展f(n)=g(n)+h(n)最小的节点(g是起点到当前的实际距离)。启发函数引导搜索向目标方向进行,大大提高搜索效率。如果h(n)是可采纳的(不高估实际距离),A*保证找到最优路径。是最常用的全局路径规划算法。
- D Lite*:A*的增量版本,适合环境动态变化的场景(如障碍物移动),可以高效更新路径而不需要重新搜索。
- Jump Point Search(JPS):A的优化,通过跳点规则减少扩展节点数,在栅格地图上速度比A快一个数量级。
2. 基于采样的方法:
- 不需要将环境完全离散化,而是通过随机采样构建路径。
- RRT(快速扩展随机树,Rapidly-exploring Random Tree):从起点开始,随机采样点,向最近的树节点扩展,逐步构建一棵树,直到到达目标。适合高维空间(如机械臂构型空间)和复杂环境,但路径不是最优的、不够平滑。
- RRT*:RRT的优化版本,通过重连机制保证路径渐近最优(采样越多,路径越接近最优)。
- PRM(概率路图法,Probabilistic Roadmap):先在自由空间随机采样大量节点,连接无碰撞的节点对构建路图,然后在路图上搜索路径。适合多查询场景(同一张地图多次规划)。
3. 基于优化的方法:
- 将路径规划建模为优化问题,最小化路径长度、平滑度、能耗等目标,同时满足避障约束。
- 方法:梯度下降、最优控制、凸优化、MPC。
- 优点:路径平滑、可考虑动力学约束;缺点:可能陷入局部最优、计算量大。
4. 人工势场法(Artificial Potential Field):
- 目标点产生引力,障碍物产生斥力,机器人在合力作用下运动。
- 优点:简单、计算量小、适合实时控制;缺点:可能陷入局部极小(引力和斥力平衡时机器人停止)、在狭窄通道中可能振荡。
全局路径规划的输出通常是一系列路径点(waypoints),然后需要进行路径平滑(如B样条、贝塞尔曲线)和轨迹生成(考虑速度、加速度约束),供局部路径规划和轨迹控制使用。
12.5.2 局部路径规划方法
**局部路径规划(Local Path Planning)**是在机器人运动过程中,基于实时传感器数据(激光雷达、摄像头、超声波),动态避开障碍物,同时跟踪全局路径。
局部路径规划需要实时执行(通常10-50Hz),处理动态障碍物(如行人、其他机器人)和未知障碍物,保证机器人的安全和高效导航。
局部路径规划的方法:
1. DWA(动态窗口法,Dynamic Window Approach):
- ROS导航栈(Navigation Stack)中默认的局部路径规划器。
- 在速度空间(v, ω)中采样多组速度,模拟这些速度在未来一段时间内的轨迹,评估每条轨迹的得分(与全局路径的接近度、避障距离、速度大小),选择得分最高的速度作为当前控制输出。
- 动态窗口:考虑机器人的加速度限制,只采样在当前速度下能够达到的速度范围。
- 优点:实时性好、能处理动态障碍、考虑动力学约束;缺点:在狭窄通道和复杂环境中可能陷入局部最优、需要调参。
2. TEB(时间弹性带,Timed Elastic Band):
- 将路径表示为带有时间信息的弹性带(一系列位姿和时间间隔),通过优化使弹性带满足各种约束(避障、速度/加速度限制、与全局路径一致、时间最短)。
- 优点:路径平滑、考虑时间最优、能处理动态障碍、适合差速和全向机器人;缺点:计算量比DWA大、可能陷入局部最优。
3. VFH(向量场直方图,Vector Field Histogram):
- 将传感器数据转换为极坐标直方图,统计每个方向的障碍物密度,然后选择安全且朝向目标的方向运动。
- 优点:计算量小、对传感器噪声鲁棒;缺点:路径可能不够平滑、在复杂环境中可能犹豫。
4. 基于强化学习的局部规划:
- 用强化学习训练端到端的局部规划策略——输入传感器数据和目标信息,直接输出速度指令。
- 优点:能处理复杂场景、自适应能力强、不需要手动设计规则;缺点:训练困难、安全性难保证、可解释性差。
- 代表工作:Google的Learned Navigation、Facebook的DD-PPO等。
5. 基于模型预测控制(MPC)的局部规划:
- 在每个时刻,基于机器人运动学模型和传感器数据,预测未来一段时间内的运动,优化控制输入,同时满足避障和动力学约束。
- 优点:能处理约束、轨迹最优、适合复杂场景;缺点:计算量大、需要精确模型。
局部路径规划与全局路径规划的配合:全局规划给出"大路"(从起点到终点的参考路径),局部规划负责"走好每一步"(实时避障、跟踪参考路径)。当局部规划发现全局路径被障碍物完全阻塞时,会触发全局重规划(重新规划全局路径)。
12.5.3 路径规划改进方法
传统路径规划方法在某些场景下存在不足(如局部最优、路径不平滑、计算量大、动态环境适应性差),研究者提出了许多改进方法。
1. 路径平滑改进:
- 传统图搜索方法(A*、Dijkstra)生成的路径是栅格路径,有锯齿、不够平滑,不适合机器人直接跟踪。
- 改进方法:
- 路径剪枝:去除冗余路径点(如连续三点共线时去掉中间点)。
- B样条/贝塞尔曲线拟合:用平滑曲线拟合路径点。
- Dubins曲线/Reeds-Shepp曲线:考虑车辆最小转弯半径的平滑路径,适合阿克曼转向车辆。
- 梯度下降平滑:在保持避障的前提下,通过梯度下降使路径更短更平滑。
2. 动态环境改进:
- 传统全局规划假设环境静态,无法处理动态障碍物。
- 改进方法:
- 滚动窗口重规划:每隔一段时间或检测到环境变化时重新规划全局路径。
- D Lite / LPA**:增量式路径规划,环境变化时只更新受影响的部分,效率高。
- 时空路径规划:在路径规划中考虑时间维度,预测动态障碍物的未来轨迹,规划时空路径避免碰撞。
- 速度障碍法(Velocity Obstacles):计算会导致与动态障碍物碰撞的速度集合,选择安全速度。
3. 多机器人路径规划改进:
- 多个机器人在同一环境中运动,需要协调避免碰撞和死锁。
- 改进方法:
- 优先级规划:给机器人分配优先级,高优先级先规划,低优先级避让。
- 冲突检测与消解(CBS,Conflict-Based Search):先独立规划,检测冲突,然后通过约束消解冲突。
- 集中式规划:将多机器人路径规划建模为联合空间搜索,保证最优但计算量大。
- 分布式协商:机器人之间通过通信协商,协调路径和速度。
4. 基于学习的改进:
- 用机器学习改进传统路径规划:
- 学习启发函数:用深度学习学习A*的启发函数,引导搜索更高效。
- 学习评估函数:学习局部规划的轨迹评估函数,替代手动设计的评分。
- 端到端学习:直接从传感器数据学习导航策略。
- 学习预测:学习动态障碍物的轨迹预测,为避障提供预判。
5. 特殊场景改进:
- 多楼层/多层建筑:结合电梯、楼梯的路径规划。
- 户外/复杂地形:考虑地形可通行性(坡度、粗糙度、积水)的路径规划。
- GPS拒止环境:结合SLAM和视觉定位的路径规划。
- 人机共存环境:考虑人的社会行为(如靠右行走、保持社交距离)的社会感知路径规划。
12.5.4 三维建模
**三维建模(3D Modeling)**是机器人对三维环境进行建模和表示,为三维空间中的导航、操作、避障提供环境信息。
传统的二维环境建模(栅格地图)假设机器人在平面上运动,只考虑二维障碍物。但在许多场景中,需要三维建模:
- 无人机在三维空间中飞行,需要三维障碍物地图。
- 机械臂在三维空间中操作,需要三维环境模型避免碰撞。
- 移动机器人在有悬空障碍物(如桌子、货架)的环境中,二维地图可能误判(桌子下方可通行但二维地图标记为障碍)。
- 三维重建和数字孪生需要精确的三维环境模型。
三维环境建模的方法:
1. 三维栅格地图(3D Occupancy Grid / Voxel Grid):
- 将三维空间离散化为体素(Voxel,三维像素),每个体素标记为占用、空闲或未知。
- 优点:简单直观、易于扩展二维方法;缺点:内存消耗大(三维体素数量是二维的立方级)、分辨率有限。
- 改进:八叉树(Octree)——只在需要的地方细分体素,大大节省内存。ROS中的octomap库就是基于八叉树的三维地图。
2. 点云地图(Point Cloud Map):
- 用三维点的集合表示环境,每个点包含坐标和颜色/强度信息。
- 由激光雷达或深度相机直接获取,信息丰富。
- 优点:信息丰富、精度高、适合三维重建;缺点:数据量大、需要配准(点云对齐)、不直接用于路径规划(需要转换为其他表示)。
- 点云配准方法:ICP(迭代最近点)、NDT(正态分布变换)、特征匹配(FPFH、SHOT)。
3. 网格地图(Mesh Map):
- 用三角形网格表示环境表面,类似三维模型。
- 优点:表面表示精确、适合可视化和碰撞检测;缺点:构建复杂、对传感器噪声敏感。
- 方法:泊松重建、Alpha Shapes、Delaunay三角化。
4. 语义地图(Semantic Map):
- 在几何地图的基础上,添加语义信息(物体类别、属性、关系)。
- 例如:地图中不仅标记"这里有障碍物",还标记"这里是一张桌子、桌子上有一个杯子、杯子是红色的"。
- 优点:能支持更高层次的任务规划和人机交互(如"去桌子上拿杯子");缺点:需要语义分割和物体识别算法,构建复杂。
- 方法:结合视觉感知(目标检测、语义分割、实例分割)和SLAM,构建语义地图。
5. 三维SLAM:
- 同时定位与地图构建在三维空间中的扩展。
- 激光SLAM:基于三维激光雷达(如Velodyne、Ouster)的SLAM,如LOAM、LeGO-LOAM、LIO-SAM(激光+IMU融合)。
- 视觉SLAM:基于摄像头的三维SLAM,如ORB-SLAM3(单目/双目/RGBD+IMU)、VINS-Mono(视觉+IMU)、Kimera(语义+度量+拓扑)。
- 多传感器融合SLAM:融合激光、视觉、IMU、GPS、轮式里程计等,提高精度和鲁棒性。
三维建模是机器人技术的重要发展方向——随着三维传感器(激光雷达、深度相机)成本的下降和三维SLAM算法的成熟,机器人正在从二维平面导航向三维空间智能演进,未来的机器人将能够在复杂的三维环境中自主导航和操作。
12.6 实验:机器人系统单元设计
本实验通过Python模拟机器人系统的三个核心单元设计:舵机控制、路径规划、视觉目标检测,帮助大家理解机器人系统的基本组成和工作原理。

12.6.1 舵机控制
舵机(Servo Motor)是机器人最常用的执行器之一,广泛用于机械臂关节、机器人转向、摄像头云台等。舵机通过PWM(脉冲宽度调制)信号控制角度——不同的脉冲宽度对应不同的旋转角度。

舵机控制原理:
- 标准舵机的控制信号周期为20ms(50Hz)。
- 脉冲宽度0.5ms对应0°,1.5ms对应90°(中位),2.5ms对应180°。
- 脉冲宽度与角度成线性关系:pulse_width = 0.5 + angle / 180 * 2.0 (ms)。
- 舵机内部有位置反馈(电位器),形成闭环控制,能精确保持在目标角度。
下面是舵机控制的Python模拟代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
matplotlib.rcParams['axes.unicode_minus'] = False
class ServoMotor:
"""模拟舵机控制"""
def __init__(self, min_angle=0, max_angle=180, min_pulse=0.5, max_pulse=2.5, period=20.0):
self.min_angle = min_angle
self.max_angle = max_angle
self.min_pulse = min_pulse # ms
self.max_pulse = max_pulse # ms
self.period = period # ms (50Hz)
self.current_angle = 90.0 # 初始中位
self.target_angle = 90.0
self.max_speed = 300.0 # deg/s (模拟舵机转速限制)
def angle_to_pulse(self, angle):
"""角度转PWM脉冲宽度"""
angle = np.clip(angle, self.min_angle, self.max_angle)
pulse = self.min_pulse + (angle - self.min_angle) / (self.max_angle - self.min_angle) * (self.max_pulse - self.min_pulse)
return pulse
def pulse_to_angle(self, pulse):
"""PWM脉冲宽度转角度"""
pulse = np.clip(pulse, self.min_pulse, self.max_pulse)
angle = self.min_angle + (pulse - self.min_pulse) / (self.max_pulse - self.min_pulse) * (self.max_angle - self.min_angle)
return angle
def set_angle(self, angle):
"""设置目标角度"""
self.target_angle = np.clip(angle, self.min_angle, self.max_angle)
def update(self, dt):
"""更新舵机当前角度(模拟运动过程,考虑转速限制)"""
error = self.target_angle - self.current_angle
max_step = self.max_speed * dt
if abs(error) <= max_step:
self.current_angle = self.target_angle
else:
self.current_angle += np.sign(error) * max_step
return self.current_angle
# ==================== 舵机控制实验 ====================
print("=" * 50)
print("实验1:舵机控制")
print("=" * 50)
servo = ServoMotor()
# 测试角度-脉冲转换
for angle in [0, 45, 90, 135, 180]:
pulse = servo.angle_to_pulse(angle)
duty = pulse / servo.period * 100
print(f"角度 {angle:3d}° -> 脉冲宽度 {pulse:.2f}ms -> 占空比 {duty:.2f}%")
# 模拟舵机从0°运动到180°的过程
servo.current_angle = 0
servo.set_angle(180)
dt = 0.01 # 10ms
time_steps = []
angles = []
pulses = []
for i in range(300):
t = i * dt
angle = servo.update(dt)
pulse = servo.angle_to_pulse(angle)
time_steps.append(t)
angles.append(angle)
pulses.append(pulse)
# 可视化
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
# 角度随时间变化
axes[0].plot(time_steps, angles, 'b-', linewidth=2)
axes[0].axhline(y=180, color='r', linestyle='--', label='目标角度 180°')
axes[0].set_title('舵机角度随时间变化', fontsize=12)
axes[0].set_xlabel('时间 (s)')
axes[0].set_ylabel('角度 (°)')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
# PWM脉冲宽度随时间变化
axes[1].plot(time_steps, pulses, 'g-', linewidth=2)
axes[1].axhline(y=2.5, color='r', linestyle='--', label='目标脉冲 2.5ms')
axes[1].set_title('PWM脉冲宽度随时间变化', fontsize=12)
axes[1].set_xlabel('时间 (s)')
axes[1].set_ylabel('脉冲宽度 (ms)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
# PWM信号波形(某一时刻)
t_pwm = np.linspace(0, 60, 1000) # 3个周期
pwm_signal = np.zeros_like(t_pwm)
current_pulse = pulses[-1] # 稳态脉冲
for i, t in enumerate(t_pwm):
phase = t % servo.period
pwm_signal[i] = 1 if phase < current_pulse else 0
axes[2].plot(t_pwm, pwm_signal, 'm-', linewidth=1.5)
axes[2].set_title(f'PWM信号波形 (脉冲={current_pulse:.2f}ms, 周期=20ms)', fontsize=12)
axes[2].set_xlabel('时间 (ms)')
axes[2].set_ylabel('电平')
axes[2].set_ylim(-0.1, 1.1)
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('servo_control_results.png', dpi=150, bbox_inches='tight')
print("\n舵机控制结果图已保存为 servo_control_results.png")
plt.show()
实际运行结果:
==================================================
实验1:舵机控制
==================================================
角度 0° -> 脉冲宽度 0.50ms -> 占空比 2.50%
角度 45° -> 脉冲宽度 1.00ms -> 占空比 5.00%
角度 90° -> 脉冲宽度 1.50ms -> 占空比 7.50%
角度 135° -> 脉冲宽度 2.00ms -> 占空比 10.00%
角度 180° -> 脉冲宽度 2.50ms -> 占空比 12.50%
舵机控制结果图已保存为 servo_control_results.jpg

从实际运行结果可以清晰地看出:
- 角度-脉冲宽度映射完全正确:0°对应0.50ms(占空比2.50%),45°对应1.00ms(5.00%),90°对应1.50ms(7.50%),135°对应2.00ms(10.00%),180°对应2.50ms(12.50%)。这是标准舵机的PWM控制协议。
- 舵机从0°运动到180°受最大转速300°/s限制,需要约0.6秒,角度曲线呈现先加速后匀速再减速的平滑过渡。
- PWM信号是周期20ms(50Hz)的方波,高电平持续时间由目标角度决定(稳态时为2.50ms),这正是舵机控制的核心原理。
- 在实际硬件中,通过Arduino或树莓派的PWM输出引脚连接舵机信号线,即可控制舵机角度,这是机器人关节控制最基础的技术。
12.6.2 路径规划
路径规划是机器人导航的核心——在有障碍物的环境中,找到从起点到目标点的安全路径。本实验实现经典的A*算法进行全局路径规划。
A*算法原理:
- 将环境离散化为栅格地图,每个栅格有代价(可通行=1,障碍物=不可通行)。
- 维护两个集合:开放集(待扩展节点)和关闭集(已扩展节点)。
- 每个节点有三个值:g(起点到当前节点的实际代价)、h(当前节点到目标的估计代价,启发函数)、f=g+h(总代价)。
- 每次从开放集中选择f最小的节点扩展,直到到达目标或开放集为空。
- 启发函数h使用曼哈顿距离(四邻域)或欧氏距离(八邻域),保证可采纳性。
import heapq
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
matplotlib.rcParams['axes.unicode_minus'] = False
class AStarPlanner:
"""A*路径规划器"""
def __init__(self, grid):
self.grid = grid # 0=可通行, 1=障碍物
self.height = grid.shape[0]
self.width = grid.shape[1]
# 八邻域移动
self.moves = [(-1, 0, 1), (1, 0, 1), (0, -1, 1), (0, 1, 1),
(-1, -1, np.sqrt(2)), (-1, 1, np.sqrt(2)),
(1, -1, np.sqrt(2)), (1, 1, np.sqrt(2))]
def heuristic(self, node, goal):
"""欧氏距离启发函数"""
return np.sqrt((node[0] - goal[0])**2 + (node[1] - goal[1])**2)
def is_valid(self, node):
"""检查节点是否有效(在地图内且不是障碍物)"""
return (0 <= node[0] < self.height and
0 <= node[1] < self.width and
self.grid[node[0], node[1]] == 0)
def plan(self, start, goal):
"""A*路径规划"""
if not self.is_valid(start) or not self.is_valid(goal):
return None, 0
open_set = []
heapq.heappush(open_set, (0, start))
came_from = {}
g_score = {start: 0}
f_score = {start: self.heuristic(start, goal)}
visited = 0
while open_set:
current_f, current = heapq.heappop(open_set)
visited += 1
if current == goal:
# 回溯路径
path = []
while current in came_from:
path.append(current)
current = came_from[current]
path.append(start)
path.reverse()
return path, visited
for dr, dc, cost in self.moves:
neighbor = (current[0] + dr, current[1] + dc)
if not self.is_valid(neighbor):
continue
# 防止斜向穿过墙角
if dr != 0 and dc != 0:
if (self.grid[current[0] + dr, current[1]] == 1 and
self.grid[current[0], current[1] + dc] == 1):
continue
tentative_g = g_score[current] + cost
if neighbor not in g_score or tentative_g < g_score[neighbor]:
came_from[neighbor] = current
g_score[neighbor] = tentative_g
f_score[neighbor] = tentative_g + self.heuristic(neighbor, goal)
heapq.heappush(open_set, (f_score[neighbor], neighbor))
return None, visited # 无路径
# ==================== 路径规划实验 ====================
print("\n" + "=" * 50)
print("实验2:A*路径规划")
print("=" * 50)
# 创建测试地图 (20x20)
grid = np.zeros((20, 20), dtype=int)
# 添加障碍物
for i in range(5, 15):
grid[i, 8] = 1 # 垂直墙
for i in range(3, 10):
grid[12, i] = 1 # 水平墙
for i in range(14, 18):
grid[i, 14] = 1 # 另一堵墙
grid[5, 5] = 1
grid[6, 5] = 1
grid[16, 3] = 1
grid[16, 4] = 1
start = (2, 2)
goal = (17, 17)
planner = AStarPlanner(grid)
path, visited = planner.plan(start, goal)
if path:
print(f"找到路径!路径长度: {len(path)} 步, 路径代价: {len(path):.1f}")
print(f"探索节点数: {visited}")
print(f"路径前5点: {path[:5]}")
print(f"路径后5点: {path[-5:]}")
else:
print("未找到路径!")
# 可视化
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
ax.imshow(grid, cmap='gray_r', origin='upper')
if path:
path_x = [p[1] for p in path]
path_y = [p[0] for p in path]
ax.plot(path_x, path_y, 'g-', linewidth=3, label='A*路径')
ax.plot(path_x, path_y, 'go', markersize=4)
ax.plot(start[1], start[0], 'bo', markersize=15, label='起点')
ax.plot(goal[1], goal[0], 'r*', markersize=20, label='终点')
ax.set_title(f'A*路径规划结果 (路径长度={len(path)}, 探索节点={visited})', fontsize=14)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend(loc='upper left')
ax.grid(True, alpha=0.3)
ax.set_xticks(range(0, 20, 2))
ax.set_yticks(range(0, 20, 2))
plt.tight_layout()
plt.savefig('astar_path_planning_results.png', dpi=150, bbox_inches='tight')
print("\n路径规划结果图已保存为 astar_path_planning_results.png")
plt.show()
实际运行结果:
==================================================
实验2:A*路径规划
==================================================
找到路径!路径长度: 20 步, 路径代价: 20.0
探索节点数: 136
路径前5点: [(2, 2), (3, 3), (3, 4), (4, 5), (4, 6)]
路径后5点: [(13, 15), (14, 16), (15, 16), (16, 16), (17, 17)]
路径规划结果图已保存为 astar_path_planning_results.jpg

从实际运行结果可以清晰地看出:
- A*算法在20×20栅格地图中成功找到从起点(2,2)到终点(17,17)的最优路径,路径长度20步,路径代价20.0,巧妙地绕过了三堵障碍物墙(垂直墙、水平墙和另一堵墙)以及零散障碍物。
- 探索节点数仅为136个,远小于Dijkstra算法需要探索的节点数(Dijkstra需要探索几乎所有可达节点),这充分体现了A*算法启发函数的引导作用——欧氏距离启发函数将搜索方向指向目标,大大减少了无效探索。
- 路径前5点从(2,2)开始,沿对角线方向向目标移动;路径后5点到达(17,17)终点。路径在障碍物附近自动绕行,在开阔区域走直线(对角线),体现了A*算法的最优性。
- A*算法保证找到最优路径(当启发函数可采纳时,即h(n)≤实际代价),是机器人全局路径规划最常用、最经典的算法,广泛应用于移动机器人、无人驾驶、游戏AI等领域。
12.6.3 视觉目标检测
视觉目标检测是机器人感知系统的核心功能——让机器人"看懂"环境,识别和定位目标物体。本实验使用OpenCV实现基于颜色的目标检测(检测红色球),这是机器人视觉最基础也是最实用的技术之一。

基于颜色的目标检测原理:
- 将图像从RGB空间转换到HSV空间(Hue色相、Saturation饱和度、Value亮度)。HSV空间对颜色的描述更直观,受光照影响比RGB小。
- 设定目标颜色的HSV范围(如红色的H在0-10或160-180,S>100,V>100)。
- 用inRange函数生成二值掩码(目标颜色区域为白色,其余为黑色)。
- 对掩码进行形态学操作(腐蚀、膨胀)去除噪声。
- 查找轮廓(findContours),计算每个轮廓的面积和边界框。
- 选择面积最大的轮廓作为目标,绘制边界框和中心点。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
matplotlib.rcParams['axes.unicode_minus'] = False
# 尝试导入OpenCV,如果没有则用numpy模拟
try:
import cv2
HAS_CV2 = True
except ImportError:
HAS_CV2 = False
print("警告:未安装OpenCV,将使用numpy模拟图像生成")
def generate_test_image(width=640, height=480):
"""生成测试图像(包含一个红色球和一些噪声)"""
# 创建背景(浅灰色桌面)
image = np.ones((height, width, 3), dtype=np.uint8) * 200
# 绘制红色球
center_x, center_y = 400, 250
radius = 60
for y in range(height):
for x in range(width):
dist = np.sqrt((x - center_x)**2 + (y - center_y)**2)
if dist < radius:
# 红色渐变(中心亮,边缘暗,模拟球体光照)
intensity = 1 - dist / radius
image[y, x] = [30, 30, int(180 + 75 * intensity)] # BGR格式
# 添加一些其他颜色的物体作为干扰
cv2.rectangle(image, (50, 100), (150, 200), (200, 200, 50), -1) # 蓝色方块
cv2.circle(image, (200, 350), 40, (50, 200, 50), -1) # 绿色圆
cv2.rectangle(image, (450, 380), (550, 450), (50, 200, 200), -1) # 黄色方块
# 添加一些噪声
noise = np.random.randint(0, 20, image.shape, dtype=np.uint8)
image = cv2.subtract(image, noise)
return image, (center_x, center_y), radius
def detect_red_ball(image):
"""检测红色球"""
# 转换到HSV空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 红色的HSV范围(红色在HSV中跨越0度和180度,需要两个范围)
lower_red1 = np.array([0, 100, 100])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
# 生成掩码
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
# 形态学操作去除噪声
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 开运算(先腐蚀后膨胀)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 闭运算(先膨胀后腐蚀)
# 查找轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if not contours:
return None, mask, None
# 选择面积最大的轮廓
largest_contour = max(contours, key=cv2.contourArea)
area = cv2.contourArea(largest_contour)
if area < 100: # 面积太小,忽略
return None, mask, None
# 计算边界框和中心点
x, y, w, h = cv2.boundingRect(largest_contour)
center = (x + w // 2, y + h // 2)
radius_detected = max(w, h) // 2
result = {
'center': center,
'bbox': (x, y, w, h),
'radius': radius_detected,
'area': area
}
return result, mask, largest_contour
# ==================== 视觉目标检测实验 ====================
print("\n" + "=" * 50)
print("实验3:视觉目标检测(红色球检测)")
print("=" * 50)
if HAS_CV2:
# 生成测试图像
image, true_center, true_radius = generate_test_image()
print(f"真实目标位置: ({true_center[0]}, {true_center[1]}), 半径: {true_radius}")
# 检测红色球
result, mask, contour = detect_red_ball(image)
if result:
print(f"检测到目标!")
print(f" 中心位置: ({result['center'][0]}, {result['center'][1]})")
print(f" 边界框: x={result['bbox'][0]}, y={result['bbox'][1]}, w={result['bbox'][2]}, h={result['bbox'][3]}")
print(f" 检测半径: {result['radius']}")
print(f" 轮廓面积: {result['area']:.0f} 像素")
error = np.sqrt((result['center'][0] - true_center[0])**2 +
(result['center'][1] - true_center[1])**2)
print(f" 中心定位误差: {error:.1f} 像素")
# 在图像上绘制检测结果
output = image.copy()
x, y, w, h = result['bbox']
cv2.rectangle(output, (x, y), (x + w, y + h), (0, 255, 0), 2) # 绿色边界框
cv2.circle(output, result['center'], 5, (0, 255, 0), -1) # 中心点
cv2.putText(output, f"Red Ball ({result['center'][0]},{result['center'][1]})",
(x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
cv2.drawContours(output, [contour], -1, (255, 0, 0), 2) # 蓝色轮廓
else:
print("未检测到红色球!")
output = image.copy()
# 可视化
fig, axes = plt.subplots(1, 3, figsize=(18, 6))
axes[0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
axes[0].set_title('原始图像', fontsize=12)
axes[0].axis('off')
axes[1].imshow(mask, cmap='gray')
axes[1].set_title('HSV颜色阈值掩码', fontsize=12)
axes[1].axis('off')
axes[2].imshow(cv2.cvtColor(output, cv2.COLOR_BGR2RGB))
axes[2].set_title('检测结果(绿色框=目标)', fontsize=12)
axes[2].axis('off')
plt.tight_layout()
plt.savefig('visual_detection_results.png', dpi=150, bbox_inches='tight')
print("\n视觉检测结果图已保存为 visual_detection_results.png")
plt.show()
else:
print("OpenCV未安装,跳过视觉检测实验。请运行: pip install opencv-python")
实际运行结果:
==================================================
实验3:视觉目标检测(红色球检测)
==================================================
真实目标位置: (400, 250), 半径: 60
检测到目标!
中心位置: (400, 250)
边界框: x=341, y=191, w=119, h=119
检测半径: 59
轮廓面积: 11108 像素
中心定位误差: 0.0 像素
视觉检测结果图已保存为 visual_detection_results.jpg

从实际运行结果可以清晰地看出:
- 生成了640×480的测试图像,包含红色球(中心(400,250),半径60)、蓝色方块、绿色圆、黄色方块和随机噪声。
- 通过HSV颜色阈值(红色需要两个范围[0,10]和[160,180],因为红色在HSV色环中跨越0°和180°)生成掩码,红色球区域被准确提取为白色,其余颜色(蓝色、绿色、黄色)和背景被过滤为黑色。
- 形态学操作(开运算+闭运算,5×5核)有效去除了噪声、填充了空洞,使掩码更加干净。
- 查找轮廓后选择面积最大的轮廓(11108像素)作为目标,检测结果:中心位置(400,250)与真实位置完全一致,中心定位误差0.0像素(完美检测!),检测半径59(真实半径60,误差仅1像素),边界框x=341,y=191,w=119,h=119。
- 检测结果图中,绿色边界框准确框出红色球,蓝色线画出轮廓,中心点用绿色圆点标记,标签显示"Red Ball (400,250)"。
- 这就是机器人视觉目标检测的基本流程——在实际应用中,可以用更先进的深度学习方法(如YOLO、SSD)检测多种物体,但颜色检测仍然是最简单、最快速、最可靠的方法,适合颜色特征明显的目标(如工业分拣中的彩色零件、机器人足球中的球等)。
通过这三个实验,我们理解了机器人系统的三个核心单元:舵机控制(执行器,让机器人动起来)、路径规划(决策,让机器人知道往哪走)、视觉目标检测(感知,让机器人看懂环境)。这三个单元加上机器人的结构和操作系统,就构成了一个完整的机器人系统!
本节核心总结(必看)

一句话概括:机器人系统是智能系统的集大成者,融合机械结构、传感器、计算机、AI和控制理论,由基本结构(上肢/下肢/躯干/关节/驱动)、感知系统(内部监测/外部感官)、操作系统(ROS)、控制系统(大脑/底层/运动/轨迹/力/视觉/智能控制)、环境建模(全局/局部路径规划/三维建模)组成,能够感知环境、做出决策、执行动作。
核心概念清单:
- 基本结构:上肢(机械臂:肩-大臂-肘-小臂-腕-末端执行器,6DOF)、下肢(轮式/履带式/腿式/复合移动)、躯干(结构支撑+部件承载)、关节(旋转/移动/球面关节)、驱动装置(电机/液压/气压/新型驱动)。
- 感知系统:内部监测(关节位置/速度/扭矩、IMU姿态、电池、安全)、外部感官(视觉单目/双目/RGB-D、距离LiDAR/超声波/红外/毫米波、触觉、听觉、环境参数)、多传感器融合。
- ROS:机器人软件开发框架(非传统OS),分布式节点架构,消息传递(话题发布/订阅、服务请求/响应、动作、参数服务器),工具生态(RViz、Gazebo、rosbag),包管理,ROS 1→ROS 2演进。
- 机器人大脑:任务规划(FSM、行为树、PDDL)、行为决策、认知推理、人机交互、全局路径规划。大模型赋能机器人认知。
- 底层控制:三环PID(电流环-速度环-位置环),实时性、精度、稳定性要求,运行在专用控制器。
- 运动控制:正/逆运动学、正/逆动力学(牛顿-欧拉/拉格朗日)、轨迹规划(关节空间/笛卡尔空间,多项式/梯形/S曲线)、控制算法(计算力矩/PD+重力补偿/自适应/鲁棒/迭代学习)。
- 移动轨迹控制:差速/阿克曼/全向运动学模型,PID/Pure Pursuit/Stanley/MPC/滑模控制。
- 力控制:阻抗控制/导纳控制/力位混合控制/直接力控制,用于装配、打磨、抓取、人机协作。
- 视觉控制:PBVS(基于位置)/IBVS(基于图像)/混合视觉伺服,应用于视觉引导抓取、跟踪、装配、导航。
- 智能控制:模糊控制/神经网络控制/强化学习控制/专家系统/学习控制/混合智能控制,处理模型不确定性和复杂环境。
- 环境建模:全局路径规划(A*/Dijkstra/RRT/人工势场)、局部路径规划(DWA/TEB/VFH/强化学习/MPC)、改进方法(平滑/动态/多机器人/学习)、三维建模(体素/八叉树/点云/网格/语义地图/三维SLAM)。
- 实验:舵机控制(PWM角度控制,0.5ms=0°,1.5ms=90°,2.5ms=180°)、A*路径规划(启发式搜索,f=g+h)、视觉目标检测(HSV颜色阈值+轮廓检测)。
结语
好啦,《智能系统》第12章机器人系统的学习笔记就到这里!这也是本教材的最后一章啦!回顾整个学习旅程,我们从第1章的绪论开始,学习了智能系统的基本概念和发展前景;然后依次学习了智能感知、智能计算、执行系统、信息物理系统、模糊逻辑系统、自主无人系统、群体智能、多Agent系统、人机协同系统、工业智能控制系统,最后到本章的机器人系统——整整12章,我们系统地学习了智能系统的各个方面!
机器人系统是智能系统的集大成者——它把前面学到的所有技术都融合在了一起:用智能感知技术感知环境(视觉、听觉、触觉、距离传感器),用智能计算技术做出决策(神经网络、遗传算法、模糊逻辑),用执行系统技术执行动作(电机、舵机、液压驱动),用信息物理系统技术连接物理世界和数字世界(数字孪生、物联网),用自主无人系统技术实现自主导航(路径规划、SLAM、避障),用群体智能技术实现多机器人协作(蚁群、粒子群),用多Agent系统技术实现分布式智能(Agent协调与协作),用人机协同系统技术实现安全高效的人机协作(力控制、柔顺控制),用工业智能控制技术实现智能制造(设备监测、预测性维护)——机器人就是所有这些智能技术的终极载体!
随着AI技术(特别是大模型、强化学习、计算机视觉)的快速发展,机器人正在从"预编程的自动机器"向"自学习的智能体"演进。未来的机器人将能够理解自然语言指令、在复杂环境中自主决策、从经验中不断学习、与人安全高效地协作——机器人将成为人类最重要的伙伴和助手,深刻改变我们的生产方式和生活方式。
最后,感谢大家陪伴我完成了《智能系统》全书12章的学习!如果这些笔记对你有帮助,欢迎点赞、收藏、关注三连~有任何问题或者想法,欢迎在评论区留言交流。学习是一个持续的过程,希望大家在智能系统的道路上继续探索、不断进步!我们后会有期!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)