Aurora 简介
本文是Fourier Aurora SDK的介绍,概述了Aurora的主要概念。
对于刚接触Aurora并希望了解其工作原理的开发者来说,这份文档非常有帮助。此外,Aurora是一个基于C++的系统,需要一定的C++编程语言基础才能充分理解代码。
什么是Aurora?
Aurora是一个专为人形机器人实时运动控制设计的系统。它在机器人系统的硬件层和上层软件层之间扮演着重要角色。一方面,Aurora与传感器、执行器等硬件组件交互,采集数据并向其发送指令;另一方面,Aurora利用一系列工具和库来创建并执行运动控制任务。这些任务包含多种全身控制器,用于跟踪诸如线性速度(用于移动)、笛卡尔空间控制(用于操作)和关节空间控制(用于运动规划)等目标。
Aurora为开发者提供了一系列控制器以支持高层应用开发。用户也可以根据Aurora的编程接口创建自己的控制器。
中心化数据结构与基于任务的编程
Aurora的核心特性是其中心化数据结构和基于任务的编程模式。
在Aurora的生命周期中,大部分工作围绕任务的创建、执行和销毁展开。每个任务设计用于实现特定功能,例如从传感器读取数据、处理数据或向设备发送数据。
Aurora包含两种任务类型:固定任务 和FSM任务 (有限状态机任务)。固定任务在Aurora生命周期中自动创建和销毁,用于执行固定的操作集,例如传感器数据读取、设备数据发送以及数据发布/订阅。
FSM任务可以在Aurora运行时动态的创建和销毁。它们会根据有限状态机实现一系列运动控制操作。用户可以通过定义状态和转移关系来创建自己的FSM任务,并将其绑定到指定的控制器上。
任务间的数据交换通过名为RobotData的共享数据结构完成。RobotData是一个中心化的数据结构,被所有Aurora任务共享,包含任务执行所需的全部数据。
例如,一个固定任务从传感器读取数据并更新RobotData中的对应字段;一个FSM任务读取机器人当前状态并更新RobotData中的指令字段;随后另一个固定任务读取该指令并将其发送至设备。
生命周期管理
任务的生命周期管理由状态管理器实现。在初始化阶段,状态管理器会执行任务的init和enter函数。随后,状态管理器会将任务的execute函数绑定到新线程,并启动该线程以周期性地执行execute函数。在退出阶段,状态管理器会执行任务的exit接口并销毁线程。
当Aurora程序启动时,首先会执行自检以确保所有必要硬件组件可用;接着创建并启动状态管理器,后者将创建并运行所有固定任务;此后状态管理器进入默认FSM状态(此时无FSM任务运行)。
当切换至新的FSM状态时,状态管理器会停止当前状态下的FSM任务并销毁其线程,随后根据新状态配置初始化新的FSM任务并创建线程运行它们。
当接收到退出信号时,Aurora会停止所有任务、销毁所有线程并关闭电机驱动。
获取SDK
gitee: https://gitee.com/FourierIntelligence/fourieraurorasdk