跳转至

技术栈

近来觉得有必要整理一下自己的机器人方向技术栈,来看看有什么欠缺。也算是对过去几年的经历进行一个回顾和评论。我一直觉得工科是一个实用性的学科,我们所有人都是站在前人的肩膀上,去创造一个更有趣的世界。文章或许有些内容已经过时了,毕竟机器人是个快速迭代的方向。

机器人方向技术栈

1. Mechanical Design

一个完整的项目要从机械部分开始,然后是硬件,软件等,在我看来这是一个完整的机器人项目。一个好的机械设计为后面的各个环节铺平了道路。

在机器人设计中,CAD 软件是必不可少的工具,用于机械结构的设计和仿真。推荐的 CAD 软件有 SolidWorksFusion 360 等。

SolidWorks

SolidWorks 是一款三维 CAD 软件,广泛应用于工程设计领域。在机器人设计中,SolidWorks 可以用于机械结构的设计,包括零部件的建模、装配、运动仿真等。Solidworks 是我平时使用比较多的软件,整个的设计流程比较熟悉,总体感觉还是很好的。

Fusion 360

Fusion 360 是一款云端三维 CAD 软件,功能强大,适用于机械设计、工业设计等领域。与 SolidWorks 相比,Fusion 360 更适合个人用户,价格更低,且支持更多的云端功能。之前尝试过从 Solidworks 转到 Fusion 360,因为 Fusion 360 对于个体用户来说比较友好,但是后来发现很难适应设计流程的变化,所以还是放弃了过渡。

1.2 3D 打印

目前实验室或者家用的主流的是两种 3 d 打印方式, FDM(Fused Deposition Modeling)和 SLA(Stereolithography)。FDM 是一种熔融沉积成型技术,通过熔化塑料丝,将材料一层一层地堆积成 3 D 模型。SLA 是一种光固化成型技术,通过紫外线固化光敏树脂,将材料一层一层地固化成 3 D 模型。目前 FDM 打印机比较常见,价格也比较便宜。SLA 打印机价格较高,但打印精度更高,通常取决于液晶面板精度。但是 SLA 打印机的打印速度较慢,且需要特殊的光敏树脂,且打印后需要清洗和固化,因此使用较为麻烦。比较之下,FDM 打印机更适合个人用户和小型企业。自从 2017 年以来,我主要使用过四种 FDM 打印机,分别是 DIY,UltimakerAnycubic 和 Bamboo Lab。

打印材料主要有 PLA,ABS,PETG,TPU 等,其中 PLA 是最常用的打印材料,价格便宜,易于打印,适合初学者使用。ABS 是一种工程塑料,具有较高的强度和耐热性,适合打印机械结构等零部件。PETG 是一种新型的打印材料,具有较高的透明度和耐热性,适合打印外壳等零部件。TPU 是一种弹性材料,具有较高的柔韧性和耐磨性,适合打印轮胎等零部件。Ultimaker 还提供了一种 PVA 水溶性支撑材料。

Ultimaker

Ultimaker 是一家知名的 3 D 打印机厂商,其产品质量高,性能稳定。在机器人领域,Ultimaker 的 3 D 打印机可以用于打印机械结构、外壳等零部件。

在实验室中,我们使用的是 Ultimaker 2+, Ultimaker 3 extended, Ultimaker S 5。其中三代以上使用双喷头,可以使用 PVA 水溶性支撑材料,但是该材料对温度比较敏感,所以会经常堵塞喷头,或者挤出不均匀,所以体验不是很好。此外,Ultimaker 还采用了只有自己使用的 2.85 mm 的材料,且 Ultimaker 的打印机价格较高,例如 Ultimaker S 5 的价格在 7000 欧元左右。总体来说,不推荐 Ultimaker 的打印机,价格高,体验一般。

DIY

在 2017 年的时候,我使用的是 DIY 的 3 D 打印机,价格便宜,适合初学者使用。但是 DIY 的 3 D 打印机需要自己组装,且打印精度和稳定性较差,不适合长时间使用。 3d 打印机更多是一个工具,所以打印精度和稳定性是很重要的。一个好的打印机可以有更好的配合精度,更好的打印效果。很显然,DIY 的打印机不适合长时间使用,所以不推荐。

Anycubic

Anycubic mega S 3 算是我入门的第一个商用 3 d 打印机,价格便宜,打印效果也不错,在之前几年是一个不错的选择。不过根据我的使用体验,打印精度和稳定性不如 Ultimaker,不过也不容易坏,个人使用大概四五年了,也能一直稳定的工作。考虑到价格,在 Bambu Lab 出现之前 Anycubic 是一个不错的选择。

