common文件夹

AngularVelocityMapping.h

  1. angularVelocityToQuaternionTimeDerivative 函数:
      • 输入:一个表示方向的四元数 q
      • 输出:一个4x3的矩阵,该矩阵是旋转矩阵 E_R 的逆矩阵,用于将角速度 w 映射到四元数时间导数 q_dot
      • 这个函数计算了一个特定的矩阵,它基于四元数的元素构建,用于将角速度转换为四元数导数。这个转换基于四元数的数学性质。
  1. getMappingFromLocalAngularVelocityToEulerAnglesXyzDerivative 函数:
      • 输入:一个3x1的矩阵 eulerAngles,表示欧拉角。
      • 输出:一个3x3的矩阵 M,该矩阵将局部角速度的导数转换为欧拉角的导数。
      • 这个函数计算了一个矩阵,用于处理当角速度在某个坐标系(通常是体坐标系)中给出时,如何转换为欧拉角的导数。这个矩阵依赖于当前的欧拉角,因此它是依赖于姿态的。
  1. JacobianOfAngularVelocityMapping 函数:
      • 输入:一个3x1的矩阵 eulerAnglesXyz,表示XYZ顺序的欧拉角,以及一个3x1的矩阵 angularVelocity,表示角速度。
      • 输出:一个6x3的雅可比矩阵,它描述了角速度到欧拉角导数的映射。
      • 这个函数计算了角速度映射到欧拉角导数的雅可比矩阵。雅可比矩阵是多变量函数导数的一种表示,这里用于描述角速度和欧拉角变化之间的关系。函数内部使用了自动微分技术来高效地计算这个雅可比矩阵。
每个函数都使用了模板,这意味着它们可以处理不同的数值类型(如 doublefloat 等),这增加了代码的灵活性。此外,代码中包含了对特定角度值的特殊情况的警告,例如,当绕Y轴旋转角度为±90度时,某些矩阵可能是奇异的(即行列式为零,不可逆)。

SkewSymmetricMatrix.h

定义了一个模板函数 skewSymmetricMatrix,它的作用是将一个三维向量 v 转换成其反对称矩阵(也称为斜对称矩阵)表示。在数学和物理学中,这种转换常用于表示三维空间中的旋转和角动量。

反对称矩阵定义

一个三维向量 v 可以表示为 [v.x(), v.y(), v.z()]。其反对称矩阵定义为

RotationTransforms.h & RotationTransforms.cpp

包含了多个函数模板,它们处理与旋转相关的数学运算,特别是在机器人学和三维图形中常见的四元数、欧拉角和旋转矩阵。
  • quaternionDistance:这个函数计算两个四元数之间的“距离”,作为三维向量返回。这个距离实际上是两个四元数表示的旋转之间的差异。程序中,qqRef 分别是测量到的和期望的末端执行器四元数。函数返回的向量可以解释为从 qRefq 的旋转轴和旋转角度。
  • quaternionDistanceJacobian:计算四元数距离度量的雅可比矩阵。
  • getQuaternionFromEulerAnglesZyx:将ZYX欧拉角转换为对应的四元数。
  • getRotationMatrixFromZyxEulerAngles:将ZYX欧拉角转换为对应的旋转矩阵。
  • makeEulerAnglesUnique:将在[-pi, pi)范围内的欧拉角调整到[-pi,pi),[-pi/2,pi/2),[-pi,pi)。
  • matrixToQuaternion:将旋转矩阵转换为对应的四元数。
  • rotationMatrixToRotationVector:将旋转矩阵转换为旋转向量,也称为对数映射。
  • rotationErrorInWorldrotationErrorInLocal:计算两个旋转矩阵之间的旋转误差,可以表示为世界坐标系或本地坐标系中的旋转向量。
  • moduloAngleWithReference:找到一个与参考角度最接近的角度,确保角度在参考角度的π范围内。
 

RotationDerivativesTransforms.h

