diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5dd0c3d..0a029b7 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -20,6 +20,7 @@
"files.trimTrailingWhitespace": true,
"editor.formatOnSave": true,
"editor.tabSize": 2,
+ "editor.detectIndentation": false,
"autoDocstring.startOnNewLine": false,
"autoDocstring.docstringFormat": "google-notypes",
"python.autoComplete.extraPaths": [
diff --git a/auv_control_demos/CHANGELOG.md b/auv_control_demos/CHANGELOG.md
new file mode 100644
index 0000000..5144491
--- /dev/null
+++ b/auv_control_demos/CHANGELOG.md
@@ -0,0 +1,14 @@
+# Changelog for package auv_control_demos
+
+## 0.2.1 (2025-06-03)
+
+- Updates the individual_controller and chained_controllers demos to use the
+current `hydrodynamics` API and the new adaptive integral terminal sliding mode
+controller.
+
+## 0.2.0 (2025-05-03)
+
+## 0.1.0 (2025-04-27)
+
+- Updates the individual_controller and chained_controllers demos to use the
+correct topic names
diff --git a/auv_control_demos/chained_controllers/README.md b/auv_control_demos/chained_controllers/README.md
index 21b6453..657ab5e 100644
--- a/auv_control_demos/chained_controllers/README.md
+++ b/auv_control_demos/chained_controllers/README.md
@@ -23,16 +23,16 @@ applies a PWM command to the hardware interface.
The output should resemble:
```bash
- integral_sliding_mode_controller[velocity_controllers/IntegralSlidingModeController] active
- thruster_allocation_matrix_controller[thruster_allocation_matrix_controller/ThrusterAllocationMatrixController] active
- thruster_1_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_2_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_3_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_4_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_5_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_6_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_7_controller[thruster_controllers/PolynomialThrustCurveController] active
- thruster_8_controller[thruster_controllers/PolynomialThrustCurveController] active
+ adaptive_integral_terminal_sliding_mode_controller velocity_controllers/AdaptiveIntegralTerminalSlidingModeController active
+ thruster_allocation_matrix_controller thruster_allocation_matrix_controller/ThrusterAllocationMatrixController active
+ thruster_8_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_7_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_6_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_5_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_4_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_3_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_2_controller thruster_controllers/PolynomialThrustCurveController active
+ thruster_1_controller thruster_controllers/PolynomialThrustCurveController active
```
3. Verify that the hardware interfaces have been properly loaded by opening
@@ -46,57 +46,55 @@ applies a PWM command to the hardware interface.
```bash
command interfaces
- integral_sliding_mode_controller/rx/velocity [available] [unclaimed]
- integral_sliding_mode_controller/ry/velocity [available] [unclaimed]
- integral_sliding_mode_controller/rz/velocity [available] [unclaimed]
- integral_sliding_mode_controller/x/velocity [available] [unclaimed]
- integral_sliding_mode_controller/y/velocity [available] [unclaimed]
- integral_sliding_mode_controller/z/velocity [available] [unclaimed]
- thruster_1_controller/thruster_1_joint/effort [available] [claimed]
- thruster_1_joint/effort [available] [claimed]
- thruster_2_controller/thruster_2_joint/effort [available] [claimed]
- thruster_2_joint/effort [available] [claimed]
- thruster_3_controller/thruster_3_joint/effort [available] [claimed]
- thruster_3_joint/effort [available] [claimed]
- thruster_4_controller/thruster_4_joint/effort [available] [claimed]
- thruster_4_joint/effort [available] [claimed]
- thruster_5_controller/thruster_5_joint/effort [available] [claimed]
- thruster_5_joint/effort [available] [claimed]
- thruster_6_controller/thruster_6_joint/effort [available] [claimed]
- thruster_6_joint/effort [available] [claimed]
- thruster_7_controller/thruster_7_joint/effort [available] [claimed]
- thruster_7_joint/effort [available] [claimed]
- thruster_8_controller/thruster_8_joint/effort [available] [claimed]
- thruster_8_joint/effort [available] [claimed]
- thruster_allocation_matrix_controller/rx/effort [available] [claimed]
- thruster_allocation_matrix_controller/ry/effort [available] [claimed]
- thruster_allocation_matrix_controller/rz/effort [available] [claimed]
- thruster_allocation_matrix_controller/x/effort [available] [claimed]
- thruster_allocation_matrix_controller/y/effort [available] [claimed]
- thruster_allocation_matrix_controller/z/effort [available] [claimed]
+ adaptive_integral_terminal_sliding_mode_controller/rx/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/ry/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/rz/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/x/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/y/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/z/velocity [available] [unclaimed]
+ thruster_1_controller/thruster_1_joint/effort [available] [claimed]
+ thruster_1_joint/pwm [available] [claimed]
+ thruster_2_controller/thruster_2_joint/effort [available] [claimed]
+ thruster_2_joint/pwm [available] [claimed]
+ thruster_3_controller/thruster_3_joint/effort [available] [claimed]
+ thruster_3_joint/pwm [available] [claimed]
+ thruster_4_controller/thruster_4_joint/effort [available] [claimed]
+ thruster_4_joint/pwm [available] [claimed]
+ thruster_5_controller/thruster_5_joint/effort [available] [claimed]
+ thruster_5_joint/pwm [available] [claimed]
+ thruster_6_controller/thruster_6_joint/effort [available] [claimed]
+ thruster_6_joint/pwm [available] [claimed]
+ thruster_7_controller/thruster_7_joint/effort [available] [claimed]
+ thruster_7_joint/pwm [available] [claimed]
+ thruster_8_controller/thruster_8_joint/effort [available] [claimed]
+ thruster_8_joint/pwm [available] [claimed]
+ thruster_allocation_matrix_controller/rx/effort [available] [claimed]
+ thruster_allocation_matrix_controller/ry/effort [available] [claimed]
+ thruster_allocation_matrix_controller/rz/effort [available] [claimed]
+ thruster_allocation_matrix_controller/x/effort [available] [claimed]
+ thruster_allocation_matrix_controller/y/effort [available] [claimed]
+ thruster_allocation_matrix_controller/z/effort [available] [claimed]
state interfaces
- rx/velocity
- ry/velocity
- rz/velocity
- x/velocity
- y/velocity
- z/velocity
```
-4. State feedback can be provided to ISMC using the controller's state
+4. State feedback can be provided to AITSMC using the controller's state
interfaces or a topic. To demonstrate the topic-based interface, run the
following command:
```bash
+<<<<<<< HEAD
ros2 topic pub /integral_sliding_mode_controller/system_state geometry_msgs/msg/Twist
+=======
+ ros2 topic pub /adaptive_integral_terminal_sliding_mode_controller/system_state nav_msgs/msg/Odometry
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
```
-5. The ISMC accepts reference commands sent over a topic or a reference
+5. The AITSMC accepts reference commands sent over a topic or a reference
interface. Run the following command in a separate terminal to provide the
controller with a dummy reference input:
```bash
- ros2 topic pub /integral_sliding_mode_controller/reference geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"
+ ros2 topic pub /adaptive_integral_terminal_sliding_mode_controller/reference geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"
```
6. Each of the implemented controllers publishes controller state information to
@@ -111,23 +109,23 @@ applies a PWM command to the hardware interface.
```bash
header:
stamp:
- sec: 1710818346
- nanosec: 252453476
+ sec: 1748936962
+ nanosec: 907678344
frame_id: ''
dof_state:
name: thruster_2_joint
- reference: -39.79632414479818
+ reference: -63.32823451272053
feedback: 0.0
feedback_dot: 0.0
error: 0.0
error_dot: 0.0
- time_step: 0.033380572
+ time_step: 0.033281545
output: 1134.0
```
This output indicates that the controller chaining was successful. In
particular, we can see that the velocity commands sent to the
- `integral_sliding_mode_controller` are converted to thrust values, which is
+ `adaptive_integral_terminal_sliding_mode_controller` are converted to thrust values, which is
reflected in the `thruster_controller` output.
## Files used for this demo
@@ -136,14 +134,15 @@ applies a PWM command to the hardware interface.
- [chaining.launch.py](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/launch/chaining.launch.py)
- Controllers:
- - [Integral Sliding Mode Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/velocity_controllers)
+ - [Adaptive Integral Terminal Sliding Mode Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/velocity_controllers)
- [Thruster Allocation Matrix Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/thruster_allocation_matrix_controller)
- [Polynomial Thrust Curve Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/thruster_controllers)
- Controller Config:
- - [chained_controllers.yaml](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/config/chained_controllers.yaml)
+ - [chained.controllers.yaml](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/config/chained_controllers.yaml)
- Xacro Files:
- - [chained_config.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained_config.xacro)
- - [chained_ros2_control.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained_ros2_control.xacro)
- - [chained_urdf.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained_urdf.xacro)
+ - [chained.config.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained.config.xacro)
+ - [chained.ros2_control.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained.ros2_control.xacro)
+ - [chained.urdf.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained.urdf.xacro)
+ - [chained.model.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/chained_controllers/xacro/chained.urdf.xacro)
diff --git a/auv_control_demos/chained_controllers/config/chained_controllers.yaml b/auv_control_demos/chained_controllers/config/chained_controllers.yaml
index 9ffce54..8c61ded 100644
--- a/auv_control_demos/chained_controllers/config/chained_controllers.yaml
+++ b/auv_control_demos/chained_controllers/config/chained_controllers.yaml
@@ -2,8 +2,8 @@ controller_manager:
ros__parameters:
update_rate: 30 # Hz
- integral_sliding_mode_controller:
- type: velocity_controllers/IntegralSlidingModeController
+ adaptive_integral_terminal_sliding_mode_controller:
+ type: velocity_controllers/AdaptiveIntegralTerminalSlidingModeController
thruster_allocation_matrix_controller:
type: thruster_allocation_matrix_controller/ThrusterAllocationMatrixController
@@ -32,24 +32,48 @@ controller_manager:
thruster_8_controller:
type: thruster_controllers/PolynomialThrustCurveController
-integral_sliding_mode_controller:
+adaptive_integral_terminal_sliding_mode_controller:
ros__parameters:
- use_external_measured_states: true
reference_controller: thruster_allocation_matrix_controller
+ use_external_measured_states: true
gains:
- rho: 20.0
- lambda: 200.0
- Kp: [10.0, 10.0, 6.0, 3.0, 6.0, 10.0]
- hydrodynamics:
- mass: 13.5
- weight: 114.80
- buoyancy: 112.80
- moments_of_inertia: [0.16, 0.16, 0.16]
- added_mass: [-5.50, -12.70, -14.60, -0.12, -0.12, -0.12]
- center_of_buoyancy: [0.0, 0.0, 0.0]
- center_of_gravity: [0.0, 0.0, 0.0]
- linear_damping: [-4.03, -6.22, -5.18, -0.07, -0.07, -0.07]
- quadratic_damping: [-18.18, -21.66, -36.99, -1.55, -1.55, -1.55]
+ lambda: 0.9
+ x:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ y:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ z:
+ alpha: 12.0
+ k1_min: 0.4
+ k2: 0.8
+ k_theta: 2.0
+ mu: 0.01
+ rx:
+ alpha: 0.5
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ ry:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 1.0
+ k_theta: 2.0
+ mu: 0.01
+ rz:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
thruster_allocation_matrix_controller:
ros__parameters:
diff --git a/auv_control_demos/chained_controllers/launch/chaining.launch.py b/auv_control_demos/chained_controllers/launch/chaining.launch.py
index de4104b..ad4d79f 100644
--- a/auv_control_demos/chained_controllers/launch/chaining.launch.py
+++ b/auv_control_demos/chained_controllers/launch/chaining.launch.py
@@ -40,7 +40,7 @@ def generate_launch_description():
[
FindPackageShare("auv_control_demos"),
"xacro",
- "chained_config.xacro",
+ "chained.config.xacro",
]
),
]
@@ -51,7 +51,7 @@ def generate_launch_description():
package="controller_manager",
executable="spawner",
arguments=[
- "integral_sliding_mode_controller",
+ "adaptive_integral_terminal_sliding_mode_controller",
"--controller-manager",
["", "controller_manager"],
],
diff --git a/auv_control_demos/chained_controllers/xacro/chained_config.xacro b/auv_control_demos/chained_controllers/xacro/chained.config.xacro
similarity index 64%
rename from auv_control_demos/chained_controllers/xacro/chained_config.xacro
rename to auv_control_demos/chained_controllers/xacro/chained.config.xacro
index 1e17ed6..6d1e771 100644
--- a/auv_control_demos/chained_controllers/xacro/chained_config.xacro
+++ b/auv_control_demos/chained_controllers/xacro/chained.config.xacro
@@ -2,8 +2,8 @@
-
-
-
+
+
+
diff --git a/auv_control_demos/chained_controllers/xacro/chained.model.xacro b/auv_control_demos/chained_controllers/xacro/chained.model.xacro
new file mode 100644
index 0000000..e5a0d2d
--- /dev/null
+++ b/auv_control_demos/chained_controllers/xacro/chained.model.xacro
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auv_control_demos/chained_controllers/xacro/chained_ros2_control.xacro b/auv_control_demos/chained_controllers/xacro/chained.ros2_control.xacro
similarity index 53%
rename from auv_control_demos/chained_controllers/xacro/chained_ros2_control.xacro
rename to auv_control_demos/chained_controllers/xacro/chained.ros2_control.xacro
index 95696d9..7f00692 100644
--- a/auv_control_demos/chained_controllers/xacro/chained_ros2_control.xacro
+++ b/auv_control_demos/chained_controllers/xacro/chained.ros2_control.xacro
@@ -7,42 +7,6 @@
false
-
-
- 0.0
-
-
-
-
-
- 0.0
-
-
-
-
-
- 0.0
-
-
-
-
-
- 0.0
-
-
-
-
-
- 0.0
-
-
-
-
-
- 0.0
-
-
-
diff --git a/auv_control_demos/chained_controllers/xacro/chained.urdf.xacro b/auv_control_demos/chained_controllers/xacro/chained.urdf.xacro
new file mode 100644
index 0000000..c74492c
--- /dev/null
+++ b/auv_control_demos/chained_controllers/xacro/chained.urdf.xacro
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auv_control_demos/chained_controllers/xacro/chained_urdf.xacro b/auv_control_demos/chained_controllers/xacro/chained_urdf.xacro
deleted file mode 100644
index d663453..0000000
--- a/auv_control_demos/chained_controllers/xacro/chained_urdf.xacro
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/auv_control_demos/individual_controller/README.md b/auv_control_demos/individual_controller/README.md
index 34e2432..1615e36 100644
--- a/auv_control_demos/individual_controller/README.md
+++ b/auv_control_demos/individual_controller/README.md
@@ -22,7 +22,7 @@ to launch a single controller.
The output should resemble:
```bash
- integral_sliding_mode_controller[velocity_controllers/IntegralSlidingModeController] active
+ adaptive_integral_terminal_sliding_mode_controller velocity_controllers/AdaptiveIntegralTerminalSlidingModeController active
```
3. Check that the hardware interfaces have been properly loaded by opening
@@ -36,25 +36,25 @@ to launch a single controller.
```bash
command interfaces
- integral_sliding_mode_controller/rx/velocity [available] [unclaimed]
- integral_sliding_mode_controller/ry/velocity [available] [unclaimed]
- integral_sliding_mode_controller/rz/velocity [available] [unclaimed]
- integral_sliding_mode_controller/x/velocity [available] [unclaimed]
- integral_sliding_mode_controller/y/velocity [available] [unclaimed]
- integral_sliding_mode_controller/z/velocity [available] [unclaimed]
- rx/effort [available] [claimed]
- ry/effort [available] [claimed]
- rz/effort [available] [claimed]
- x/effort [available] [claimed]
- y/effort [available] [claimed]
- z/effort [available] [claimed]
+ adaptive_integral_terminal_sliding_mode_controller/rx/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/ry/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/rz/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/x/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/y/velocity [available] [unclaimed]
+ adaptive_integral_terminal_sliding_mode_controller/z/velocity [available] [unclaimed]
+ rx/effort [available] [claimed]
+ ry/effort [available] [claimed]
+ rz/effort [available] [claimed]
+ x/effort [available] [claimed]
+ y/effort [available] [claimed]
+ z/effort [available] [claimed]
state interfaces
- rx/velocity
- ry/velocity
- rz/velocity
- x/velocity
- y/velocity
- z/velocity
+ rx/velocity
+ ry/velocity
+ rz/velocity
+ x/velocity
+ y/velocity
+ z/velocity
```
4. State feedback can be sent to the controller using a topic or the
@@ -62,22 +62,26 @@ to launch a single controller.
topic-based interface:
```bash
+<<<<<<< HEAD
ros2 topic pub /integral_sliding_mode_controller/system_state geometry_msgs/msg/Twist
+=======
+ ros2 topic pub /adaptive_integral_terminal_sliding_mode_controller/system_state nav_msgs/msg/Odometry
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
```
-5. The ISMC accepts reference commands sent via a topic or the controller's
+5. The AITSMC accepts reference commands sent via a topic or the controller's
reference interfaces. Run the following command in a separate terminal to
provide the controller with a dummy reference input:
```bash
- ros2 topic pub /integral_sliding_mode_controller/reference geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"
+ ros2 topic pub /adaptive_integral_terminal_sliding_mode_controller/reference geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"
```
6. The current state of the controller can be observed on the `~/status` topic.
For example,
```bash
- ros2 topic echo /integral_sliding_mode_controller/status
+ ros2 topic echo /adaptive_integral_terminal_sliding_mode_controller/status
```
Should yield an output similar to the following:
@@ -85,8 +89,8 @@ to launch a single controller.
```bash
header:
stamp:
- sec: 1710817505
- nanosec: 673791332
+ sec: 1748936374
+ nanosec: 519996894
frame_id: ''
dof_states:
- name: x
@@ -95,15 +99,15 @@ to launch a single controller.
feedback_dot: 0.0
error: 0.5
error_dot: 0.0
- time_step: 0.004459243
- output: 102.03798479512044
+ time_step: 0.033335234
+ output: 176.02789696997084
- name: y
reference: 0.0
feedback: 0.0
feedback_dot: 0.0
error: 0.0
error_dot: 0.0
- time_step: 0.004459243
+ time_step: 0.033335234
output: 0.0
- name: z
reference: 0.0
@@ -111,15 +115,15 @@ to launch a single controller.
feedback_dot: 0.0
error: 0.0
error_dot: 0.0
- time_step: 0.004459243
- output: -2.0
+ time_step: 0.033335234
+ output: -3.034099999999995
- name: rx
reference: 0.0
feedback: 0.0
feedback_dot: 0.0
error: 0.0
error_dot: 0.0
- time_step: 0.004459243
+ time_step: 0.033335234
output: 0.0
- name: ry
reference: 0.0
@@ -127,7 +131,7 @@ to launch a single controller.
feedback_dot: 0.0
error: 0.0
error_dot: 0.0
- time_step: 0.004459243
+ time_step: 0.033335234
output: 0.0
- name: rz
reference: 0.2
@@ -135,11 +139,12 @@ to launch a single controller.
feedback_dot: 0.0
error: 0.2
error_dot: 0.0
- time_step: 0.004459243
- output: 3.479864118728659
+ time_step: 0.033335234
+ output: 0.8183158752505321
+ ---
```
- This output also demonstrates that the ISMC is functional. Any changes to
+ This output also demonstrates that the AITSMC is functional. Any changes to
the reference command or state are reflected in the output of this topic.
### Files used for this demo
@@ -148,12 +153,13 @@ to launch a single controller.
- [individual.launch.py](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/launch/individual.launch.py)
- Controllers:
- - [Integral Sliding Mode Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/velocity_controllers)
+ - [Adaptive Integral Terminal Sliding Mode Controller](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/tree/main/velocity_controllers)
- Controller Config:
- [individual_controller.yaml](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/config/individual_controller.yaml)
- Xacro Files:
- - [individual_config.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual_config.xacro)
- - [individual_ros2_control.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual_ros2_control.xacro)
- - [individual_urdf.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual_urdf.xacro)
+ - [individual.config.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual.config.xacro)
+ - [individual.ros2_control.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual.ros2_control.xacro)
+ - [individual.urdf.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual.urdf.xacro)
+ - [individual.model.xacro](https://github.com/Robotic-Decision-Making-Lab/auv_controllers/blob/main/auv_control_demos/individual_controller/xacro/individual.model.xacro)
diff --git a/auv_control_demos/individual_controller/config/individual_controller.yaml b/auv_control_demos/individual_controller/config/individual_controller.yaml
index d5faa7f..a7f1177 100644
--- a/auv_control_demos/individual_controller/config/individual_controller.yaml
+++ b/auv_control_demos/individual_controller/config/individual_controller.yaml
@@ -2,23 +2,47 @@ controller_manager:
ros__parameters:
update_rate: 30 # Hz
- integral_sliding_mode_controller:
- type: velocity_controllers/IntegralSlidingModeController
+ adaptive_integral_terminal_sliding_mode_controller:
+ type: velocity_controllers/AdaptiveIntegralTerminalSlidingModeController
-integral_sliding_mode_controller:
+adaptive_integral_terminal_sliding_mode_controller:
ros__parameters:
use_external_measured_states: true
gains:
- rho: 20.0
- lambda: 200.0
- Kp: [10.0, 10.0, 6.0, 3.0, 6.0, 10.0]
- hydrodynamics:
- mass: 13.5
- weight: 114.80
- buoyancy: 112.80
- moments_of_inertia: [0.16, 0.16, 0.16]
- added_mass: [-5.50, -12.70, -14.60, -0.12, -0.12, -0.12]
- center_of_buoyancy: [0.0, 0.0, 0.0]
- center_of_gravity: [0.0, 0.0, 0.0]
- linear_damping: [-4.03, -6.22, -5.18, -0.07, -0.07, -0.07]
- quadratic_damping: [-18.18, -21.66, -36.99, -1.55, -1.55, -1.55]
+ lambda: 0.9
+ x:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ y:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ z:
+ alpha: 12.0
+ k1_min: 0.4
+ k2: 0.8
+ k_theta: 2.0
+ mu: 0.01
+ rx:
+ alpha: 0.5
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
+ ry:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 1.0
+ k_theta: 2.0
+ mu: 0.01
+ rz:
+ alpha: 12.0
+ k1_min: 0.1
+ k2: 0.4
+ k_theta: 2.0
+ mu: 0.01
diff --git a/auv_control_demos/individual_controller/launch/individual.launch.py b/auv_control_demos/individual_controller/launch/individual.launch.py
index 5d709f5..155ad85 100644
--- a/auv_control_demos/individual_controller/launch/individual.launch.py
+++ b/auv_control_demos/individual_controller/launch/individual.launch.py
@@ -38,7 +38,7 @@ def generate_launch_description():
[
FindPackageShare("auv_control_demos"),
"xacro",
- "individual_config.xacro",
+ "individual.config.xacro",
]
),
]
@@ -74,7 +74,7 @@ def generate_launch_description():
package="controller_manager",
executable="spawner",
arguments=[
- "integral_sliding_mode_controller",
+ "adaptive_integral_terminal_sliding_mode_controller",
"--controller-manager",
["", "controller_manager"],
],
diff --git a/auv_control_demos/individual_controller/xacro/individual_config.xacro b/auv_control_demos/individual_controller/xacro/individual.config.xacro
similarity index 62%
rename from auv_control_demos/individual_controller/xacro/individual_config.xacro
rename to auv_control_demos/individual_controller/xacro/individual.config.xacro
index 0706330..ce0a688 100644
--- a/auv_control_demos/individual_controller/xacro/individual_config.xacro
+++ b/auv_control_demos/individual_controller/xacro/individual.config.xacro
@@ -2,8 +2,8 @@
-
-
-
+
+
+
diff --git a/auv_control_demos/individual_controller/xacro/individual.model.xacro b/auv_control_demos/individual_controller/xacro/individual.model.xacro
new file mode 100644
index 0000000..e5a0d2d
--- /dev/null
+++ b/auv_control_demos/individual_controller/xacro/individual.model.xacro
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auv_control_demos/individual_controller/xacro/individual_ros2_control.xacro b/auv_control_demos/individual_controller/xacro/individual.ros2_control.xacro
similarity index 100%
rename from auv_control_demos/individual_controller/xacro/individual_ros2_control.xacro
rename to auv_control_demos/individual_controller/xacro/individual.ros2_control.xacro
diff --git a/auv_control_demos/individual_controller/xacro/individual_urdf.xacro b/auv_control_demos/individual_controller/xacro/individual.urdf.xacro
similarity index 100%
rename from auv_control_demos/individual_controller/xacro/individual_urdf.xacro
rename to auv_control_demos/individual_controller/xacro/individual.urdf.xacro
diff --git a/auv_control_demos/package.xml b/auv_control_demos/package.xml
index e43b061..8394233 100644
--- a/auv_control_demos/package.xml
+++ b/auv_control_demos/package.xml
@@ -2,9 +2,14 @@
auv_control_demos
+<<<<<<< HEAD
0.0.1
Example package that includes demos for using auv_controllers in individual and
chained modes
+=======
+ 0.2.1
+ Example package that includes demos for using auv_controllers in individual and chained modes
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
Colin Mitchell
Everardo Gonzalez
diff --git a/auv_control_msgs/CHANGELOG.md b/auv_control_msgs/CHANGELOG.md
new file mode 100644
index 0000000..bf7ce60
--- /dev/null
+++ b/auv_control_msgs/CHANGELOG.md
@@ -0,0 +1,15 @@
+# Changelog for package auv_control_msgs
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+- Implements the EndEffectorTrajectory message
+- Implements the EndEffectorTrajectoryPoint message
+- Implements the EndEffectorTrajectoryControllerState message
+- Adds the FollowEndEffectorTrajectory action
+
+## 0.1.0 (2025-04-27)
+
+- Implements the IKControllerStateStamped message to support the new IK
+controller
diff --git a/auv_control_msgs/package.xml b/auv_control_msgs/package.xml
index 5ee32cb..52531f6 100644
--- a/auv_control_msgs/package.xml
+++ b/auv_control_msgs/package.xml
@@ -2,7 +2,11 @@
auv_control_msgs
+<<<<<<< HEAD
0.0.1
+=======
+ 0.2.1
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
Custom messages for AUV controllers
Rakesh Vivekanandan
diff --git a/auv_controllers/CHANGELOG.md b/auv_controllers/CHANGELOG.md
new file mode 100644
index 0000000..c868f9e
--- /dev/null
+++ b/auv_controllers/CHANGELOG.md
@@ -0,0 +1,19 @@
+# Changelog for package auv_controllers
+
+## 0.2.1 (2025-06-03)
+
+- Fixes the auv_control_demos configurations
+
+## 0.2.0 (2025-05-03)
+
+- Adds the end effector trajectory controller
+
+## 0.1.0 (2025-04-27)
+
+- Adds the adaptive integral terminal sliding mode controller
+- Adds the task priority IK solver
+- Adds the IK whole-body controller
+- Adds the odom topic sensor
+- Adds the controller_common package
+- Adds the Gazebo passthrough thruster controller
+- Adds the thruster rotation rate controller
diff --git a/auv_controllers/package.xml b/auv_controllers/package.xml
index 53a9e8f..a2a9c2a 100644
--- a/auv_controllers/package.xml
+++ b/auv_controllers/package.xml
@@ -3,7 +3,11 @@
auv_controllers
+<<<<<<< HEAD
0.0.1
+=======
+ 0.2.1
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
Meta package for auv_controllers
Evan Palmer
diff --git a/controller_common/CHANGELOG.md b/controller_common/CHANGELOG.md
new file mode 100644
index 0000000..9b65e0f
--- /dev/null
+++ b/controller_common/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Changelog for package controller_common
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+- Adds the common::math::isclose method for comparing doubles
+
+## 0.1.0 (2025-04-27)
+
+- Ports reset message functions and error calculation to a common API
diff --git a/controller_common/package.xml b/controller_common/package.xml
new file mode 100644
index 0000000..1ca0cb1
--- /dev/null
+++ b/controller_common/package.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ controller_common
+ 0.2.1
+ Common interfaces for controllers used in this project
+
+ Evan Palmer
+ MIT
+
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers.git
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers/issues
+
+ Evan Palmer
+
+ ament_cmake
+
+ rclcpp
+ geometry_msgs
+ nav_msgs
+
+
+ ament_cmake
+
+
diff --git a/end_effector_trajectory_controller/CHANGELOG.md b/end_effector_trajectory_controller/CHANGELOG.md
new file mode 100644
index 0000000..a30279d
--- /dev/null
+++ b/end_effector_trajectory_controller/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Changelog for package controller_common
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+- Implements the end_effector_trajectory_controller
diff --git a/end_effector_trajectory_controller/include/end_effector_trajectory_controller/end_effector_trajectory_controller.hpp b/end_effector_trajectory_controller/include/end_effector_trajectory_controller/end_effector_trajectory_controller.hpp
new file mode 100644
index 0000000..8b513fe
--- /dev/null
+++ b/end_effector_trajectory_controller/include/end_effector_trajectory_controller/end_effector_trajectory_controller.hpp
@@ -0,0 +1,139 @@
+// Copyright 2025, Evan Palmer
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#pragma once
+
+#include
+
+#include "auv_control_msgs/action/follow_end_effector_trajectory.hpp"
+#include "auv_control_msgs/msg/end_effector_trajectory_controller_state.hpp"
+#include "controller_common/common.hpp"
+#include "controller_interface/controller_interface.hpp"
+#include "end_effector_trajectory_controller/trajectory.hpp"
+#include "rclcpp/rclcpp.hpp"
+#include "rclcpp_action/server.hpp"
+#include "realtime_tools/realtime_buffer.hpp"
+#include "realtime_tools/realtime_publisher.hpp"
+#include "realtime_tools/realtime_server_goal_handle.hpp"
+#include "tf2/exceptions.hpp"
+#include "tf2_ros/buffer.h"
+#include "tf2_ros/transform_listener.h"
+
+// auto-generated by generate_parameter_library
+#include
+
+namespace end_effector_trajectory_controller
+{
+
+class EndEffectorTrajectoryController : public controller_interface::ControllerInterface
+{
+public:
+ EndEffectorTrajectoryController() = default;
+
+ auto on_init() -> controller_interface::CallbackReturn override;
+
+ // NOLINTNEXTLINE(modernize-use-nodiscard)
+ auto command_interface_configuration() const -> controller_interface::InterfaceConfiguration override;
+
+ // NOLINTNEXTLINE(modernize-use-nodiscard)
+ auto state_interface_configuration() const -> controller_interface::InterfaceConfiguration override;
+
+ auto on_configure(const rclcpp_lifecycle::State & previous_state) -> controller_interface::CallbackReturn override;
+
+ auto on_activate(const rclcpp_lifecycle::State & previous_state) -> controller_interface::CallbackReturn override;
+
+ auto update(const rclcpp::Time & time, const rclcpp::Duration & period) -> controller_interface::return_type override;
+
+protected:
+ auto update_parameters() -> void;
+
+ auto configure_parameters() -> controller_interface::CallbackReturn;
+
+ auto update_end_effector_state() -> controller_interface::return_type;
+
+ [[nodiscard]] auto validate_trajectory(const auv_control_msgs::msg::EndEffectorTrajectory & trajectory) const -> bool;
+
+ // controller state
+ using ControllerState = auv_control_msgs::msg::EndEffectorTrajectoryControllerState;
+ std::shared_ptr> controller_state_pub_;
+ std::unique_ptr> rt_controller_state_pub_;
+
+ // the end effector states can be captured in one of three ways:
+ // 1. using the topic interface - when available, this is preferred over the tf2 interface
+ // 2. using the state interfaces - this is the default, but often not available
+ // 3. using tf2 - this is the most common interface, but requires a transform to be published and is not as robust
+ realtime_tools::RealtimeBuffer end_effector_state_;
+ std::shared_ptr> end_effector_state_sub_;
+
+ std::unique_ptr tf_buffer_;
+ std::unique_ptr tf_listener_;
+
+ // the end effector trajectories can be set using either the topic or action server
+ // the action server is preferred and easier to integrate into state-machines/behavior trees, but can be a bit
+ // cumbersome to interface with. on the other hand, the topic interface is easier to use, but doesn't integrate
+ // well with high-level coordinators
+ realtime_tools::RealtimeBuffer rt_trajectory_;
+ std::shared_ptr> trajectory_sub_;
+
+ using FollowTrajectory = auv_control_msgs::action::FollowEndEffectorTrajectory;
+ using RealtimeGoalHandle = realtime_tools::RealtimeServerGoalHandle;
+ using RealtimeGoalHandlePtr = std::shared_ptr;
+ using RealtimeGoalHandleBuffer = realtime_tools::RealtimeBuffer;
+
+ std::shared_ptr> action_server_;
+ RealtimeGoalHandleBuffer rt_active_goal_;
+ realtime_tools::RealtimeBuffer rt_goal_in_progress_;
+ std::shared_ptr goal_handle_timer_;
+ std::chrono::nanoseconds action_monitor_period_ = std::chrono::nanoseconds(50000000); // 50ms
+
+ realtime_tools::RealtimeBuffer rt_first_sample_; // used to sample the trajectory for the first time
+ realtime_tools::RealtimeBuffer rt_holding_position_; // used to hold the current end effector pose
+
+ // the update period is used to sample the "next" trajectory point
+ rclcpp::Duration update_period_{0, 0};
+
+ std::shared_ptr param_listener_;
+ end_effector_trajectory_controller::Params params_;
+
+ // error tolerances
+ // the default tolerances are extracted from the parameters and applied when the action interface is not used
+ // if the action interface is being used, then the tolerances set in the goal are applied
+ double default_path_tolerance_, default_goal_tolerance_;
+ realtime_tools::RealtimeBuffer rt_goal_tolerance_, rt_path_tolerance_;
+
+ std::vector dofs_;
+ std::size_t n_dofs_;
+
+ rclcpp::Logger logger_{rclcpp::get_logger("end_effector_trajectory_controller")};
+
+private:
+ template
+ auto write_command(T & interfaces, const geometry_msgs::msg::Pose & command) -> void
+ {
+ const std::vector vec = common::messages::to_vector(command);
+ for (const auto & [i, dof] : std::views::enumerate(dofs_)) {
+ if (!interfaces[i].set_value(vec[i])) {
+ RCLCPP_WARN(logger_, "Failed to set command for joint %s", dof.c_str()); // NOLINT
+ }
+ }
+ }
+};
+
+} // namespace end_effector_trajectory_controller
diff --git a/end_effector_trajectory_controller/package.xml b/end_effector_trajectory_controller/package.xml
new file mode 100644
index 0000000..3cc36fc
--- /dev/null
+++ b/end_effector_trajectory_controller/package.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ end_effector_trajectory_controller
+ 0.2.1
+ End effector trajectory tracking controller for UVMS control
+
+ Evan Palmer
+ MIT
+
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers.git
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers/issues
+
+ Evan Palmer
+
+ ament_cmake
+ eigen3_cmake_module
+
+ eigen
+ rclcpp
+ ros2_control
+ controller_interface
+ hardware_interface
+ rclcpp_lifecycle
+ generate_parameter_library
+ control_msgs
+ geometry_msgs
+ controller_common
+ auv_control_msgs
+ rclcpp_action
+ lifecycle_msgs
+
+
+ ament_cmake
+
+
diff --git a/ik_solvers/CHANGELOG.md b/ik_solvers/CHANGELOG.md
new file mode 100644
index 0000000..b829884
--- /dev/null
+++ b/ik_solvers/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog for package ik_solvers
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+- Replace instances of `Eigen::Affine3d` with `Eigen::Isometry3d`
+
+## 0.1.0 (2025-04-27)
+
+- Implements a task priority IK solver with support for end effector pose
+tracking and joint limits
diff --git a/ik_solvers/package.xml b/ik_solvers/package.xml
new file mode 100644
index 0000000..d788e50
--- /dev/null
+++ b/ik_solvers/package.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ ik_solvers
+ 0.2.1
+ Inverse kinematics solvers used for whole-body control
+
+ Evan Palmer
+ MIT
+
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers.git
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers/issues
+
+ Evan Palmer
+
+ ament_cmake
+ eigen3_cmake_module
+
+ eigen
+ rclcpp
+ pluginlib
+ rclcpp_lifecycle
+ trajectory_msgs
+ generate_parameter_library
+ pinocchio
+
+
+ ament_cmake
+
+
diff --git a/thruster_allocation_matrix_controller/CHANGELOG.md b/thruster_allocation_matrix_controller/CHANGELOG.md
new file mode 100644
index 0000000..a6f27e5
--- /dev/null
+++ b/thruster_allocation_matrix_controller/CHANGELOG.md
@@ -0,0 +1,10 @@
+# Changelog for package thruster_allocation_matrix_controller
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+## 0.1.0 (2025-04-27)
+
+- Updates the minimum CMake version to CMake 23 and upgrades the API to use
+C++ 23
diff --git a/thruster_allocation_matrix_controller/package.xml b/thruster_allocation_matrix_controller/package.xml
index 1a53e28..c9a9a23 100644
--- a/thruster_allocation_matrix_controller/package.xml
+++ b/thruster_allocation_matrix_controller/package.xml
@@ -3,7 +3,11 @@
thruster_allocation_matrix_controller
+<<<<<<< HEAD
0.0.2
+=======
+ 0.2.1
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
Thruster allocation matrix controller used to convert wrench commands into thrust commands
Evan Palmer
diff --git a/thruster_controllers/CHANGELOG.md b/thruster_controllers/CHANGELOG.md
new file mode 100644
index 0000000..71b3e38
--- /dev/null
+++ b/thruster_controllers/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog for package thruster_controllers
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+## 0.1.0 (2025-04-27)
+
+- Implements the Gazebo passthrough thruster controller
+- Implements the thruster rotation rate controller
+- Updates the API to use C++ 23
+- Bumps the minimum CMake version to CMake 23
diff --git a/thruster_controllers/package.xml b/thruster_controllers/package.xml
index 6060d89..8836b62 100644
--- a/thruster_controllers/package.xml
+++ b/thruster_controllers/package.xml
@@ -2,7 +2,11 @@
thruster_controllers
+<<<<<<< HEAD
0.0.1
+=======
+ 0.2.1
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
A collection of thruster controllers for AUV control
ros
diff --git a/topic_sensors/CHANGELOG.md b/topic_sensors/CHANGELOG.md
new file mode 100644
index 0000000..3b39871
--- /dev/null
+++ b/topic_sensors/CHANGELOG.md
@@ -0,0 +1,9 @@
+# Changelog for package topic_sensors
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+## 0.1.0 (2025-04-27)
+
+- Implements an nav_msgs/Odometry topic sensor
diff --git a/topic_sensors/package.xml b/topic_sensors/package.xml
new file mode 100644
index 0000000..19a21c9
--- /dev/null
+++ b/topic_sensors/package.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ topic_sensors
+ 0.2.1
+ Sensor plugins used to write ROS 2 messages to state interfaces
+
+ Evan Palmer
+ MIT
+
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers.git
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers/issues
+
+ Akshaya Agrawal
+ Evan Palmer
+
+ ament_cmake
+
+ rclcpp
+ ros2_control
+ pluginlib
+ hardware_interface
+ nav_msgs
+ geometry_msgs
+ generate_parameter_library
+ controller_common
+ message_transforms
+
+
+ ament_cmake
+
+
diff --git a/velocity_controllers/CHANGELOG.md b/velocity_controllers/CHANGELOG.md
new file mode 100644
index 0000000..16f54a0
--- /dev/null
+++ b/velocity_controllers/CHANGELOG.md
@@ -0,0 +1,17 @@
+# Changelog for package velocity_controllers
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+## 0.1.0 (2025-04-27)
+
+- Updates the API to use C++ 23
+- Bumps the minimum CMake version to CMake 23
+- Implements the adaptive integral terminal sliding mode controller
+- Changes the integral sliding mode controller external state message interface
+from the geometry_msgs/TwistStamped message type to nav_msgs/Odometry
+- Makes the integral sliding mode controller joint names configurable for users
+that want to integrate prefixes into the command/state interfaces
+- Updates the integral sliding mode controller to use the latest hydrodynamics
+parsing capabilities
diff --git a/velocity_controllers/package.xml b/velocity_controllers/package.xml
index e4fe0c8..4044097 100644
--- a/velocity_controllers/package.xml
+++ b/velocity_controllers/package.xml
@@ -3,7 +3,11 @@
velocity_controllers
+<<<<<<< HEAD
0.0.1
+=======
+ 0.2.1
+>>>>>>> c8d798e (Update auv_control_demos configurations (#60))
A collection of velocity controllers for underwater vehicles
Evan Palmer
diff --git a/whole_body_controllers/CHANGELOG.md b/whole_body_controllers/CHANGELOG.md
new file mode 100644
index 0000000..2fdcbb6
--- /dev/null
+++ b/whole_body_controllers/CHANGELOG.md
@@ -0,0 +1,14 @@
+# Changelog for package whole_body_controllers
+
+## 0.2.1 (2025-06-03)
+
+## 0.2.0 (2025-05-03)
+
+- Replaces instances of `Eigen::Affine3d` with `Eigen::Isometry3d`
+- Fixes a bug in the ik_controller reference interfaces where the values sent
+ to the reference interfaces themselves (i.e., not as a message) were not
+ being transformed into the appropriate coordinate frame for Pinocchio.
+
+## 0.1.0 (2025-04-27)
+
+- Implements an IK controller for controlling a UVMS with a single manipulator
diff --git a/whole_body_controllers/package.xml b/whole_body_controllers/package.xml
new file mode 100644
index 0000000..6342cea
--- /dev/null
+++ b/whole_body_controllers/package.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ whole_body_controllers
+ 0.2.1
+ Whole-body controllers for underwater vehicle manipulator systems
+
+ Evan Palmer
+ MIT
+
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers.git
+ https://github.com/Robotic-Decision-Making-Lab/auv_controllers/issues
+
+ Evan Palmer
+
+ ament_cmake
+
+ rclcpp
+ ros2_control
+ pluginlib
+ controller_interface
+ hardware_interface
+ rclcpp_lifecycle
+ generate_parameter_library
+ control_msgs
+ pinocchio
+ nav_msgs
+ message_transforms
+ controller_common
+ ik_solvers
+ auv_control_msgs
+
+
+ ament_cmake
+
+