Bambu Lab

目前 Bambu Lab 的打印机算得上最热门的打印机,在国内外各个视频网站的热度都很高,例如 B 站和 Youtube,之前也在 Embedded world 和 Productranica 的展会上看到了它的身影,它的营销做得还是很不错的,不过技术还是很抗打的。我大概在两个月前购入了一台 A 1 mini,到手测试的感觉确实感觉不错,打印速度很快,精度也很高,所以我想一个好的产品就是需要一个完整的生态环境,从机械设计到软件生态,我能从拓竹的产品上感觉出来,软件能最大的调动硬件,各个环节都能非常好的配合在一起,确实能称得上是一个好的产品。在目前看来,还是很看好 Bambu Lab 这家公司的发展的。

2. 硬件设计

在机器人项目的硬件设计阶段,我们需要考虑集成多种电子组件和系统,以实现机器人的功能和性能。这一部分主要涉及微控制器的选择、电路板设计(EDA 工具的使用)、固件开发以及传感器和通信技术的应用。

2.1 MCU

** Arduino **

Arduino 是一款面向初学者的开源硬件平台,特别适合简单的机器人项目。它具有丰富的社区资源和众多的库,可以快速实现传感器集成和执行器控制。但它的处理能力有限,不适合复杂或计算密集的应用。在我的项目中,Arudino 是使用很少的,因为它的处理能力有限,主频低,拓展性差,不适合复杂的机器人项目。但是对于初学者来说,Arduino 是一个很好的入门平台。而且 Arduino 的生态系统很完善,有很多的库和教程,可以帮助初学者快速入门。很多的开源项目也是基于 Arduino 架构的,所以对于初学者来说,Arduino 是一个很好的选择。

** Raspberry Pi **

Raspberry Pi 作为一款微型计算机,具有强大的处理能力和丰富的接口,非常适合需要高级视频处理和数据处理的机器人项目。然而,它的功耗较高,且在实时控制方面不如专用微控制器稳定。

我主要使用过三个版本的树莓派,分别是树莓派 3 B,树莓派 4 B 和树莓派 Zero。树莓派 3 B 是我最早使用的一款树莓派,主要用于一些小型的项目,比如说家庭服务器,智能家居等。不过由于处理能力有限,所以后来就换成了树莓派 4 B。

树莓派 4 B 8 Gb 是我目前使用的一款树莓派,主要用于一些小型的机器人项目,比如说智能小车,智能家居等。考虑到性能,我尝试使用过 Ubuntu 的桌面版,但是发现还是不足以稳定运行,后来更换成 Ubuntu server 版,性能稳定很多, 可以稳定运行 ROS noetic 版本。该项目链接

树莓派 Zero 是之前考虑尺寸限制而使用的一款树莓派,由于当时是 Hackathon 比赛,所以开发时间有限,并且需要一些定制化需求,所以使用了树莓派 Zero, 该项目链接

** STM32 **

STM 32 系列微控制器以其高性能、低功耗而受到青睐。适合需要进行精密控制和实时处理的机器人项目。不过,其开发环境相对复杂,初学者可能需要较长的学习曲线。

STM 32 f 103 c 8 t 6 和 STM 32 f 103 zet 6 是我使用过的两款 STM 32 微控制器,也算是我的入门微控制器。之前也有基于 STM 32 的项目,比如说一个基于 STM 32 的四轴飞行器,该项目链接。 但是在后来的项目中,我发现 STM 32 的处理能力有限,没有很多外设支持,而且价格较贵,在一些小型项目中不是很适用。但是 STM 32 的生态系统很完善,有很多的库和教程,可以帮助初学者快速入门。很多的开源项目也是基于 STM 32 架构的,所以对于初学者来说,STM 32 是一个很好的选择。

** ESP32 **

ESP 32 提供了 Wi-Fi 和蓝牙功能,非常适合需要远程控制和数据传输的项目。它的能效比较高,但是在处理能力和资源上不如更专业的微控制器。不过 ESP 32 总体来说还是一个很好的选择,也是我使用最多的一款控制器,基于 PlatformIO 的开发环境,可以很好的支持 ESP 32 的开发。而且 ESP 32 双核 120 Mhz 的处理器,可以很好的完成嵌入式方向的任务。再加上 WiFi 和蓝牙的支持,可以很好的和 ROS 进行通信,所以在机器人项目中,ESP 32 是非常棒的选择。

rk 3566

之前在立创发现 rk 3566 这款芯片(泰山派),是一款高性能的芯片,支持 Linux 系统,可以很好的支持 ROS 的开发。最近太忙了,所以在未来我会尝试使用这款芯片,看看它的性能如何。而且由于价格极低,大概为 66 RMB(在 2023 年左右芯片荒时,STM 32 f 103 c 8 t 6 曾卖到过 40+RMB)。

