JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
revolute_joint.hpp
Go to the documentation of this file.
1// Copyright (c) JSim contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the LGPLv3 license file in the root directory of this project.
4
5#pragma once
6
8
9namespace frcsim {
10
22class RevoluteJoint : public JointBase {
23 public:
24 RevoluteJoint(RigidBody* body_a, RigidBody* body_b, const Vector3& axis_local)
25 : JointBase(JointType::kRevolute, body_a, body_b),
26 axis_local_(axis_local.normalized()) {}
27
28 const Vector3& axisLocal() const { return axis_local_; }
29
30 void setLimits(double min_angle_rad, double max_angle_rad) {
31 has_limits_ = true;
32 min_angle_rad_ = min_angle_rad;
33 max_angle_rad_ = max_angle_rad;
34 }
35 void clearLimits() { has_limits_ = false; }
36 bool hasLimits() const { return has_limits_; }
37 double minAngle() const { return min_angle_rad_; }
38 double maxAngle() const { return max_angle_rad_; }
39
40 void setMotorTarget(double target_velocity_radps, double max_torque_nm) {
41 has_motor_ = true;
42 motor_target_velocity_radps_ = target_velocity_radps;
43 motor_max_torque_nm_ = max_torque_nm;
44 }
45 bool hasMotor() const { return has_motor_; }
46 double motorTargetVelocity() const { return motor_target_velocity_radps_; }
47 double motorMaxTorque() const { return motor_max_torque_nm_; }
48
49 void solveConstraint(double dt_s, int iterations) override;
50 double constraintError() const override;
51
52 private:
53 Vector3 axis_local_{Vector3::unitZ()};
54
55 bool has_limits_{false};
56 double min_angle_rad_{0.0};
57 double max_angle_rad_{0.0};
58
59 bool has_motor_{false};
60 double motor_target_velocity_radps_{0.0};
61 double motor_max_torque_nm_{0.0};
62};
63
64} // namespace frcsim
JointBase(JointType type, RigidBody *body_a, RigidBody *body_b)
Definition joint_base.hpp:71
void clearLimits()
Definition revolute_joint.hpp:35
double motorMaxTorque() const
Definition revolute_joint.hpp:47
double minAngle() const
Definition revolute_joint.hpp:37
void setLimits(double min_angle_rad, double max_angle_rad)
Definition revolute_joint.hpp:30
double constraintError() const override
void setMotorTarget(double target_velocity_radps, double max_torque_nm)
Definition revolute_joint.hpp:40
double motorTargetVelocity() const
Definition revolute_joint.hpp:46
void solveConstraint(double dt_s, int iterations) override
RevoluteJoint(RigidBody *body_a, RigidBody *body_b, const Vector3 &axis_local)
Definition revolute_joint.hpp:24
double maxAngle() const
Definition revolute_joint.hpp:38
const Vector3 & axisLocal() const
Definition revolute_joint.hpp:28
bool hasMotor() const
Definition revolute_joint.hpp:45
bool hasLimits() const
Definition revolute_joint.hpp:36
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
Definition vector.hpp:13
JointType
Definition joint_base.hpp:13
@ kRevolute
Definition joint_base.hpp:14
3D vector utility used throughout JSim physics.
Definition vector.hpp:22
static constexpr Vector3 unitZ() noexcept
Returns the +Z basis vector.
Definition vector.hpp:396