JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
prismatic_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 PrismaticJoint : public JointBase {
23 public:
25 const Vector3& axis_local)
26 : JointBase(JointType::kPrismatic, body_a, body_b),
27 axis_local_(axis_local.normalized()) {}
28
29 const Vector3& axisLocal() const { return axis_local_; }
30
31 void setLimits(double min_displacement_m, double max_displacement_m) {
32 has_limits_ = true;
33 min_displacement_m_ = min_displacement_m;
34 max_displacement_m_ = max_displacement_m;
35 }
36 bool hasLimits() const { return has_limits_; }
37 double minDisplacement() const { return min_displacement_m_; }
38 double maxDisplacement() const { return max_displacement_m_; }
39
40 void setMotorTarget(double target_velocity_mps, double max_force_n) {
41 has_motor_ = true;
42 motor_target_velocity_mps_ = target_velocity_mps;
43 motor_max_force_n_ = max_force_n;
44 }
45 bool hasMotor() const { return has_motor_; }
46 double motorTargetVelocity() const { return motor_target_velocity_mps_; }
47 double motorMaxForce() const { return motor_max_force_n_; }
48
49 void solveConstraint(double dt_s, int iterations) override;
50 double constraintError() const override;
51
52 private:
53 Vector3 axis_local_{Vector3::unitX()};
54
55 bool has_limits_{false};
56 double min_displacement_m_{0.0};
57 double max_displacement_m_{0.0};
58
59 bool has_motor_{false};
60 double motor_target_velocity_mps_{0.0};
61 double motor_max_force_n_{0.0};
62};
63
64} // namespace frcsim
JointBase(JointType type, RigidBody *body_a, RigidBody *body_b)
Definition joint_base.hpp:71
double maxDisplacement() const
Definition prismatic_joint.hpp:38
bool hasLimits() const
Definition prismatic_joint.hpp:36
double constraintError() const override
double motorTargetVelocity() const
Definition prismatic_joint.hpp:46
bool hasMotor() const
Definition prismatic_joint.hpp:45
const Vector3 & axisLocal() const
Definition prismatic_joint.hpp:29
void setMotorTarget(double target_velocity_mps, double max_force_n)
Definition prismatic_joint.hpp:40
double motorMaxForce() const
Definition prismatic_joint.hpp:47
PrismaticJoint(RigidBody *body_a, RigidBody *body_b, const Vector3 &axis_local)
Definition prismatic_joint.hpp:24
double minDisplacement() const
Definition prismatic_joint.hpp:37
void setLimits(double min_displacement_m, double max_displacement_m)
Definition prismatic_joint.hpp:31
void solveConstraint(double dt_s, int iterations) override
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
@ kPrismatic
Definition joint_base.hpp:15
3D vector utility used throughout JSim physics.
Definition vector.hpp:22
static constexpr Vector3 unitX() noexcept
Returns the +X basis vector.
Definition vector.hpp:392