2.2 EDA

** Altium Designer **

Altium Designer 是一款专业级的电路设计软件,提供强大的设计功能和仿真工具,非常适合复杂的电子项目。但是,由于其高昂的许可费用和复杂的操作界面,可能不适合初学者。

Drone-Mercury 项目中使用的是 Altium Designer,在使用时发现由于器件库不完善,需要手动添加很多器件,导致设计时间较长。而且 Altium Designer 的操作界面较为复杂,需要一定的学习曲线。但是 Altium Designer 提供了强大的仿真工具,可以帮助设计者验证电路的性能和稳定性。总体来说,Altium Designer 适合复杂的电子项目,但可能不适合初学者和一些 DIY 项目。

** 立创EDA **

立创 EDA 是一款易于使用的在线 EDA 工具,特别适合快速原型开发和小规模生产。其在线特性使得协作变得容易,但可能在功能上不如专业级软件全面。在最近两年的项目中,我主要使用立创 EDA,因为它的操作界面简单,易于上手,而且提供了丰富的器件库,可以快速设计电路。立创 EDA 还提供了在线 PCB 制造服务,可以帮助用户快速制作 PCB 板。而且立创 EDA 的价格较低,适合个人用户和小型企业。总体来说,立创 EDA 适合快速原型开发和小规模生产,但可能不适合复杂的电子项目。

2.3 Frimware

Arduino IDE

Arduino IDE 是一款用于编写和上传 Arduino 代码的集成开发环境。在机器人设计中,Arduino IDE 可以用于编写控制系统的固件,包括传感器数据的采集、执行器的控制等。但是 Arduino IDE 的功能较为有限,不适合复杂的项目。

STM HAL 库

STM HAL 库是 ST 官方提供的一款用于 STM 32 的硬件抽象层库。在机器人设计中,STM HAL 库可以用于编写 STM 32 的固件,包括外设的初始化、中断的处理等。STM HAL 库提供了丰富的 API,可以帮助开发者快速编写 STM 32 的固件。但是 STM HAL 库的学习曲线较陡,需要一定的学习成本。

STM 32 CubeIDE

STM 32 CubeIDE 是一款用于编写和上传 STM 32 代码的集成开发环境。在机器人设计中,STM 32 CubeIDE 可以用于编写实时控制系统的固件,包括姿态控制、运动控制等。由于可视化和调试功能较为强大,STM 32 CubeIDE 可以提高开发效率。而且可以结合 CubeMX 生成代码,减少开发时间。

ESP-IDF

ESP-IDF 是一款用于编写和上传 ESP 32 代码的开发框架。在机器人设计中,ESP-IDF 可以用于编写通信系统的固件,包括无线通信、数据传输等。在工作一个项目中,我使用了 ESP-IDF,发现该库的 Cpp 代码写的很好,很好的封装了一些底层的硬件操作,所以在开发过程中,可以很好的调用这些 API,减少了很多的开发时间。而且 ESP-IDF 提供了丰富的 API,可以帮助开发者快速编写 ESP 32 的固件。但是 ESP-IDF 确实入手难度较大,需要一定的 c++基础,和一定的嵌入式开发经验。

PlatformIO

PlatformIO 是一款开源的物联网开发平台,支持多种开发板和开发环境。在机器人设计中,PlatformIO 可以用于管理固件的开发、编译和上传,提高开发效率。由于都是小型或者中型的项目,所以我主要使用 PlatformIO,它的集成度很高,可以很好的支持 ESP 32 的开发。而且 PlatformIO 支持多种开发板和开发环境,不需要复杂的配置,可以快速上手。总体来说,PlatformIO 适合小型和中型项目,可以提高开发效率。对于个人项目来说,PlatformIO 是一个很好的选择。

2.4 传感器

传感器是机器人设计中的重要组成部分,用于感知机器人周围的环境和状态。常用的传感器有 IMU、激光雷达、摄像头、超声波传感器、力传感器、弯曲传感器、温湿度传感器、拉伸传感器等。

IMU

IMU(Inertial Measurement Unit)是一种惯性测量单元,用于测量机器人的姿态和运动。在机器人设计中,IMU 可以用于姿态控制、运动控制等。常用的 IMU 有 MPU 6050,MPU 9250,BNO 055 等。

激光雷达

激光雷达是一种传感器,用于测量机器人周围的环境。在机器人设计中,激光雷达可以用于环境感知、避障等。但是激光雷达价格较高,例如最便宜的激光雷达价格在 200 EUR 左右,不适合小型项目。

