Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
f8e4c23
feat: added the math and setup of the ESKF, need some changes
Talhanc Feb 9, 2025
d11a267
feat: added in the IMU msg and DVL msg, pluss ros2 setup
Talhanc Feb 10, 2025
648e39f
feat: added ES-UKF filter
Talhanc Feb 21, 2025
59164c3
feat: added UKF fix injection step
Talhanc Feb 27, 2025
b5e1453
feat: working ukf filter is added, some issue in the ESUKF
Talhanc Mar 9, 2025
707c4f4
added in some changes to eskf and the ukf algorithm
Talhanc Mar 14, 2025
3861aab
added test script
Talhanc Mar 14, 2025
2ede07e
fixed some errors, code runs from eskf_test now
Talhanc Mar 14, 2025
60e533e
added changes to ukf
Talhanc Mar 20, 2025
b569a60
feat: Added ESKF in cpp using .hpp and .cpp, current implementation u…
Talhanc Mar 28, 2025
f0ccaf0
fix: Added correction for the IMU measurements
Talhanc Apr 2, 2025
db879db
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 3, 2025
b0e97bd
refactor: remove python eskf
Talhanc Apr 3, 2025
32e2d66
fix: added errorstate and nominalstate variables into the eskf class
Talhanc Apr 5, 2025
ed91667
feat: modified imu correction and added in tested imu noise
Talhanc Apr 17, 2025
c5f443e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 17, 2025
3bf8b94
feat: added NIS plots
Talhanc May 8, 2025
10c8ec9
fix: issues in innovation and jacobian of the measurement
Talhanc May 13, 2025
e08ef73
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 13, 2025
4078d43
feat: Adding in the TUKF and the UKF
Talhanc May 14, 2025
338bb9e
fix: added tukf and simulation
Talhanc May 18, 2025
7a88044
fix:added in some minor fixes
Talhanc May 20, 2025
017a1f8
added the cpp code
Talhanc May 30, 2025
723da45
fix: removing tukf and some errors in eskf
Talhanc Oct 5, 2025
1d34174
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 5, 2025
9f9c916
ci: add node test for eskf
Andeshog Oct 7, 2025
587137d
feat: Added fancy text for starting filter
Talhanc Oct 7, 2025
f3b1429
fix: moved the fancy text variable outside the initiation
Talhanc Oct 7, 2025
0659e42
Fixed some of the suggested comments, add debug flag
AhmedBorch Oct 15, 2025
15dd969
updating the published topic name
AhmedBorch Oct 19, 2025
fe06684
implemented the sensor concept requirement, added eskf.tpp so that I …
AhmedBorch Oct 19, 2025
c1275ef
removed gravity from the state vector and put it seperately for effic…
AhmedBorch Oct 26, 2025
4c869db
added code for errors and for covariance publishing
AhmedBorch Nov 5, 2025
2b340d8
added the modifications from Talha's branch /dev/auv-navigation-eskf …
AhmedBorch Nov 9, 2025
9771158
removed unused variable and old comment
AhmedBorch Nov 9, 2025
e7e6450
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Nov 9, 2025
ed87ce6
clang-format fix
AhmedBorch Jan 5, 2026
8e9fb52
ament_cpplint fixes
AhmedBorch Jan 5, 2026
56fbccc
missing dependency
AhmedBorch Jan 5, 2026
03f2dae
updating yaml, P(cov) is 15*15 now
AhmedBorch Jan 5, 2026
ec0ffcf
update for the separate vortex_utils
AhmedBorch Jan 5, 2026
08b88d2
puting the covariance in the odom msg. Fixing the orientation for IMU…
AhmedBorch Jan 16, 2026
0ea28f0
clnag-format fix
AhmedBorch Jan 16, 2026
c945ab8
code for debugging+NEES/RMSE test file + fix for odom ang vel output
AhmedBorch Feb 6, 2026
e9c9e78
removing debugging topics, fixing the initial orientation, and the ro…
AhmedBorch Feb 10, 2026
99a506b
fixes for review findings
AhmedBorch Feb 18, 2026
0e6621d
fixes for pre-commit
AhmedBorch Feb 18, 2026
574b64c
fixes for pre-commit
AhmedBorch Feb 18, 2026
a5287ad
Added the transaltion parameters of imu,dvl, and depth_sensor. Added …
AhmedBorch Feb 25, 2026
de9098e
merging main
AhmedBorch Feb 25, 2026
59f0835
Switching dvl to the actual simulated topic. Removing duplicate lines…
AhmedBorch Feb 25, 2026
013db77
adding the effect from translation of dvl and imu frames
AhmedBorch Mar 2, 2026
1801343
fixing dvl rotation matrix, publishing vel in body frame
AhmedBorch Mar 2, 2026
dadc5cc
Merge branch 'main' into dev/eskf_fuse_depth
AhmedBorch Mar 15, 2026
748dae7
Merge remote-tracking branch 'origin/main' into dev/eskf_fuse_depth
AhmedBorch Mar 15, 2026
d00ffd1
changing dvl input and params use based on latest changes in simulati…
AhmedBorch Mar 15, 2026
05d884a
Merge remote-tracking branch 'origin/main' into dev/eskf_fuse_depth
AhmedBorch Mar 27, 2026
62bd1d3
Merge remote-tracking branch 'origin/main' into dev/eskf_fuse_depth
AhmedBorch Mar 28, 2026
104c972
fusing the depth sensor, adding a separate NIS for depth and DVL
AhmedBorch Mar 28, 2026
09a81e5
change to access the params
AhmedBorch Mar 28, 2026
4cf174d
Merge remote-tracking branch 'origin/main' into dev/eskf_fuse_depth
AhmedBorch Mar 30, 2026
a7c8aa6
merging changes for transformer from easter testing26 branch
AhmedBorch Mar 30, 2026
6514e76
initial identity quat
AhmedBorch Mar 30, 2026
d602153
removing the odom/eskf topic
AhmedBorch Mar 31, 2026
1e1d921
added changes to account for imus that cancel gravity, added a yaml f…
AhmedBorch Mar 31, 2026
95b70dc
updating env params use
AhmedBorch Mar 31, 2026
e887e24
Added ins origin logic. Rotated tf2 dvl frame
jorgenfj May 14, 2026
8caa4ff
added choices to joystick ori mode launch arg
jorgenfj May 14, 2026
8023b47
add type for drone param in joystick node
jorgenfj May 14, 2026
00f599d
new waypoint mode. Renamed util scripts
vortexuser May 14, 2026
1cf6057
Merge branch 'main' into development
jorgenfj May 14, 2026
2f1dcb3
Merge branch 'main' into development
vortexuser May 14, 2026
26c1786
odom_transformer: pass through roll and pitch
jorgenfj May 18, 2026
dad5b0d
odom_transformer: added reset origin service
jorgenfj May 18, 2026
ab1e33a
Merge branch 'main' into dev/eskf_fuse_depth
jorgenfj May 18, 2026
faf456b
debug eskf publishers. Ros node cleanup
jorgenfj May 18, 2026
4e5d62e
remove imu real accel support. Remove initial imu biases
jorgenfj May 20, 2026
3db7732
added reset service call for landmark, referencefilter, waypointmanager
vortexuser May 20, 2026
2a91d70
fix gravity sign
jorgenfj May 20, 2026
580fb55
rename types: {StateQuat, StateEuler} -> {NominalState, ErrorState}
jorgenfj May 20, 2026
7d23d9b
support for gauge and absolute pressure in callback
jorgenfj May 20, 2026
12b2d3c
underscore for env member variables
jorgenfj May 20, 2026
7e5d140
env config launch arg
jorgenfj May 20, 2026
6797ae8
remove code for unaligned gyro and accel
jorgenfj May 20, 2026
e970cef
per sensor config. Config meas noise
jorgenfj May 20, 2026
32155d8
fix default dvl meas noise
jorgenfj May 21, 2026
b101367
Merge branch 'dev/eskf_fuse_depth' into development
jorgenfj May 22, 2026
d581250
made env params doubles
jorgenfj May 23, 2026
9338f3d
update naut pressure tf
jorgenfj May 23, 2026
ab1e9fd
update wit changes for eskf debugging
jorgenfj May 23, 2026
f538b1b
per sensor NIS
jorgenfj May 23, 2026
7e13a67
dvl and depth debug publishers
jorgenfj May 23, 2026
9e87a49
changed from service to topic for resetting state logic for waypoint,…
CurryMonsters May 24, 2026
4934a0c
reference filter retargeting logic on new actions
jorgenfj May 24, 2026
af803ff
add mission reset logic to rpy reference filter
jorgenfj May 24, 2026
d077a86
Feat/altitude reference (#719)
jorgenfj May 29, 2026
adf0afb
guidance target debug publisher
jorgenfj May 29, 2026
0fbb3bc
add new modes to euler reference
jorgenfj May 30, 2026
233128d
add require_altitude_convergence logic to quat reference filter
jorgenfj May 30, 2026
d10170f
Merge branch 'dev/eskf_fuse_depth' into development
jorgenfj May 30, 2026
73a2a77
refactor 'publish_debug' mode
jorgenfj May 30, 2026
1820e75
publish dvl_body and depth args
jorgenfj May 30, 2026
b825174
launch file refactor
jorgenfj May 30, 2026
5f269d5
update reference fitler omega
vortexuser May 30, 2026
0fcaa8c
update default ori mode of joystick to quat
Jun 1, 2026
0fe3742
add string debug publisher for mode and killswitch
Jun 1, 2026
1a416a6
waypoint debug publisher
Jun 1, 2026
85aa91b
update launch script to include domain-id and keyboard-joy options
vortexuser Jun 1, 2026
13b05c4
update launch script to replace message publisher with rpy publisher
vortexuser Jun 1, 2026
32da533
jørgen changes
Jun 4, 2026
6a5af11
added topic and srv to naut.yaml
jorgenfj Jun 5, 2026
d7cac5a
feat: convert thruster interface to can
forrisdahl Jun 11, 2026
19e12b1
fix: not having reset can id
forrisdahl Jun 12, 2026
29a4436
refactor: use can0 as default parameter
forrisdahl Jun 16, 2026
9ae5026
Merge pull request #721 from vortexntnu/feat/thruster-interface-can
forrisdahl Jun 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#
# See https://github.com/pre-commit/pre-commit

exclude: (^|/)(test|tests)/.*

repos:
# Standard hooks
- repo: https://github.com/pre-commit/pre-commit-hooks
Expand Down
17 changes: 9 additions & 8 deletions auv_setup/config/environments/longbeach.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
#
# Gravity value from EGM2008 12th order via wolframalpha.com
# Pressure value from 10 year average via wolframalpha.com
/**:
ros__parameters:
atmosphere:
pressure: 101500.0

atmosphere:
pressure: 101500
water:
density: 1000.0 # Freshwater
# density: 1025.0 # Saltwater

water:
density: 1000 # Freshwater
# density: 1025 # Saltwater

gravity:
acceleration: 9.79609
gravity:
acceleration: 9.79609
12 changes: 12 additions & 0 deletions auv_setup/config/environments/stonefish_sim.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Environmental parameters from the stonefish simulator
# Verify these match you scenario file
/**:
ros__parameters:
atmosphere:
pressure: 101300.0

water:
density: 1031.0 # Verify this matches the scenario config

gravity:
acceleration: 9.81
15 changes: 8 additions & 7 deletions auv_setup/config/environments/trondheim_freshwater.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
#
# Pressure value from 10 year average via wolframalpha.com
# Gravity value from EGM2008 12th order via wolframalpha.com
/**:
ros__parameters:
atmosphere:
pressure: 100000.0 # phone measurement from mclab

atmosphere:
pressure: 100000 # phone measurement from mclab
water:
density: 1000.0

water:
density: 1000

gravity:
acceleration: 9.82841
gravity:
acceleration: 9.82841
15 changes: 8 additions & 7 deletions auv_setup/config/environments/trondheim_saltwater.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
# Pressure value from 10 year average via wolframalpha.com
# Density from wolgframalpha.com query "ocean density" (default parameters)
# Gravity value from EGM2008 12th order via wolframalpha.com
/**:
ros__parameters:
atmosphere:
pressure: 101000.0 # [Pa]

atmosphere:
pressure: 101000 # [Pa]
water:
density: 1026.0 # [kg/m3]

water:
density: 1026 # [kg/m3]

gravity:
acceleration: 9.82841
gravity:
acceleration: 9.82841
9 changes: 8 additions & 1 deletion auv_setup/config/robots/nautilus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@
topics:
wrench_input: "wrench_input"
thruster_forces: "thruster_forces"
camera_light: "camera_light"
pwm_output: "pwm"
camera_light: "camera_light"
current: "power_sense_module/current"
voltage: "power_sense_module/voltage"
pressure: "pressure"
Expand All @@ -109,18 +111,21 @@
odom: "odom"
operation_mode: "operation_mode"
killswitch: "killswitch"
mission_wipe: "mission/wipe"
reference_pose: "reference_pose"
landmarks: "landmarks"
waypoint: "waypoint"
guidance:
los: "guidance/los"
dp_rpy: "guidance/dp_rpy"
dp_quat: "guidance/dp_quat"
dp_quat_target_pose: "guidance/dp_quat_target_pose"
dvl_twist: "dvl/twist"
dvl_altitude: "dvl/altitude"
imu: "imu/data_raw"
sonar_info: "fls/sonar_info"
pressure_sensor: "pressure_sensor"
pressure_sensor: "pressure"
magnetometer: "magnetometer"
gripper_servos: "gripper_servos"


Expand All @@ -131,10 +136,12 @@
landmark_convergence: "landmark_convergence"
waypoint_manager: "waypoint_manager"


services:
set_operation_mode: "set_operation_mode"
set_killswitch: "set_killswitch"
toggle_killswitch: "toggle_killswitch"
get_operation_mode: "get_operation_mode"
waypoint_addition: "waypoint_addition"
start_mission: "start_mission"
reset_odom_origin: "reset_odom_origin"
13 changes: 11 additions & 2 deletions auv_setup/description/nautilus.urdf.xacro
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<joint name="base_to_pressure_sensor" type="fixed">
<parent link="base_link"/>
<child link="pressure_sensor_link"/>
<origin xyz="-0.130 0.003 0.2414" rpy="0.0 0.0 0.0"/>
<origin xyz="-0.035 -0.115 -0.095" rpy="0.0 0.0 0.0"/>
</joint>

<!-- base to fls -->
Expand All @@ -55,7 +55,7 @@
<joint name="base_to_front_camera" type="fixed">
<parent link="base_link"/>
<child link="front_camera_link"/>
<origin xyz="0.36362 0.0 -0.023395" rpy="3.14159 0 0"/>
<origin xyz="0.36362 0.0 -0.023395" rpy="3.14159 -0.261666667 0"/>
</joint>

<xacro:realsense_d555 frame="front_camera_link" base="front_camera" name="realsense"/>
Expand Down Expand Up @@ -100,4 +100,13 @@
<limit lower="-0.033" upper="0" effort="0" velocity="0"/>
</joint>

<!-- Virtual reference frame at the centre of the gripper jaw opening -->
<link name="grip_point"></link>

<joint name="grip_point_joint" type="fixed">
<parent link="shoulder"/>
<child link="grip_point"/>
<origin xyz="0.2505 0.0 0.0" rpy="0.0 0.0 0.0"/>
</joint>

</robot>
115 changes: 115 additions & 0 deletions auv_setup/launch/mru.launch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
"""Kongsberg MRU — IMU driver.

Two modes:

standalone=true (default)
Launches a regular Node.

standalone=false
Uses LoadComposableNodes to attach to an already-running container
identified by `container_name`.
"""

import os

import yaml
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, OpaqueFunction
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import LoadComposableNodes, Node
from launch_ros.descriptions import ComposableNode

from auv_setup.launch_arg_common import (
declare_drone_and_namespace_args,
resolve_drone_and_namespace,
)


def _launch_setup(context, *args, **kwargs):
drone, namespace = resolve_drone_and_namespace(context)
standalone = LaunchConfiguration('standalone').perform(context).lower() == 'true'
container_name = LaunchConfiguration('container_name').perform(context)
host_ip = LaunchConfiguration('host_ip').perform(context)

drone_params = os.path.join(
get_package_share_directory('auv_setup'),
'config',
'robots',
f'{drone}.yaml',
)

with open(drone_params) as f:
robot_topics = yaml.safe_load(f)['/**']['ros__parameters']['topics']

parameters = [
{
"imu_pub_topic": robot_topics['imu'],
'frame_id': f'/{namespace}/imu_link',
'connection_params.remote_ip': '10.0.0.20',
'connection_params.data_remote_port': 7550,
'connection_params.data_local_port': 7551,
'connection_params.control_local_port': 7552,
'mru_settings.channel': 'UDP1',
'mru_settings.port': 7551,
'mru_settings.ip_addr': host_ip,
'mru_settings.format': 'MRUBIN',
'mru_settings.interval': 5,
'mru_settings.token': 21,
}
]

if standalone:
return [
Node(
package='mru_ros_interface',
executable='mru_ros_interface_node',
name='mru_ros_interface_node',
namespace=namespace,
parameters=parameters,
output='screen',
)
]
else:
return [
LoadComposableNodes(
target_container=container_name,
composable_node_descriptions=[
ComposableNode(
package='mru_ros_interface',
plugin='MruRosInterface',
name='mru_ros_interface_node',
namespace=namespace,
parameters=parameters,
extra_arguments=[{'use_intra_process_comms': True}],
)
],
)
]


def generate_launch_description():
return LaunchDescription(
[
DeclareLaunchArgument(
'standalone',
default_value='true',
description=(
'true = launch as a regular node; '
'false = attach to an existing container named by container_name'
),
),
DeclareLaunchArgument(
'container_name',
default_value='',
description='Container to attach to when standalone=false',
),
DeclareLaunchArgument(
'host_ip',
default_value='10.0.0.67',
description='IP address of this host machine, sent to the MRU so it knows where to stream data.',
),
]
+ declare_drone_and_namespace_args()
+ [OpaqueFunction(function=_launch_setup)]
)
74 changes: 74 additions & 0 deletions auv_setup/launch/ms5837.launch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"""MS5837 pressure/depth sensor driver."""

import os

import yaml
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, OpaqueFunction
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node

from auv_setup.launch_arg_common import (
declare_drone_and_namespace_args,
resolve_drone_and_namespace,
)


def _launch_setup(context, *args, **kwargs):
drone, namespace = resolve_drone_and_namespace(context)
environment = LaunchConfiguration('environment').perform(context)

env_params_path = os.path.join(
get_package_share_directory('auv_setup'),
'config',
'environments',
f'{environment}.yaml',
)

with open(env_params_path) as f:
env = yaml.safe_load(f)['/**']['ros__parameters']

fluid_density = env['water']['density']
atmospheric_pressure = env['atmosphere']['pressure']
gravity = env['gravity']['acceleration']

return [
Node(
package='ms5837_driver',
executable='ms5837_node',
name='ms5837_driver_node',
namespace=namespace,
parameters=[
{
'frame_id': f'{namespace}/pressure_sensor_link',
'fluid_density': fluid_density,
'atmospheric_pressure': atmospheric_pressure,
'gravity': gravity,
'publish_depth': True,
'publish_altitude': False,
}
],
output='screen',
)
]


def generate_launch_description():
return LaunchDescription(
[
DeclareLaunchArgument(
'environment',
default_value='trondheim_freshwater',
description='Environment config to load from auv_setup/config/environments/.',
choices=[
'longbeach',
'stonefish_sim',
'trondheim_freshwater',
'trondheim_saltwater',
],
),
]
+ declare_drone_and_namespace_args()
+ [OpaqueFunction(function=_launch_setup)]
)
Loading
Loading