/** * @file * * @author Max Lammers * @author Mamadou Babaei * * @section LICENSE * * Copyright (c) 2020 - 2022 SenseGlove * * @section DESCRIPTION * * Contains kinematic formulae and wrappers for Sense Glove mathematics. */ #pragma once #include #include "Fingers.hpp" #include "Platform.hpp" namespace SGCore { namespace Kinematics { class BasicHandModel; class SGCORE_API JointKinematics; class Quat; class Vect3D; }// namespace Kinematics }// namespace SGCore class SGCORE_API SGCore::Kinematics::JointKinematics { public: /// /// Perform forward Kinematics on a set of joints, defined by a start position- and rotation, /// joint angles and the lengths in between. Outputs the calculated positions and rotations. /// static bool ForwardKinematics(const Vect3D& startPosition, const Quat& startRotation, const std::vector& jointLengths, const std::vector& jointAngles, std::vector& out_newPositions, std::vector& out_newRotations); /// Calculate positions and rotations of a finger based on input angles and profile. static bool ForwardKinematics( const BasicHandModel& profile, EFinger finger, const std::vector& jointAngles, std::vector& out_newPositions, std::vector& out_newRotations); public: JointKinematics() = delete; virtual ~JointKinematics() = delete; };