摄像头&RGBD

摄像头是一种传感器,用于获取机器人周围的图像信息。在机器人设计中,摄像头可以用于图像处理、目标识别等。Intel Realsense D 435 i 是一款常用的摄像头,可以用于 SLAM、目标识别等。

超声波传感器

超声波传感器是一种传感器,用于测量机器人与障碍物的距离。在机器人设计中,超声波传感器可以用于避障、定位等。但是精度和测距范围有限。

力传感器

力传感器是一种传感器,用于测量机器人施加的力。在机器人设计中,力传感器可以用于力控制、力反馈等。力传感器主要有压力传感器、应变传感器,更高级的有 6 轴力传感器,可以测量力和力矩。但是 6 轴力传感器价格较高,由于原理限制,很难做到小型化,也是一个未来的发展方向。

弯曲传感器

弯曲传感器是一种比较少见的传感器,用于测量机器人的弯曲程度。在机器人设计中,弯曲传感器可以用于姿态控制、运动控制等。弯曲传感器主要有弯曲电阻、弯曲电容等,可以测量弯曲程度。

温湿度传感器

温湿度传感器是一种传感器,用于测量机器人周围的温度和湿度。在机器人设计中,温湿度传感器可以用于环境感知、控制系统等。常用的温湿度传感器有 DHT 11,DHT 22 等。

拉伸传感器

拉伸传感器是一种传感器,用于测量机器人的拉伸程度。在机器人设计中,拉伸传感器可以用于力控制、力反馈等。拉伸传感器主要有拉伸电阻、拉伸电容等,可以测量拉伸程度。

2.5 通信

在机器人设计中,通信技术是关键组成部分,它允许机器人与外部设备、其他机器人或网络进行数据交换。

蓝牙

蓝牙技术适用于短距离通信,功耗低,成本相对较低。它非常适合用于手持设备与机器人之间的交互或低数据速率的传输。但蓝牙的通信距离和数据传输速率较低,可能不适合需要长距离或高速数据传输的应用。

WIFI

WIFI 提供较高的数据传输速度和较好的通信距离,适合需要传输大量数据或进行视频流传输的应用。在机器人控制中,WIFI 多用于远程控制、数据传输等。其稳定性和速度都比较好,可以通过 TCP/IP 协议或者 UDP 协议进行通信, 可以达到较好的通信效果。

LoRa

LoRa 是一种低功耗广域网技术,特别适合用于长距离、低功耗的通信需求。它可以支持数公里的通信距离,非常适合于大范围监控和控制应用。LoRa 的数据传输速率较低,不适合高速数据传输需求,如视频传输。

Zigbee

Zigbee 是一种低功耗的短距离无线通信技术,它的网络配置灵活,支持大量设备连接,适合用于构建复杂的传感器网络和自动化系统。 与其他通信技术相比,Zigbee 的数据传输速率较低,并且通信距离也较短,可能不适合所有类型的机器人应用。

2.6 Real-time OS

在硬件设计中,实时操作系统(RTOS)是一种关键技术,用于多任务处理和实时控制。RTOS 可以提供任务调度、中断处理、内存管理等功能,以确保机器人的稳定性和可靠性。

常用的 RTOS 有 FreeRTOS,Zephyr,RT-Thread 等。在我的项目中,主要使用过 FreeRTOS,它是一款开源的 RTOS,提供了丰富的 API 和示例代码,可以帮助开发者快速构建实时控制系统。Arduino IDE 和 PlatformIO 都支持 FreeRTOS,可以很方便的集成到项目中。

3. 软件

3.1 ROS/ ROS2

ROS(Robot Operating System)是一款机器人操作系统,提供了一系列的库和工具,用于简化机器人软件的开发。在机器人设计中,ROS 可以用于构建机器人的软件系统,包括传感器数据的处理、运动控制等。

我的大部分项目都是基于 ROS,总体来看,ROS 是一个很好的通信框架,而不是像名字一样所说的操作系统,这点可能有些误解。不过 ROS 可以很好的支持机器人的开发。但是 ROS 也有一些缺点,比如说对硬件的支持不够好,例如基于 wifi 的 ROS serial 项目,在长时间的通信中会出现断连的情况,这可能是 ROS 的通信机制导致的。

