首页
/ PythonRobotics 机器人学导论:从机器人的定义到 Python 与核心技术全景

PythonRobotics 机器人学导论:从机器人的定义到 Python 与核心技术全景

2026-09-09 10:14:38作者:沈韬淼Beryl

PythonRobotics 是一个开源的机器人算法 Python 代码库与配套教科书,其《Introduction(导论)》章节(docs/modules/1_introduction/introduction_main.rst)由三篇子文档构成:机器人学的定义、Python 在机器人领域的应用、以及机器人所需的技术全景。本文以该章节为骨架,结合仓库源码、测试与依赖配置,完整梳理这三部分内容,帮助初学者建立从"机器人是什么"到"Python 能做什么、PythonRobotics 覆盖了哪些技术"的完整认知框架。

什么是机器人学:PythonRobotics 的两大关键词

PythonRobotics 这个名字由两个词组成:PythonRobotics。因此导论章节首先分别解释了这两个主题——机器人(Robotics)与 Python——随后对 PythonRobotics 所覆盖的机器人技术做了整体概览。

机器人的定义

机器人(Robot)是一种能够自动或半自主地执行任务的机器,而机器人学(Robotics)就是对机器人的研究。值得注意的是,"robot" 一词源自捷克语 "robota",意为"强制劳动"或"苦役"。这个词最早出现在 1920 年捷克作家 Karel Čapek 的科幻戏剧《R.U.R.》(Rossum's Universal Robots,罗素姆的万能机器人)中——剧中的机器人是为服务人类而制造的人工工人,但最终发生了反抗。此后,"机器人"逐渐演变为指代能够执行任务、且往往具备一定智能或自主性的机器与自动化系统。

从仓库的章节组织看,这些背景知识被收录在 definition_of_robotics_main.rst 中,属于入门章节的第一课,目的是先让读者理解"机器人学"这个学科的研究对象,再进入算法学习。

机器人学的发展简史

该章节按时间线梳理了机器人学的关键里程碑,PythonRobotics 也正是在这条技术脉络上诞生的:

时期 关键事件
古代与早期概念(1500 年前) 古希腊工程师 Hero of Alexandria 设计了靠水或空气驱动的早期自动机(automata);9–13 世纪,Al-Jazari 等发明家制作了水钟、水力驱动的自动孔雀等精密机械装置
现代机器人的萌芽(1500s–1800s) 达芬奇 1495 年设计了具有机械动作的机器人骑士;1738 年 Jacques de Vaucanson 制作了能"进食"和"消化"的机械鸭;18–19 世纪工业革命中机器开始替代工厂人力,为自动化奠定基础
工业机器人的兴起(1900s–1950s) 1921 年 Karel Čapek 在《R.U.R.》中首次使用"robot"一词;1940–50 年代 Norbert Wiener 发展了自调节机器的控制论(Cybernetics)理论
现代机器人诞生(1950s–1980s) 1961 年 George Devol 与 Joseph Engelberger 制造了第一台可编程工业机器人 Unimate;1966 年斯坦福大学研发出移动机器人 Shakey,AI 与自主机器人开始兴起
先进机器人 + AI 融合(1990s–至今) Baxter 与 Amazon Robotics 革新制造与物流;Waymo 等自动驾驶出租车与矿山自动驾驶运输系统(AHS)走向商用;NASA 火星车用于行星探测;达芬奇手术系统改变医疗;Roomba(扫地机器人)、Sophia(AI 人形机器人)、餐厅酒店送餐机器人 Bellabot 普及;无人机(UAV)在编队表演与配送中成为协作机器人

该章节同时指出,当前全球约有 200 万台机器人在运行且数量逐年增加;在机器人普及速度尤其快的韩国,每 1000 人对应约 50 台机器人。

机器人系统的关键组成:PythonRobotics 聚焦哪一层

机器人学由若干必要组件构成:

  1. 传感器(Sensors)——感知环境信息,如摄像头、LiDAR、GNSS、陀螺仪、加速度计、轮式编码器;
  2. 执行器(Actuators)——驱动运动并与世界交互,如电机、液压系统;
  3. 计算机(Computers)——处理传感器数据并做决策,如微控制器、CPU、GPU;
  4. 电源(Power Supply)——为机器人提供能量,如电池、太阳能;
  5. 软件与算法(Software & Algorithms)——让机器人正常运转并做出智能决策,如 ROS、机器学习模型、定位(Localization)、建图(Mapping)、路径规划(Path planning)、控制(Control)。

PythonRobotics 明确将自身定位在第 5 层:软件与算法。这一取舍在仓库结构上体现得非常直观——Localization/Mapping/SLAM/PathPlanning/PathTracking/ArmNavigation/AerialNavigation/Bipedal/InvertedPendulum/ 等顶层目录全部是算法代码,而非硬件驱动。如果你对传感器硬件感兴趣,导论章节建议转向文档附录中的 内部传感器(Internal Sensors for Robots)外部传感器(External Sensors for Robots) 两节。

Python 与机器人:为什么选它,何时不选它

导论的第二篇子文档(python_for_robotics_main.rst)从通用编程、科学计算、机器人应用三个层面解释了 Python 的定位,也客观指出了它的边界。

Python 的通用编程特性

Python 是由 Guido van Rossum 自 1980 年代末开发的通用编程语言,其核心特性包括:高层语言、解释执行、动态类型(同时支持类型注解)、强调代码可读性、适合快速原型开发、自带丰富标准库(batteries included)、可与 C/Fortran 互操作。正是这些特性,使它成为编程初学者最常用的教学语言之一——这一点与 PythonRobotics"让初学者读懂算法基本思想"的目标高度契合。

Python 科学计算生态

Python 本身并非为科学计算设计,但科学家很快发现了它的优势:高层与解释执行特性让研究者无需处理内存管理等底层任务;可读性与快速原型能力让非专业程序员也能轻松解决问题;与 C/Fortran 库的互操作能力使其能调用已高度优化的科学计算库。基于这些特性,一系列基础科学计算库被开发出来:

  • NumPy——Python 科学计算的基础包;
  • SciPy——建立在 NumPy 之上,提供大量作用于 NumPy 数组的科学与工程函数;
  • Matplotlib——绘图库,与 NumPy 配合使用;
  • Pandas——基于 NumPy 的数据分析与处理库;
  • SymPy——符号数学库;
  • CVXPy——内嵌于 Python 的凸优化建模语言。

在基础库之上还衍生出更多领域专用库,如机器学习库 Scikit-learn、图像处理算法集 Scikit-image、复杂网络库 Networkx、太阳物理库 SunPy、天文学库 Astropy 等。

这一点在仓库的依赖配置中得到了直接印证:requirements/requirements.txt 列出运行示例代码仅需 numpy == 2.3.5scipy == 1.18.1matplotlib == 3.11.0cvxpy == 1.8.1ecos == 2.0.14(后者为 CVXPY 的求解器依赖);而 pytestpytest-xdistmypyruff 则仅用于单元测试、类型检查与代码风格检查等开发环节。这正好呼应了 1_what_is_python_robotics_main.rst 中声明的项目三大理念之一:最小依赖

Python 在机器人领域的优势

  1. 简洁与可读:语法清晰简洁,对包含复杂算法与控制逻辑的机器人开发尤为关键——这也是 PythonRobotics 采用 Python 的第一理由;
  2. 科学计算库丰富:机器人学离不开矩阵运算(刚体变换、状态估计、基于模型的控制)、优化(基于优化的 SLAM、最优路径规划、最优控制)与可视化(遥操作、调试、仿真)。仓库中的 utils/plot.py 就是可视化能力的典型例子——plot_covariance_ellipse 通过协方差矩阵的特征值分解绘制不确定度椭圆,被众多定位、SLAM 示例复用;
  3. ROS 原生支持:ROS(Robot Operating System)是机器人开发中广泛使用的开源框架,采用节点化模块架构,通过 topic、service、action 进行通信,并提供 Gazebo 仿真与 RViz 可视化工具。ROS 对 Python 支持良好:ROS1 使用 rospy,ROS2 使用 rclpy
  4. 跨平台:同一份 Python 代码可在 Windows、macOS、Linux 上运行,硬件平台选择更灵活;
  5. 社区庞大:丰富的教程与资料对解决机器人开发中的疑难问题很有价值。

Python 不适合机器人的场景

导论章节特别强调,Python 并非机器人开发的万能选择:

  • 高速实时控制:Python 是解释型语言,比 C++ 等编译型语言慢,在高速运动控制或安全关键系统中处于劣势。对此,导论给出的建议是:先用本项目的代码理解每个所需算法,再用 C++ 等其他合适语言实现
  • 资源受限系统:Python 是高层语言,比底层语言占用更多内存与算力,难以运行在微控制器或嵌入式设备上,此时 C/C++ 更合适。

从仓库看,这一"教学优先"的定位也决定了代码风格——例如 PathPlanning/AStar/a_star.py 中的 AStarPlanner 类,将栅格地图初始化、障碍物地图构建、运动模型与启发式搜索封装成直白的类与方法,配合 show_animation = True 默认开启动画,方便初学者逐行理解 A* 搜索的完整流程;对应的单元测试 tests/test_a_star.py 则验证规划结果的正确性。

机器人所需技术全景:PythonRobotics 覆盖了哪些模块

导论的第三篇子文档(technologies_for_robotics_main.rst)指出:机器人学需要机械工程、电气工程、计算机科学与人工智能(AI)等广泛领域的技术,而 PythonRobotics 只聚焦计算机科学与人工智能部分。这些技术被划分为三大类:

自主导航(Autonomous Navigation)

自主导航指机器人在长时间内无需操作员外部控制地移动到目标点的能力。要达成这一能力,机器人需要以下技术,缺一不可

  • 知道自己在哪里——定位(Localization)
  • 知道哪里安全——建图(Mapping)
  • 知道地图中哪里安全、机器人又在哪里——同时定位与建图(SLAM)
  • 知道往哪里去、怎么走——路径规划(Path planning)
  • 知道如何控制运动——路径跟踪(Path following)

近年来,自主导航在自动驾驶汽车、无人机、室内外自主移动机器人等领域备受关注。PythonRobotics 为自主导航提供了大量算法、示例代码与文档,分别对应仓库中的五大目录:

技术环节 仓库目录 文档章节 代表性示例
定位 Localization/ localization_main.rst 扩展卡尔曼滤波(EKF)、粒子滤波、直方图滤波、无迹卡尔曼滤波(UKF)、集合卡尔曼滤波
建图 Mapping/ mapping_main.rst 高斯栅格地图、光线投射栅格地图、k-means 聚类、矩形/圆拟合、NDT 地图
SLAM SLAM/ slam_main.rst EKF SLAM、FastSLAM 1.0/2.0、基于图的 SLAM、ICP 匹配
路径规划 PathPlanning/ path_planning_main.rst Dijkstra、A*、D*、RRT/RRT*、PRM、State Lattice、Frenet 最优轨迹等
路径跟踪 PathTracking/ path_tracking_main.rst Stanley 控制、后轮反馈控制、LQR 控制、模型预测控制(MPC)、C-GMRES 非线性 MPC

操作(Manipulation)

机械臂相关技术属于操作范畴,对应仓库中的 ArmNavigation/ 目录与文档章节 arm_navigation_main.rst,代表性示例包括 N 关节机械臂点到点控制、带避障的机械臂导航等。

机器人类型专属技术(Robot type specific technologies)

针对特定类型机器人的技术,PythonRobotics 覆盖了:

  • 空中导航(Aerial Navigation)——AerialNavigation/,如无人机 3D 轨迹跟踪、火箭动力着陆;
  • 双足机器人(Bipedal)——Bipedal/,如基于倒立摆的双足步行规划器;
  • 倒立摆(Inverted Pendulum)——InvertedPendulum/,如 LQR 控制与 MPC 控制两个经典示例。

附加内容

此外,导论章节还列出了两处附加内容:工具库 utils(文档见 utils_main.rst)附录 Appendix(文档见 appendix_main.rst)。其中 utils 目录提供了 angle.py(角度工具,如二维旋转矩阵 rot_mat_2d)与 plot.py(基于 Matplotlib 的绘图工具)等被各模块广泛复用的公共代码;附录则涵盖卡尔曼滤波基础、转向运动模型、内部/外部传感器等补充知识。

如何继续深入

导论章节是整个教科书的第一站。如果你希望沿着这条路线继续学习,仓库文档建议的路径是:

  1. 先阅读 0_getting_started 章节,了解项目背景、运行示例代码的方法与贡献指南——其中 What is PythonRobotics 一节详细阐述了项目的三大理念(算法易读、选择广泛使用且实用的算法、最小依赖);
  2. 按技术环节逐章学习:定位建图SLAM路径规划路径跟踪,再到 机械臂操作空中导航双足倒立摆
  3. 每个算法示例都可以直接运行,配合默认开启的 Matplotlib 动画直观观察算法过程,并参照 tests/ 目录下对应的单元测试(如 test_a_star.pytest_rrt.pytest_fast_slam1.py 等)验证对算法输入输出的理解。

至此,你已经建立了"机器人学是什么 → Python 为何适合(以及在何处不适合)→ PythonRobotics 覆盖哪些技术"的完整框架,可以带着清晰的路线图进入后续的算法学习。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
docsdocs
暂无描述
Markdown
900
5.83 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
927
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.89 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
602
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
396
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.04 K
526