JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
rigid_assembly.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
7#include <memory>
8#include <vector>
9
12
13namespace frcsim {
14
15class RevoluteJoint;
16class PrismaticJoint;
17class FixedJoint;
18
30 public:
31 RigidAssembly() = default;
32
34 RigidBody* addBody(double mass_kg);
35
37 std::vector<RigidBody>& bodies() { return bodies_; }
38 const std::vector<RigidBody>& bodies() const { return bodies_; }
39
41 RevoluteJoint* addRevoluteJoint(size_t body_a_idx, size_t body_b_idx,
42 const Vector3& axis_local);
43 PrismaticJoint* addPrismaticJoint(size_t body_a_idx, size_t body_b_idx,
44 const Vector3& axis_local);
45 FixedJoint* addFixedJoint(size_t body_a_idx, size_t body_b_idx);
46
48 std::vector<std::shared_ptr<JointBase>>& joints() { return joints_; }
49 const std::vector<std::shared_ptr<JointBase>>& joints() const {
50 return joints_;
51 }
52
55 void setRootBodyIndex(size_t idx);
56 size_t rootBodyIndex() const { return root_body_idx_; }
57
59 double totalMass() const;
60
63
65 void enableConstraints(bool enable);
66 void solveConstraints(double dt_s, int iterations);
67
68 private:
69 std::vector<RigidBody> bodies_;
70 std::vector<std::shared_ptr<JointBase>> joints_;
71 size_t root_body_idx_{0};
72};
73
74} // namespace frcsim
Rigidly locks two bodies together (no relative translation or rotation).
Definition fixed_joint.hpp:22
Slider joint that permits translation along one axis and constrains all other relative motion.
Definition prismatic_joint.hpp:22
Hinge joint that permits rotation about one axis while constraining relative translation.
Definition revolute_joint.hpp:22
PrismaticJoint * addPrismaticJoint(size_t body_a_idx, size_t body_b_idx, const Vector3 &axis_local)
void solveConstraints(double dt_s, int iterations)
void setRootBodyIndex(size_t idx)
double totalMass() const
Get total assembly mass.
const std::vector< std::shared_ptr< JointBase > > & joints() const
Definition rigid_assembly.hpp:49
size_t rootBodyIndex() const
Definition rigid_assembly.hpp:56
FixedJoint * addFixedJoint(size_t body_a_idx, size_t body_b_idx)
std::vector< std::shared_ptr< JointBase > > & joints()
Joint management.
Definition rigid_assembly.hpp:48
void enableConstraints(bool enable)
Disable/enable all constraints in assembly.
RigidBody * addBody(double mass_kg)
Add a body to this assembly (takes ownership).
Vector3 centerOfMass() const
Compute assembly center of mass in world space.
RevoluteJoint * addRevoluteJoint(size_t body_a_idx, size_t body_b_idx, const Vector3 &axis_local)
Create joints between bodies in this assembly.
const std::vector< RigidBody > & bodies() const
Definition rigid_assembly.hpp:38
std::vector< RigidBody > & bodies()
Retrieve bodies.
Definition rigid_assembly.hpp:37
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
Definition vector.hpp:13
3D vector utility used throughout JSim physics.
Definition vector.hpp:22