ROS 2 是 ROS 的下一代版本,由于 ROS 1 的一些缺点,ROS 2 做了很多的改进,比如说更好的通信机制(使用中间件),更好的硬件支持等(支持嵌入式和 win 10)。但是根据实际的使用体验,从 ROS 1 到 ROS 2 的迁移并不是很容易,因为 ROS 2 的一些 API 和功能和 ROS 1 不兼容,所以需要重新学习和开发。虽然 ROS 2 迭代了很久,但是 bug 还是很多,例如编译的时候会出现一些问题,或者是一些 API 的使用不够方便等。但是由于 Ubuntu 22 已经不支持 ROS 1 了,所以切换到 ROS 2 是一个必然的选择。 不过根据 Nvidia Issac sim 4.0.0 版本的更新来看,转向 ROS 2 或许也近在眼前了。

3.2 仿真

** Gazebo **

Gazebo 是一款开源的机器人仿真软件,提供了丰富的模型库和仿真环境,可以用于模拟机器人的运动和行为。在机器人设计中,Gazebo 可以用于验证机器人的控制算法、路径规划等。

** pybullet **

pybullet 是一款开源的物理引擎,提供了丰富的模型库和仿真环境,可以用于模拟机器人的运动和行为。在机器人设计中,pybullet 可以用于验证机器人的控制算法、路径规划等。所以在验证机器人控制算法,例如 wbc,ik 等,pybullet 是一个很好的选择。

** mujoco **

mujoco 是一款商业的物理引擎,提供了丰富的模型库和仿真环境,可以用于模拟机器人的运动和行为。在机器人设计中,mujoco 可以用于验证机器人的控制算法、路径规划等。但是 mujoco 的价格较高,不适合个人用户和小型企业。

unity

尽管 Unity 主要是为游戏开发设计,但其在机器人仿真领域的应用也日益增多。Unity 强大的图形处理能力和用户友好的界面使得创建逼真的仿真环境成为可能。Unity 的缺点在于,与传统的机器人仿真软件相比,它在物理精度和实时性上有所不足。但是主要用于测试自动驾驶,强化学习等,所以在机器人仿真中,Unity 是一个很好的选择。

** Nvidia Isaac Sim **

随着 Issac Sim 4.0.0 版本的推出,Orbit 也正式更名为 Isaac Lab。以下是官网介绍

  • Isaac Lab 是一款基于 Isaac Sim 平台构建的开源轻量级参考应用程序,在机器人基础模型训练中发挥着重要作用。它支持强化学习、模仿学习和迁移学习。它可以训练各种机器人实例,供开发人员探索设计和功能。
  • VSCode 与兼容性检查器的集成易于使用,为强化学习提供多 GPU 支持,通过 RTX 传感器平铺渲染提高性能,优化缓存和着色器管理。
  • 易于使用 PIP 安装和用于导入机器人等的向导。
  • 性能提升,合成数据生成 (SDG) 速度提高 80%
  • 支持 COCO 格式和用于姿势估计的自定义编写器的新 SDG 格式。
  • ROS 2 推出了支持端到端工作流程和基于图像的发布者的更好性能的版本。
  • 支持更多内置机器人:包括 1 X Neo、Unitree H 1、Agility Digit、Fourier Intelligence GR 1、Sanctuary A 1 Phoenix 和 XiaoPeng PX 5 等一系列人形机器人。还有 Universal Robots UR 20 和 UR 30 以及 Boston Dynamics Spot。

Nvidia 对机器人方向的布局可见一斑,随着越来越多的大厂(Nivdia, Apple, Meta, etc.)加入机器人方向的竞争, 也能看出来大厂对机器人的重视程度。未来会专门写一篇关于 Humaniod Robot 的文章,探究下机器人的未来发展方向。

3.3 3D 建模

blender

blender 是一款开源的三维建模软件,提供了丰富的模型库和建模工具,可以用于设计机器人的外观和结构。在机器人设计中,blender 可以用于建模、渲染等。

此外, USD(Universal Scene Description) 是一种开放的场景描述文件格式,由皮克斯公司开发,用于描述三维场景的几何、材质、动画等信息。USD 可以用于构建复杂的三维场景,支持多种软件和引擎,如 blender,unity,unreal 等。在机器人设计中,USD 可以用于构建机器人的三维模型、动画等。USD 相对于 URDF 要更加灵活,可以支持更多的功能,例如动画,材质等。在 Sim 2 Real 的研究中,USD 是一个很好的选择。

4. 算法

算法是机器人设计中的核心部分,它决定了机器人的感知、决策和控制能力。常用的算法有感知、运动学与动力学、机器人控制、路径规划与运动规划、决策与自主性、多机器人系统等。

由于算法的种类繁多,这里只列举了一些常用的算法,还有相应的项目链接,可以查看更多的细节。

4.1. 感知(Perception)

感知,根据我的理解,是如何处理和使用传感器数据,以获取关于机器人周围环境的信息。感知包括传感器数据处理、计算机视觉、三维感知等。根据不同的传感器类型和应用场景,感知可以采用不同的方法和算法。