定义了几个函数模板,它们处理从ZYX欧拉角及其导数到全局或局部角速度的映射,以及从角速度计算欧拉角的导数。
  • getMappingFromEulerAnglesZyxDerivativeToGlobalAngularVelocity:计算从ZYX欧拉角导数到全局角速度的映射矩阵,输入的欧拉角为相对全局坐标系的。这个映射矩阵是一个3x3矩阵,用于将欧拉角的导数转换为全局坐标系中的角速度。
  • getGlobalAngularVelocityFromEulerAnglesZyxDerivatives:计算从ZYX欧拉角的导数到全局角速度的转换。它使用上面定义的映射矩阵和欧拉角的一阶导数来计算全局角速度。
  • getEulerAnglesZyxDerivativesFromGlobalAngularVelocity:从全局角速度计算ZYX欧拉角的导数。这个转换在y轴旋转角度为±π/2时是奇异的,因为这时映射矩阵不是满秩的。
  • getGlobalAngularAccelerationFromEulerAnglesZyxDerivatives:从ZYX欧拉角的一阶和二阶导数到全局角加速度的转换。它使用一阶导数的映射矩阵和二阶导数来计算角加速度。
  • getMappingFromEulerAnglesZyxDerivativeToLocalAngularVelocity:计算从ZYX欧拉角导数到局部角速度的映射矩阵。与全局角速度不同,局部角速度是相对于当前旋转坐标系的。
  • getLocalAngularVelocityFromEulerAnglesZyxDerivatives:使用局部角速度的映射矩阵和欧拉角的一阶导数来计算局部角速度。
  • getEulerAnglesZyxDerivativesFromLocalAngularVelocity:从局部角速度计算ZYX欧拉角的导数。
 

RobotInterface.h

定义了一个名为 RobotInterface 的 C++ 类,它是一个接口类,为所有机器人示例提供统一的接口。

构造函数和析构函数

  • RobotInterface() = default;:这是默认构造函数,使用 = default 指示编译器生成默认构造函数。这意味着没有特别的初始化操作。
  • virtual ~RobotInterface() = default;:这是默认析构函数,同样使用 = default 指示编译器生成默认析构函数。virtual 关键字表示这个析构函数可以在派生类中被覆盖,这是多态性的一个要求。

getReferenceManagerPtr 函数

  • virtual 关键字表示这个函数可以在派生类中被覆盖。
  • std::shared_ptr<ReferenceManagerInterface> 是返回类型,表示返回一个指向 ReferenceManagerInterface 类型的智能指针。shared_ptr 是 C++11 引入的智能指针类型,用于自动管理内存。
  • getReferenceManagerPtr() 函数名表示获取引用管理器的指针。
  • const 表示这个函数不会修改对象的状态。
  • { return nullptr; } 默认实现返回 nullptr,表示没有引用管理器。

getOptimalControlProblem 函数

  • 这个纯虚函数声明必须在派生类中实现。
  • const OptimalControlProblem& 是返回类型,表示返回一个对 OptimalControlProblem 类型的常量引用。
  • getOptimalControlProblem() 函数名表示获取最优控制问题的定义。

getInitializer 函数

  • 这是另一个纯虚函数,同样需要在派生类中实现。
  • const Initializer& 是返回类型,表示返回一个对 Initializer 类型的常量引用。
  • getInitializer() 函数名表示获取内部求解器初始化器的引用。
 

end_effector文件夹

EndEffectorKinematics.h

定义了一个名为 EndEffectorKinematics 的模板类。这个类用于计算机器人的末端执行器的运动学信息,包括位置、速度和方向误差。
  • 纯虚函数(必须由派生类实现):
    • clone 用于创建类实例的副本。
    • getIds 用于获取末端执行器的 ID 或名称。
    • getPosition 传入状态向量,返回末端执行器在世界坐标系中的位置。
    • getVelocity 传入状态向量和输入向量,返回末端执行器在世界坐标系中的速度。
    • getOrientationError 传入状态向量和参考四元数,返回末端执行器的姿态误差。
    • getPositionLinearApproximation 传入状态向量,返回末端执行器位置函数的线性近似。
    • getVelocityLinearApproximation 传入状态向量和输入向量,返回末端执行器速度函数的线性近似。
    • getOrientationErrorLinearApproximation 传入状态向量和参考四元数,返回末端执行器姿态误差函数的线性近似。
EndEffectorKinematics& operator=(const EndEffectorKinematics&) = delete;:禁止复制赋值,重载的赋值操作符被删除,这意味着你不能复制赋值 EndEffectorKinematics 实例。