FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CableJointMoment.h
1#pragma once
2
3#include <Eigen/Eigen>
4
5#include <cmath>
6
7namespace RbCable
8{
12constexpr double kBendingDampingRatio = 0.05;
13
20constexpr double kTwistDampingRatio = 1.0;
21
26{
27 Eigen::Vector3d stiffness;
28 Eigen::Vector3d damping;
29
41 static JointLaw Of(double bendingStiffness, double torsionStiffness, double length, double inertiaBending, double inertiaTwist)
42 {
43 const auto damping = [&](double ratio, double inertia, double stiffness) { return 2.0 * ratio * std::sqrt(inertia * stiffness / length); };
44 const double bending = damping(kBendingDampingRatio, inertiaBending, bendingStiffness);
45 return {{bendingStiffness, bendingStiffness, torsionStiffness}, {bending, bending, damping(kTwistDampingRatio, inertiaTwist, torsionStiffness)}};
46 }
47};
48
63inline Eigen::Vector3d JointMomentOnNext(const JointLaw& law, double length, const Eigen::Quaterniond& q, const Eigen::Quaterniond& qNext,
64 const Eigen::Vector3d& w, const Eigen::Vector3d& wNext)
65{
66 const Eigen::Matrix3d R = q.toRotationMatrix();
67 const Eigen::Vector3d relativeVector = (q.conjugate() * qNext).vec();
68 const Eigen::Vector3d relativeRate = R.transpose() * (wNext - w);
69 const Eigen::Vector3d momentInFrame = -2.0 / length * law.stiffness.cwiseProduct(relativeVector) - law.damping.cwiseProduct(relativeRate);
70 return R * momentInFrame;
71}
72} // namespace RbCable
Definition CableJointMoment.h:26
Eigen::Vector3d damping
c_b, c_b, c_t [N m s].
Definition CableJointMoment.h:28
Eigen::Vector3d stiffness
EI, EI, GJ [N m^2].
Definition CableJointMoment.h:27
static JointLaw Of(double bendingStiffness, double torsionStiffness, double length, double inertiaBending, double inertiaTwist)
Definition CableJointMoment.h:41