4.1.1 传感器数据处理

  • 传感器融合

  • 卡尔曼滤波(Kalman Filter)

  • 扩展卡尔曼滤波(Extended Kalman Filter, EKF)
  • 粒子滤波(Particle Filter)

  • 数据预处理

  • 噪声过滤

  • 数据校准

4.1.2 计算机视觉

  • 图像处理

  • 边缘检测

  • 特征提取

  • 目标识别

  • 物体检测(如 YOLO, SSD)

  • 物体识别(如 VGG, ResNet)

  • 深度学习

  • 卷积神经网络(CNN)

  • 生成对抗网络(GAN)

4.1.3 三维感知

  • 点云处理

  • 点云配准(ICP 算法)

  • 点云分割

  • 深度相机

  • 立体视觉

  • 深度学习方法(如 PointNet)

4.1.4 相关项目

4.2. 运动学与动力学(Kinematics and Dynamics)

在机械臂和移动机器人的设计中,运动学和动力学是非常重要的部分。运动学描述了机器人的运动规律,动力学描述了机器人的力学特性。运动学和动力学的研究可以帮助我们设计机器人的控制系统,实现精准的运动和力控制。

4.2.1 运动学

  • 正运动学

  • 关节空间到任务空间的映射

  • 逆运动学

  • 任务空间到关节空间的映射

  • 约束运动学

  • 笛卡尔空间约束

4.2.2 动力学

  • 动力学建模

  • 牛顿-欧拉法

  • 拉格朗日法

  • 动力学控制

  • 力控制

  • 阻抗控制

4.2.3 机器人运动学与动力学项目

4.3. 机器人控制(Robot Control)

机器人控制是机器人设计中的核心部分,它决定了机器人的运动和行为。机器人控制可以分为经典控制和先进控制两种类型,根据不同的应用场景和需求,可以选择不同的控制方法。其中 MPC(模型预测控制)在人型机器人和自动驾驶领域有着广泛的应用。

4.3.1 经典控制

  • PID 控制

  • 比例-积分-微分控制器

  • 自适应控制

  • 自适应 PID 控制

  • 模型参考自适应控制(MRAC)

4.3.2 先进控制

  • 最优控制

  • 线性二次型调节器(LQR)

  • 模型预测控制(MPC)

  • 非线性控制

  • 滑模控制

  • 反馈线性化

4.3.3 机器人控制项目

4.4. 路径规划与运动规划(Path Planning and Motion Planning)

路径规划和运动规划决定了机器人的运动轨迹和行为。路径规划描述了机器人如何从起点到终点,运动规划描述了机器人如何在给定的路径上运动。路径规划和运动规划的研究可以帮助我们设计机器人的自主导航和运动控制系统。

4.4.1 路径规划

  • 图搜索算法

  • A 算法

  • Dijkstra 算法

  • 采样基方法

  • 快速扩展随机树(RRT)

  • RRT

4.4.2 运动规划

  • 轨迹生成

  • 三次样条插值

  • 多项式轨迹

  • 约束优化

  • 动力学约束下的路径优化

  • 时间最优控制

4.4.3 路径规划与运动规划项目

4.5. 决策与自主性(Decision Making and Autonomy)

决策和自主性是机器人设计中的高级部分,它决定了机器人的智能和自主能力。决策和自主性的研究可以帮助我们设计机器人的自主导航和任务执行系统。随着深度学习和强化学习的发展,决策和自主性的研究也在不断进步。

最近看了很多这个方向的论文,后续可能会专门整理一篇综述来介绍这个方向的发展。

4.5.1 状态估计

  • 贝叶斯滤波
  • 马尔可夫定位
  • 蒙特卡罗定位

4.5.2 强化学习

  • 值函数方法

  • Q 学习

  • 深度 Q 网络(DQN)

  • 策略梯度方法

  • 策略梯度

  • 近端策略优化(PPO)

  • Actor-Critic 方法

  • 深度确定性策略梯度(DDPG)

  • Asynchronous Advantage Actor-Critic(A 3 C)
  • Advantage Actor-Critic(A 2 C)

  • Multi-Agent Reinforcement Learning

  • MADDPG

  • MARL
  • AlphaZero
  • Reinforcement Learning from Human Feedback

4.5.3 模仿学习

  • 行为克隆

  • 逆强化学习

4.5.4 项目

5. Tools

在这个部分对一些常用的工具进行简单的介绍,包括 IDE、仿真软件、虚拟环境等。此外也涉及了大模型的几款相关的工具。

5.1 IDE (Integrated Development Environment)

