common文件夹
AngularVelocityMapping.h
angularVelocityToQuaternionTimeDerivative
函数:- 输入:一个表示方向的四元数
q
。 - 输出:一个4x3的矩阵,该矩阵是旋转矩阵
E_R
的逆矩阵,用于将角速度w
映射到四元数时间导数q_dot
。 - 这个函数计算了一个特定的矩阵,它基于四元数的元素构建,用于将角速度转换为四元数导数。这个转换基于四元数的数学性质。
getMappingFromLocalAngularVelocityToEulerAnglesXyzDerivative
函数:- 输入:一个3x1的矩阵
eulerAngles
,表示欧拉角。 - 输出:一个3x3的矩阵
M
,该矩阵将局部角速度的导数转换为欧拉角的导数。 - 这个函数计算了一个矩阵,用于处理当角速度在某个坐标系(通常是体坐标系)中给出时,如何转换为欧拉角的导数。这个矩阵依赖于当前的欧拉角,因此它是依赖于姿态的。
JacobianOfAngularVelocityMapping
函数:- 输入:一个3x1的矩阵
eulerAnglesXyz
,表示XYZ顺序的欧拉角,以及一个3x1的矩阵angularVelocity
,表示角速度。 - 输出:一个6x3的雅可比矩阵,它描述了角速度到欧拉角导数的映射。
- 这个函数计算了角速度映射到欧拉角导数的雅可比矩阵。雅可比矩阵是多变量函数导数的一种表示,这里用于描述角速度和欧拉角变化之间的关系。函数内部使用了自动微分技术来高效地计算这个雅可比矩阵。
每个函数都使用了模板,这意味着它们可以处理不同的数值类型(如
double
、float
等),这增加了代码的灵活性。此外,代码中包含了对特定角度值的特殊情况的警告,例如,当绕Y轴旋转角度为±90度时,某些矩阵可能是奇异的(即行列式为零,不可逆)。SkewSymmetricMatrix.h
RotationTransforms.h & RotationTransforms.cpp
包含了多个函数模板,它们处理与旋转相关的数学运算,特别是在机器人学和三维图形中常见的四元数、欧拉角和旋转矩阵。
quaternionDistance
:这个函数计算两个四元数之间的“距离”,作为三维向量返回。这个距离实际上是两个四元数表示的旋转之间的差异。程序中,q
和qRef
分别是测量到的和期望的末端执行器四元数。函数返回的向量可以解释为从qRef
到q
的旋转轴和旋转角度。
quaternionDistanceJacobian
:计算四元数距离度量的雅可比矩阵。
getQuaternionFromEulerAnglesZyx
:将ZYX欧拉角转换为对应的四元数。
getRotationMatrixFromZyxEulerAngles
:将ZYX欧拉角转换为对应的旋转矩阵。
makeEulerAnglesUnique
:将在[-pi, pi)范围内的欧拉角调整到[-pi,pi),[-pi/2,pi/2),[-pi,pi)。
matrixToQuaternion
:将旋转矩阵转换为对应的四元数。
rotationMatrixToRotationVector
:将旋转矩阵转换为旋转向量,也称为对数映射。
rotationErrorInWorld
和rotationErrorInLocal
:计算两个旋转矩阵之间的旋转误差,可以表示为世界坐标系或本地坐标系中的旋转向量。
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
实例。