Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
1d64b95
added imu_bridge node
geurto Apr 8, 2026
2c9eae6
added mesh & urdf
geurto Apr 9, 2026
ec6a207
fixed linting errors
geurto Apr 10, 2026
4080cab
added license file
geurto Apr 10, 2026
d135898
switched to SmacPlanner2D; first tuning of mppi; added vehicle trajec…
geurto Feb 24, 2026
f61864b
removed superfluous target_frame="" in lidar launches; changed map to…
geurto Feb 26, 2026
e386b57
added local costmap; tuned parameters
geurto Feb 27, 2026
2ac049d
updated velodyne position on panther
geurto Mar 2, 2026
563b0d8
added realsense to panther_gps_navigation; updated camera/gps positions
geurto Mar 2, 2026
e7d69ed
changed gps hardware frame
geurto Mar 2, 2026
4607651
qol
geurto Mar 3, 2026
bab209f
qol
geurto Mar 3, 2026
edcd232
allow partial planning
geurto Mar 3, 2026
dea82f8
qol
geurto Mar 4, 2026
ee75755
added rviz.yml option to start.py, useful for visualizing (live) ros …
geurto Mar 5, 2026
9d0e854
added odometry to rviz; changed map to satellite tiles from google; r…
geurto Mar 9, 2026
61b1788
moved gps ekf/navsat params to own file
geurto Mar 10, 2026
ce87a62
noqa on method count in Rviz
geurto Mar 10, 2026
a287610
following panther docs enu_localization_with_gps more
geurto Mar 10, 2026
04e8862
spawn panther at an angle
geurto Mar 31, 2026
1183a71
docs
geurto Mar 31, 2026
adc50b0
Update start.py
geurto Apr 10, 2026
f2a749b
Test only nav2 navigation, replace raise with pytest.fail
rosalievanark Mar 30, 2026
4987820
Add more logs
rosalievanark Mar 30, 2026
a632d4d
Try to trigger test error with old test
rosalievanark Mar 30, 2026
782c3fc
Managed to trigger timeout error so only testing this file is fine, g…
rosalievanark Mar 30, 2026
8b11797
Assert timeout instead of raising, and add wait_for_node_active
rosalievanark Mar 30, 2026
be7cd8e
Update some linting and trigger test 50 times
rosalievanark Mar 30, 2026
c28bce2
Wait for panther/odom
rosalievanark Mar 30, 2026
d7af84a
Add more logs
rosalievanark Mar 31, 2026
1c73c86
Remove nav2 container startup
rosalievanark Mar 31, 2026
c62e198
Remove waits for nav2 nodes
rosalievanark Mar 31, 2026
923aac3
Remove more nav2 dependencies and lower timeout time
rosalievanark Mar 31, 2026
3b5131d
Wait for all nodes to be quit before starting containers
rosalievanark Mar 31, 2026
ed60295
Add docker login to tests
rosalievanark Mar 31, 2026
25aa9bb
Refactor inputs to secrets
rosalievanark Mar 31, 2026
f719874
Final test on lidar specifically before switching back to normal test…
rosalievanark Apr 1, 2026
c1c7d49
Wait for compute_path_to_pose to become available
rosalievanark Apr 1, 2026
28dec62
Now remove the wait again because maybe it blocked something?
rosalievanark Apr 1, 2026
e5f3cd9
Try increasing the timeout limit
rosalievanark Apr 1, 2026
6e9958f
Add final increased timeout in BT yaml, and remove commented code
rosalievanark Apr 1, 2026
bd49425
Revert the PR pytest settings
rosalievanark Apr 1, 2026
15b2006
Give each test a new ros domain id
rosalievanark Apr 1, 2026
f463fbe
Add temporary diagnostics for cmd_vel that checks for nan values
rosalievanark Apr 1, 2026
ddcca32
Add check for who published the cmd_vel
rosalievanark Apr 1, 2026
1f4ad12
Move publisher check to NaN check
rosalievanark Apr 1, 2026
5c5e95d
Tests taking forever, only run tests for nav2
rosalievanark Apr 1, 2026
8c738e2
Redirect cmd_vel such that nav2 will not hear it
rosalievanark Apr 2, 2026
c18af8a
Check /drive_controller/cmd_vel
rosalievanark Apr 2, 2026
0aa5d83
Change gazebo unpause from on_start to on_exit
rosalievanark Apr 2, 2026
6dab96b
Revert redirection cmd_vels
rosalievanark Apr 2, 2026
dd67e43
Remove decreased timeout for quick testing
rosalievanark Apr 2, 2026
2d9029f
Try first unpausing sim, then spawn platforms, to see what happens
rosalievanark Apr 2, 2026
f883a0b
Try to fix linting
rosalievanark Apr 2, 2026
fd5a593
Add wait for clock. Does not wait yet, but at least we'll get logs ab…
rosalievanark Apr 2, 2026
f62c9d2
Also print the time
rosalievanark Apr 3, 2026
180cb25
Add sleep to nav2
rosalievanark Apr 3, 2026
915e4d7
Try running without nav2 again
rosalievanark Apr 3, 2026
5b73d35
Test Nav2 with sleeps before every node.
Jelmerdw Apr 3, 2026
1aafc77
Increase maximum launch timeout and decrease sleep time per node.
Jelmerdw Apr 3, 2026
65d1e6e
Test 50 times per navigation test file, and copy the tests to new fil…
rosalievanark Apr 7, 2026
f2a98cb
Add better naming for absent navigation tests for better distinction
rosalievanark Apr 7, 2026
dd87969
Only run non-nav2 tests and only run 25 per test (due to github log l…
rosalievanark Apr 7, 2026
8059e59
Remove asserts from tests for less spamming in logs, and add sleeps t…
rosalievanark Apr 7, 2026
5628b5f
Increase cmd_vel_timeout of the husarion vehicles
rosalievanark Apr 7, 2026
b65fc56
Fix some linting, and run regular nav2 tests instead of absent nav2 t…
rosalievanark Apr 7, 2026
e4fc308
Let husarion's drive controller publish to different cmd_vel topic
rosalievanark Apr 7, 2026
e8ceeee
Try again without nav2
rosalievanark Apr 7, 2026
b054e9c
Now switch back to nav2 version, remove all sleeps for now, let behav…
rosalievanark Apr 7, 2026
5690b5f
Test by listening to whether sim time is actually used
rosalievanark Apr 7, 2026
2f4a24e
Only let the behavior_server publish to /cmd_vel
rosalievanark Apr 8, 2026
96d0285
Add twist_mux to husarion package to merge and (hopefully) filter inv…
rosalievanark Apr 8, 2026
2c5da81
Check again whether no publishers to cmd_vel (and mismatch between hu…
rosalievanark Apr 8, 2026
8c2f100
Immediately start running gazebo
rosalievanark Apr 8, 2026
6cd24ed
Properly update twist_mux usage and also link gazebo urdf correctly
rosalievanark Apr 8, 2026
d94d485
Run actual tests again
rosalievanark Apr 8, 2026
861b820
Start cleaning up the code as the twist_mux seems to work
rosalievanark Apr 9, 2026
621bab8
Revert diagnostics changes and adjust joystick publishing topic
rosalievanark Apr 9, 2026
b363ed1
Fix linting
rosalievanark Apr 9, 2026
92cad2c
Fix bug that appeared for collision monitor, and change /cmd_vel to /…
rosalievanark Apr 9, 2026
e2b4c63
Try running now without the extreme timeout changes
rosalievanark Apr 9, 2026
27eafb8
Add back the increased nav2 timeouts, since the action server for com…
rosalievanark Apr 9, 2026
f22d145
Move twist_mux to husarion.launch.py and add use_sim_time to its para…
rosalievanark Apr 9, 2026
fa425dd
Move use_sim_time parameter
rosalievanark Apr 9, 2026
d006593
Change cmd_vel_final back to cmd_vel since Husarion hardware uses cmd…
rosalievanark Apr 9, 2026
555bbe2
Add limit to the ROS domain ID number
rosalievanark Apr 9, 2026
1967ecb
Revert 300s launch timeout back to 90s
rosalievanark Apr 9, 2026
92f6069
Revert the pytest line in the pr.yml file and add final ros domain do…
rosalievanark Apr 9, 2026
a0aa636
Bump nicegui from 3.9.0 to 3.10.0
dependabot[bot] Apr 10, 2026
1a61302
added cppcheck
geurto Apr 2, 2026
2fd0e65
added clang-tidy to build process
geurto Apr 2, 2026
4ac8f66
linting
geurto Apr 13, 2026
774ddef
start hardware after madgwick filter so that device is discoverable o…
geurto Apr 22, 2026
5817c6e
docs
geurto Apr 22, 2026
175b963
updated panther_gps_navigation
geurto Apr 22, 2026
db32022
symlink xsens device before starting
geurto Apr 22, 2026
6c7c2a4
better this way
geurto Apr 22, 2026
0cd07ab
added magnetic bias estimation script
geurto Apr 23, 2026
6e9466d
added IMU topic to Nav2Config
geurto Apr 23, 2026
1f8d66d
moved ekf/navsat nodes to nav2 as they now need imu config
geurto Apr 23, 2026
38a8c93
fixed IMU orientation
geurto Apr 24, 2026
0aef434
integration with gazebo halfway there
geurto Apr 24, 2026
ed6586a
frame issue solved
geurto Apr 28, 2026
8c343b5
auto restart on failure for Xsens due to IMU device not being detecte…
geurto Apr 29, 2026
7a71c1f
linting fix
geurto Apr 29, 2026
5a408f8
linting
geurto Apr 30, 2026
fedb046
ignore imu in tool manager
geurto Apr 30, 2026
fcdda0a
Bump lxml from 6.0.2 to 6.1.0
dependabot[bot] Apr 21, 2026
96ce9e5
Build and use branch tagged images when alliander_core is changed.
Jelmerdw Apr 30, 2026
ac0fe47
Bump python-multipart from 0.0.22 to 0.0.26
dependabot[bot] Apr 30, 2026
8d89332
Bump pytest from 9.0.2 to 9.0.3
dependabot[bot] Apr 30, 2026
be8a5a2
435 integrate meta (#437)
Jelmerdw Apr 30, 2026
0ca29e9
Fix bug that appeared for collision monitor, and change /cmd_vel to /…
rosalievanark Apr 9, 2026
d878bf1
Merge branch 'main' into 438-integrate-xsens-imu
geurto Apr 30, 2026
df77e46
fixed uv.lock; added documentation
geurto Apr 30, 2026
60d7f5d
fix
geurto Apr 30, 2026
b5d7907
linting
geurto Apr 30, 2026
d930739
fixed tests locally
geurto May 1, 2026
26002d6
updates based on PR
geurto May 4, 2026
7bcf3a3
linting
geurto May 4, 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 .devcontainer/dev/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ RUN apt update && apt install -y --no-install-recommends \

# Install MoveIt:
RUN apt update && apt install -y --no-install-recommends \
ros-$ROS_DISTRO-imu-filter-madgwick \
ros-$ROS_DISTRO-moveit \
ros-$ROS_DISTRO-moveit-servo \
ros-$ROS_DISTRO-moveit-visual-tools \
Expand Down Expand Up @@ -59,6 +60,7 @@ COPY alliander_joystick/src/ /alliander/ros/src
COPY alliander_meta/src/ /alliander/ros/src
COPY alliander_moveit/src/ /alliander/ros/src
COPY alliander_nav2/src/ /alliander/ros/src
COPY alliander_xsens/src/ /alliander/ros/src

# Build repo packages:
RUN /alliander/colcon_build.sh
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ clangd/
.venv

# for LSP in neovim
.nvim/
**/compile_commands.json

# generated compose files
Expand Down
2 changes: 1 addition & 1 deletion alliander_core/src/alliander_description/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ find_package(ament_cmake_python REQUIRED)

# Shared folders:
install(
DIRECTORY franka husarion ouster velodyne realsense zed nmea_gps
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you want alphabetic order? (If so, we should swap velodyne and realsense).

DIRECTORY franka husarion nmea_gps ouster velodyne realsense xsens zed
DESTINATION share/${PROJECT_NAME}
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,4 @@
</gazebo>
</xacro:macro>

</robot>
</robot>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: Alliander N. V.

SPDX-License-Identifier: Apache-2.0
106 changes: 106 additions & 0 deletions alliander_core/src/alliander_description/xsens/urdf/xsens.urdf.xacro
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?xml version="1.0"?>
<!--
SPDX-FileCopyrightText: Alliander N. V.
SPDX-License-Identifier: Apache-2.0
-->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="imu_module">

<xacro:macro name="xsens_imu"
params="
namespace
parent
name:=xsens
use_sim:=false
">

<link name="base_link"/>
<link name="imu_link">

<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<mesh filename="package://alliander_description/xsens/meshes/MTi-6x0R.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="dark_grey">
<color rgba="0.2 0.2 0.2 1.0"/>
</material>
</visual>

<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<!-- 56.5 x 40.9 x 24.75 mm in metres -->
<box size="0.0565 0.0409 0.02475"/>
</geometry>
</collision>

<inertial>
<!-- Approximate mass: 50g -->
<mass value="0.050"/>
<origin xyz="0 0 0" rpy="0 0 0"/>
<!-- Box inertia tensor: I = m/12 * (a² + b²) for each axis -->
<inertia ixx="8.22e-6" ixy="0" ixz="0"
iyy="1.59e-5" iyz="0"
izz="2.03e-5"/>
</inertial>

</link>

<!-- Gazebo requires a joint to a link called "world" for statically mounted robots -->
<xacro:if value="${parent == 'world'}">
<link name="${parent}" />
<joint name="${parent}_joint" type="fixed">
<parent link="${parent}" />
<child link="base_link" />
</joint>
</xacro:if>

<!-- Since Xsens publishes data on imu_link on hardware -->
<joint name="imu_joint" type="fixed">
<parent link="base_link"/>
<child link="imu_link"/>
<origin xyz="0 0 0" rpy="0 0 0"/>
</joint>

<!-- MTi-6x0 IMU sensor specification: https://www.xsens.com/hubfs/Downloads/Manuals/MTi-600-series-datasheet.pdf -->
<xacro:if value="${use_sim}">
<gazebo reference="imu_link">
<sensor name="${namespace}/imu" type="imu">
<always_on>true</always_on>
<update_rate>100</update_rate>
<topic>${namespace}/imu/data</topic>
<visualize>false</visualize>
<enable_metrics>false</enable_metrics>
<gz_frame_id>${namespace}/imu_link</gz_frame_id>
<imu>
<orientation_reference_frame>
<localization>ENU</localization>
</orientation_reference_frame>
<angular_velocity>
<!-- Gyroscope noise density: 0.01 deg/s/sqrt(Hz), in-run bias: 2 deg/h -->
<x><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></x>
<y><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></y>
<z><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></z>
</angular_velocity>
<linear_acceleration>
<!-- Accelerometer noise density: 0.003 m/s²/sqrt(Hz), in-run bias: 0.01 mg -->
<x><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></x>
<y><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></y>
<z><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></z>
</linear_acceleration>
</imu>
</sensor>
</gazebo>
</xacro:if>

</xacro:macro>

<xacro:arg name="namespace" default="xsens" />
<xacro:arg name="parent" default="" />
<xacro:arg name="use_sim" default="false" />
<xacro:xsens_imu
namespace="$(arg namespace)"
parent="$(arg parent)"
use_sim="$(arg use_sim)" />

</robot>
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,19 @@ class GPS(Platform):
diagnostic_timeouts: tuple[int, int, int] = (3, 5, 10)


@dataclass
class IMU(Platform):
"""Configuration for an IMU platform.

Attributes:
platform_type (str): Type identifier for the platform.
usb_device (str): USB device path, e.g. /dev/imu.
"""

platform_type: str = "IMU"
usb_device: str = "/dev/imu"


# Configurations containing lists of platforms:
@dataclass
class PlatformList(Config):
Expand All @@ -342,7 +355,7 @@ class PlatformList(Config):

platforms: List[
Annotated[
Union[Platform, Arm, Vehicle, Lidar, Camera, GPS],
Union[Platform, Arm, Vehicle, Camera, GPS, IMU, Lidar],
Discriminator(field="platform_type", include_supertypes=True),
]
] = field(default_factory=list)
Expand Down
4 changes: 4 additions & 0 deletions alliander_gazebo/src/alliander_gazebo/launch/gazebo.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ def get_bridge_topics(platforms: list[T]) -> list[str]:
bridge_topics.append(
f"/{platform.namespace}/gps/fix@sensor_msgs/msg/NavSatFix@gz.msgs.NavSat"
)
if platform.platform_type == "IMU":
bridge_topics.append(
f"/{platform.namespace}/imu/data@sensor_msgs/msg/Imu@gz.msgs.IMU"
)
return bridge_topics


Expand Down
1 change: 0 additions & 1 deletion alliander_gps/alliander_gps.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ ENV ROS_DISTRO=jazzy
RUN apt update && apt install -y --no-install-recommends \
ros-$ROS_DISTRO-husarion-components-description \
ros-$ROS_DISTRO-nmea-navsat-driver \
ros-$ROS_DISTRO-robot-localization \
&& rm -rf /var/lib/apt/lists/* \
&& apt autoremove -y \
&& apt clean
Expand Down
49 changes: 1 addition & 48 deletions alliander_gps/src/alliander_gps/launch/gps.launch.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# SPDX-FileCopyrightText: Alliander N. V.
#
# SPDX-License-Identifier: Apache-2.0
from alliander_utilities.adapted_yaml import AdaptedYaml
from alliander_utilities.config_objects import GPS
from alliander_utilities.launch_argument import LaunchArgument
from alliander_utilities.launch_utils import SKIP, state_publisher_node, static_tf_node
from alliander_utilities.register import Register, RegisteredLaunchDescription
from alliander_utilities.ros_utils import get_file_path
from launch import LaunchContext, LaunchDescription
from launch.actions import OpaqueFunction
from launch_ros.actions import Node, SetParameter
from launch_ros.actions import SetParameter

T, F = True, False

Expand Down Expand Up @@ -50,57 +49,11 @@ def launch_setup(context: LaunchContext) -> list:
{"platform_config": gps_config.to_str()},
)

ekf_global_params = AdaptedYaml(
get_file_path("alliander_gps", ["config"], "ekf_global.yaml"),
{
"odom_frame": f"{gps_config.parent.namespace}/odom",
"base_link_frame": f"{gps_config.parent.namespace}/base_footprint",
"odom0": f"/{gps_config.parent.namespace}/odometry/wheels",
"odom1": f"/{gps_config.namespace}/odometry/gps",
"imu0": f"/{gps_config.parent.namespace}/imu/data",
},
root_key=gps_config.parent.namespace,
)
navsat_transform_params = AdaptedYaml(
get_file_path("alliander_gps", ["config"], "navsat_transform.yaml"),
{},
root_key=gps_config.parent.namespace,
)

navsat_transform = Node(
package="robot_localization",
executable="navsat_transform_node",
name="navsat_transform",
namespace=gps_config.namespace,
parameters=[navsat_transform_params.file],
remappings=[
("imu", f"/{gps_config.parent.namespace}/imu/data"),
(
"odometry/filtered",
f"/{gps_config.parent.namespace}/odometry/global",
),
],
)

# Define EKF node that creates the tf between odom and map:
ekf_global = Node(
package="robot_localization",
executable="ekf_node",
name="ekf_global",
namespace=gps_config.parent.namespace,
parameters=[ekf_global_params.file],
remappings=[
("odometry/filtered", f"/{gps_config.parent.namespace}/odometry/global"),
],
)

return [
SetParameter(name="use_sim_time", value=gps_config.simulation),
Register.on_start(state_publisher, context),
Register.on_start(static_tf, context),
Register.group(hardware, context) if not gps_config.simulation else SKIP,
Register.on_start(navsat_transform, context) if parent.link else SKIP,
Register.on_start(ekf_global, context) if parent.link else SKIP,
]


Expand Down
1 change: 1 addition & 0 deletions alliander_nav2/alliander_nav2.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ ENV ROS_DISTRO=jazzy
RUN apt update && apt install -y --no-install-recommends \
ros-$ROS_DISTRO-navigation2 \
ros-$ROS_DISTRO-nav2-bringup \
ros-$ROS_DISTRO-robot-localization \
ros-$ROS_DISTRO-slam-toolbox \
&& rm -rf /var/lib/apt/lists/* \
&& apt autoremove -y \
Expand Down
101 changes: 101 additions & 0 deletions alliander_nav2/src/alliander_nav2/config/nav2/ekf_global.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# SPDX-FileCopyrightText: Alliander N. V.
#
# SPDX-License-Identifier: Apache-2.0

# Based on: https://github.com/husarion/husarion_ugv_ros/blob/ros2/husarion_ugv_localization/config/enu_localization_with_gps.yaml
ekf_global:
ros__parameters:
frequency: 20.0
sensor_timeout: 0.05
two_d_mode: true

transform_time_offset: 0.0
transform_timeout: 0.05

world_frame: map
map_frame: map
odom_frame: substitute_me
base_link_frame: substitute_me
publish_tf: true
publish_acceleration: false

odom0: substitute_me
odom0_config: [false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]
odom0_queue_size: 3
odom0_nodelay: true
odom0_differential: false
odom0_relative: true

odom1: substitute_me
odom1_config: [true, true, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom1_queue_size: 2
odom1_differential: false
odom1_relative: false

imu0: substitute_me
imu0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, true,
false, false, false]
imu0_queue_size: 3
imu0_nodelay: true
imu0_differential: false
imu0_relative: false
imu0_remove_gravitational_acceleration: false

use_control: true
stamped_control: true
control_timeout: 0.5
control_config: [true, true, false, false, false, true]
acceleration_limits: [2.7, 1.5, 0.0, 0.0, 0.0, 5.7] # Values taken from WH01_controller.yaml and WH02_controller.yaml inside husarion_ugv_controller/config

predict_to_current_time: true

# Selected values ​​experimentally so as to ensure relatively fast convergence (values ​​should be about 10x higher than the sensor variance values)
dynamic_process_noise_covariance: true
process_noise_covariance: [5e-3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 5e-3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 5e-3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 3e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 3e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 3e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-4, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-4, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-4, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5e-5, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5e-5, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5e-5]

initial_state: [0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0]

initial_estimate_covariance: [1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 1e5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9]
Loading