IDE(集成开发环境)是软件开发中必不可少的工具,能够提高开发效率,提供代码编写、调试和运行的一站式服务。IDE 有很多种,适用于不同的编程语言和开发需求。下面主要介绍下我使用过的三种 IDE,分别是 Visual Studio Code、PyCharm 和 CLion。

5.1.1 Visual Studio Code

Visual Studio Code(VS Code)是一款由微软开发的免费、开源的代码编辑器。它支持多种编程语言,并且有丰富的扩展和插件。VS Code 的优点包括跨平台支持(Windows、macOS 和 Linux),启动快,性能好。它拥有大量的扩展和插件,可以满足各种开发需求,并且内置 Git 支持,方便进行版本控制。VS Code 还支持多种语言的调试功能。然而,许多高级功能依赖于插件,可能导致插件管理复杂。此外,对于大型项目,可能会有性能问题。VS Code 适合各类开发者使用,尤其是需要快速上手和灵活配置的开发者。

个人还是非常喜欢 VS Code,基本上可以满足所有的需求,配合上各种插件就是非常强大的生产力工具。VS Code 提供很多非常好用的插件,比如 Copilot, Markdown, PlatformIO, Git, SSH etc.

5.1.2 PyCharm

PyCharm 是 JetBrains 公司开发的一款专为 Python 开发设计的 IDE,提供了强大的代码分析和调试功能。PyCharm 的优点在于其智能代码补全和分析功能,提高开发效率。它内置数据库工具、调试器和测试工具,方便管理和调试项目。对科学计算和数据分析的支持也很好,集成了如 Jupyter Notebook 等工具,并且支持 Django、Flask 等 Python Web 框架。然而,PyCharm 相比轻量级编辑器,启动较慢,内存消耗大。此外,PyCharm 的社区版功能有限,专业版需付费。PyCharm 适合专注于 Python 开发的程序员,尤其是需要处理复杂项目和科学计算的开发者。对于一般项目,可以先尝试社区版。

5.1.3 CLion

CLion 是 JetBrains 公司开发的一款跨平台 C/C++ IDE,提供了智能代码补全、重构和导航功能。CLion 的优点包括跨平台支持(Windows、macOS 和 Linux),强大的代码分析和补全功能,以及内置 GDB 和 LLDB 调试器,方便调试代码。CLion 还全面支持 CMake,方便项目构建和管理。然而,CLion 启动较慢,内存占用较高,并且需要购买许可证,免费试用期有限。CLion 适合专业的 C/C++开发者,尤其是需要处理大型项目和复杂调试任务的用户。对于个人项目,可以考虑免费选项如 Visual Studio Code 配合 C++插件。

5.2 MATLAB & Simulink

MATLAB 是一款由 MathWorks 公司开发的高层次编程语言和交互式环境,广泛用于科学计算、工程设计和仿真。Simulink 是 MATLAB 的一个附加工具包,用于多领域仿真和模型驱动设计。

MATLAB 是一个非常好的工具,在控制仿真领域的地位是不可撼动的。但是需要考虑的是许可证的问题,很多大学和大厂都没有相关的许可证,这同样也是 Pycharm 和 Clion 面临的问题。

5.3 Git

  • 简介:Git 是一个分布式版本控制系统,用于跟踪源代码的变更,协同开发和管理项目。
    优点
  • 分布式:每个开发者都有完整的版本库,支持离线工作。
  • 高效管理:分支和合并操作高效,适合大型项目和团队协作。
  • 广泛应用:被广泛应用于各类软件项目,拥有丰富的社区资源和工具支持。
    缺点
  • 学习曲线陡峭:对初学者来说,命令行操作和概念可能较复杂。
  • 历史管理复杂:在处理复杂的历史记录时,可能需要额外工具和技巧。
    建议:强烈推荐所有开发者学习和使用 Git,配合 GitHub、GitLab 等平台,可以极大提高团队协作效率。对于初学者,可以从 GUI 工具(如 Sourcetree)入手,逐步熟悉命令行操作。

5.4 Virtual Environment

虚拟环境用于隔离项目的依赖,确保不同项目之间的兼容性和独立性。

5.4.1 Conda/Anaconda

Conda 是一个开源的包管理和环境管理系统,而 Anaconda 是包含 Conda 的 Python/R 发行版,预装了大量科学计算包。Conda 的优点在于简化包安装和管理,解决依赖冲突问题,方便创建和切换虚拟环境,隔离项目依赖。此外,Anaconda 内置了大量科学计算和数据分析包。然而,Anaconda 自带大量包,占用空间较大,安装包也较大;在某些地区,默认源速度较慢,需要配置镜像源。对于需要处理多个 Python 项目和科学计算的开发者,Conda 和 Anaconda 是非常适合的选择。对于轻量级需求,可以考虑使用 Miniconda。

5.4.2 Docker

Docker 是一个开源的容器化平台,用于自动化应用部署和管理。它的优点包括每个容器都有独立的运行环境,确保项目隔离;在不同操作系统上保持一致的开发和生产环境;支持容器编排工具(如 Kubernetes)进行大规模部署。然而,Docker 需要学习 Dockerfile 编写和容器管理的基本概念,具有一定的学习成本;在某些情况下,容器化可能带来一定的性能开销。Docker 适合需要跨平台部署和大规模应用的开发者。初学者可以从简单的 Docker 容器管理开始,逐步学习高级特性。

5.4.3 WSL/WSL 2

WSL(Windows Subsystem for Linux)是微软推出的在 Windows 上运行 Linux 二进制可执行文件的兼容层,WSL 2 是其升级版本,提供更高的性能和完整的 Linux 内核。WSL 的优点包括在 Windows 上无缝运行 Linux 工具和脚本,无需虚拟机开销;WSL 2 提供与原生 Linux 相近的性能;方便在 Windows 上进行 Linux 开发。缺点是某些低级系统功能可能与原生 Linux 存在差异;需要一定的系统资源,尤其是 WSL 2。WSL 适合在 Windows 上进行 Linux 开发的用户,尤其是需要频繁在两个系统间切换的开发者。

5.4.4 VMware/VirtualBox

VMware 和 VirtualBox 是两款流行的虚拟机软件,用于在一台物理计算机上运行多个操作系统。它们的优点在于每个虚拟机都有独立的操作系统和资源,提供完整隔离;可以运行多种操作系统,测试不同环境;支持快照功能,方便恢复到之前的状态。然而,虚拟机软件需要大量的内存和存储资源,资源消耗大;相比原生运行,虚拟机的性能有所下降。VMware 和 VirtualBox 适合需要测试多个操作系统和进行复杂环境模拟的用户。对于资源有限的系统,可以考虑轻量级虚拟化解决方案。

5.5 LLM (Large Language Models)

基于大模型的机器人控制目前停留在科研阶段,目前很难复现和测试,这里讲一下几个个大模型的应用,算是可以尝试的几个工具。

5.5.1 OLLAMA

Ollama 是一个开源的大型语言模型服务工具,它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。 Ollama 的主要功能是在 Docker 容器内部署和管理大型语言模型(LLM),使得用户能够快速地在本地运行这些模型。

ollama 的部署非常简单,只需要简单地几步就可以轻松的在本地跑大模型。

5.5.2 Continue

Continue 允许你在 Visual Studio Code 和 JetBrains 中轻松创建自己的编码助手,使用开源的大型语言模型。这一切都可以完全在你的笔记本电脑上运行,或者将 Ollama 部署在服务器上,根据你的需要远程提供代码补全和聊天体验。Continue 的优点在于其灵活性和易用性,使得开发者可以在本地或远程环境中无缝集成编码助手。然而,初学者可能需要一些时间来熟悉如何配置和使用这些工具。对于需要在开发过程中集成智能助手的开发者,Continue 提供了一个强大的解决方案。

这个可以算是 GitHub copilot 的本地化平替。

5.5.3 AnythingLLM

AnythingLLM 可以快速的建立一个本地化知识库的框架, 以下来自于官网:

AnythingLLM 是一个全栈应用程序,可以使用商用现成的大型语言模型或流行的开源 LLM 和向量数据库解决方案,构建一个私人 ChatGPT。你可以在本地运行,也可以远程托管,并能够智能地与任何你提供的文档进行对话。AnythingLLM 将你的文档分成称为工作区的对象。工作区类似于线程,但增加了文档的容器化。工作区可以共享文档,但彼此不通信,从而保持每个工作区的上下文清晰。

一些 AnythingLLM 的主要功能包括:
- 多用户实例支持和权限管理
- 工作区内的代理(浏览网页、运行代码等)
- 为你的网站定制的嵌入式聊天小部件
- 支持多种文档类型(PDF、TXT、DOCX 等)
- 从简单的 UI 管理向量数据库中的文档
- 两种聊天模式:对话模式和查询模式。对话模式保留先前的问题和修改,查询模式则是简单的文档问答
- 聊天中的引用功能
- 完全云部署准备
- 支持“自带 LLM”模式
- 极其高效的成本节约措施,用于管理非常大的文档。你永远不会因为嵌入一个大型文档或转录而多次付费,比其他文档聊天机器人解决方案节省 90%的成本
- 完整的开发者 API,用于自定义集成

英文版:

Robotics