diff --git a/clearpath_msgs/package.xml b/clearpath_msgs/package.xml
index b0b6927..46741a5 100644
--- a/clearpath_msgs/package.xml
+++ b/clearpath_msgs/package.xml
@@ -13,6 +13,27 @@
clearpath_platform_msgs
+
+ clearpath_configuration_msgs
+ clearpath_control_msgs
+ clearpath_dock_msgs
+ clearpath_localization_msgs
+ clearpath_mission_manager_msgs
+ clearpath_mission_scheduler_msgs
+ clearpath_navigation_msgs
+ clearpath_platform_msgs
+ clearpath_safety_msgs
+
+
+
+
ament_cmake
diff --git a/clearpath_outdoornav_msgs/README.md b/clearpath_outdoornav_msgs/README.md
new file mode 100644
index 0000000..9fc4b0f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/README.md
@@ -0,0 +1,3 @@
+# CPR OutdoorNav Messages
+
+Clearpath OutdoorNav message definitions for ROS API
diff --git a/clearpath_outdoornav_msgs/clearpath_camera_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_camera_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..ecf8b57
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_camera_msgs/CHANGELOG.rst
@@ -0,0 +1,49 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_camera_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.10.0 (2024-07-04)
+-------------------
+* Changes
+* Merge pull request `#46 `_ from clearpathrobotics/0.13/features
+ 0.13/features
+* fix endline
+* Merge remote-tracking branch 'refs/remotes/origin/poi' into 0.13/features
+* added zoom to inspect poi action
+* create new camera msg package with InspectPOI action
+* Contributors: Chris Iverach-Brereton, José Mastrangelo, Stephen Phillips, jmastrangelo-cpr
+
+* Initial release of clearpath_camera_msgs
+* Added zoom to inspect POI action
+* Create new camera msg package with InspectPOI action
+* Contributors: José Mastrangelo, Stephen Phillips
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+
+0.9.7 (2024-02-05 15:27:37 -0500)
+---------------------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-12)
+------------------
diff --git a/clearpath_outdoornav_msgs/clearpath_camera_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_camera_msgs/CMakeLists.txt
new file mode 100644
index 0000000..7e5c843
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_camera_msgs/CMakeLists.txt
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_camera_msgs)
+
+## Find catkin macros and libraries
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(std_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ action/InspectPoi.action
+ srv/Q62AreaZoom.srv
+ DEPENDENCIES
+ std_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_camera_msgs/action/InspectPoi.action b/clearpath_outdoornav_msgs/clearpath_camera_msgs/action/InspectPoi.action
new file mode 100644
index 0000000..c281200
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_camera_msgs/action/InspectPoi.action
@@ -0,0 +1,14 @@
+# Action definition for inspecting a Point of Interest (POI) with a PTZ mounted on the Clearpth UGV
+
+# goal
+string poi_uuid
+float32 zoom
+
+---
+# result
+bool success
+string message
+
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_camera_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_camera_msgs/package.xml
new file mode 100644
index 0000000..c5078de
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_camera_msgs/package.xml
@@ -0,0 +1,19 @@
+
+
+ clearpath_camera_msgs
+ 0.10.0
+ ROS package containing the message definitions for camera related calls.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ std_msgs
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_camera_msgs/srv/Q62AreaZoom.srv b/clearpath_outdoornav_msgs/clearpath_camera_msgs/srv/Q62AreaZoom.srv
new file mode 100644
index 0000000..833a202
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_camera_msgs/srv/Q62AreaZoom.srv
@@ -0,0 +1,9 @@
+# Service definition to re-position a pan-tilt-zoom camera to a specific location with a specified zoom
+# Used primarily for box-zoom like functionality
+
+float32 x # X location to move camera to, expressed as a fraction of image dimension (0 to 1, where 0.5 is current center)
+float32 y # Y location to move camera to, expressed as a fraction of image dimension (0 to 1, where 0.5 is current center)
+float32 zoom_factor
+---
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..01b3e70
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CHANGELOG.rst
@@ -0,0 +1,41 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_configuration_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+
+0.9.7 (2024-02-05)
+------------------
+* Merge pull request `#30 `_ from clearpathrobotics/ONAV-166
+ updated autonomy config msg
+* Contributors: José Mastrangelo
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CMakeLists.txt
new file mode 100644
index 0000000..32a5e1c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/CMakeLists.txt
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_configuration_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ msg/AutonomyConfig.msg
+ msg/PlatformConfig.msg
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/AutonomyConfig.msg b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/AutonomyConfig.msg
new file mode 100644
index 0000000..3eaef47
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/AutonomyConfig.msg
@@ -0,0 +1,4 @@
+# Autonomy configuration message
+
+string version
+float64 uptime
diff --git a/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/PlatformConfig.msg b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/PlatformConfig.msg
new file mode 100644
index 0000000..28994b1
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/msg/PlatformConfig.msg
@@ -0,0 +1 @@
+# Platform configuration message containing ...
diff --git a/clearpath_outdoornav_msgs/clearpath_configuration_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/package.xml
new file mode 100644
index 0000000..3d510f7
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_configuration_msgs/package.xml
@@ -0,0 +1,21 @@
+
+
+
+ clearpath_configuration_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav configuration module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_control_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..4703c22
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/CHANGELOG.rst
@@ -0,0 +1,38 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_control_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_control_msgs/CMakeLists.txt
new file mode 100644
index 0000000..321de31
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/CMakeLists.txt
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_control_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ msg/AutonomySync.msg
+ msg/ControlMode.msg
+ msg/ControlSelectionState.msg
+ msg/ControlState.msg
+ srv/SetControlMode.srv
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/AutonomySync.msg b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/AutonomySync.msg
new file mode 100644
index 0000000..1fc46d8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/AutonomySync.msg
@@ -0,0 +1,16 @@
+uint8 EMPTY = 0
+uint8 PROCESSING = 1
+uint8 PENDING_PAUSE = 2
+uint8 PAUSED = 3
+
+uint8 IDLE = 4
+uint8 TEACH = 5
+uint8 REPEAT = 6
+
+uint8 MANNED = 7
+uint8 UNMANNED = 8
+
+
+# Is the server currently active
+uint8 status
+uint8[] mission_type
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlMode.msg b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlMode.msg
new file mode 100644
index 0000000..2ccbe6a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlMode.msg
@@ -0,0 +1,7 @@
+# Control mode message
+
+int8 NEUTRAL=0
+int8 MANUAL=1
+int8 AUTONOMY=2
+
+int8 mode
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlSelectionState.msg b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlSelectionState.msg
new file mode 100644
index 0000000..b244df3
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlSelectionState.msg
@@ -0,0 +1,4 @@
+# The complete state of the control selection module. This message includes the autonomy state as well as the navigation mode.
+
+ControlState autonomy
+ControlMode mode
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlState.msg b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlState.msg
new file mode 100644
index 0000000..96b8cdd
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/msg/ControlState.msg
@@ -0,0 +1,4 @@
+# The autonomy state message, The autonomy can be either enabled/disabled and active/paused.
+
+bool enabled
+bool paused
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_control_msgs/package.xml
new file mode 100644
index 0000000..572c44e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/package.xml
@@ -0,0 +1,21 @@
+
+
+
+ clearpath_control_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav control selection module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_control_msgs/srv/SetControlMode.srv b/clearpath_outdoornav_msgs/clearpath_control_msgs/srv/SetControlMode.srv
new file mode 100644
index 0000000..bb3cb66
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_control_msgs/srv/SetControlMode.srv
@@ -0,0 +1,4 @@
+# Service definition to set the control mode
+
+clearpath_control_msgs/ControlMode mode
+---
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_dock_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..b13ad10
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/CHANGELOG.rst
@@ -0,0 +1,54 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_dock_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+* Message updates for onav-0.12 (`#34 `_)
+ * Add the size_exceeded field to NetworkMapState
+ * Mod: Update dock messages for new 0.12 docking APIs
+ * Mod: Add new autonomy API types to AutonomyStatus.msg
+ * Mod: Use float64 version of Vector2D for returning path recording lat-lons
+ * Mod: Add header field to RunNetworkGoToPlanner.action feedback
+ ---------
+ Co-authored-by: Chris Iverach-Brereton
+* Contributors: stephen-cpr
+
+0.9.8 (2024-03-11)
+------------------
+* Add additional messages for Network of Paths
+* Contributors: Chris Iverach-Brereton , Stephen Phillips
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Use raw JSON strings for import & export; don't bother gzipping & base-64 encoding them
+* Add import/export services for docking
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+* Add message field to service response
+* Added error message to service response
+* Contributors: José Mastrangelo
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_dock_msgs/CMakeLists.txt
new file mode 100644
index 0000000..38a52db
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/CMakeLists.txt
@@ -0,0 +1,38 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_dock_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(clearpath_navigation_msgs REQUIRED)
+find_package(geometry_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ action/LocalDock.action
+ action/LocalUndock.action
+ action/NetworkDock.action
+ action/RadiusDock.action
+ msg/DockInfo.msg
+ msg/DockProperties.msg
+ msg/DockState.msg
+ msg/TargetTrackerState.msg
+ srv/AddDock.srv
+ srv/ExportData.srv
+ srv/GetDockByUuid.srv
+ srv/ImportData.srv
+ srv/RemoveDock.srv
+ srv/SetDockLocationById.srv
+ srv/SetDockLocationByName.srv
+ DEPENDENCIES
+ geometry_msgs
+ clearpath_navigation_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalDock.action b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalDock.action
new file mode 100644
index 0000000..5f435bc
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalDock.action
@@ -0,0 +1,12 @@
+# Action definition for undocking a Clearpath UGV from one of its charging docks.
+
+# goal
+
+---
+# result
+bool success
+string message
+
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalUndock.action b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalUndock.action
new file mode 100644
index 0000000..ffa48ee
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/LocalUndock.action
@@ -0,0 +1,13 @@
+# Action definition for undocking a Clearpath UGV from one of its charging docks.
+
+# goal
+float32 undock_distance
+
+---
+# result
+bool success
+string message
+
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/NetworkDock.action b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/NetworkDock.action
new file mode 100644
index 0000000..c43e62e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/NetworkDock.action
@@ -0,0 +1,15 @@
+# Action definition for undocking a Clearpath UGV from one of its charging docks.
+
+# goal
+string dock_uuid
+string network_uuid
+
+---
+# result
+bool success
+string message
+
+---
+# feedback
+string message
+clearpath_navigation_msgs/NetworkMissionSegment network_plan
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/RadiusDock.action b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/RadiusDock.action
new file mode 100644
index 0000000..f21fd75
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/action/RadiusDock.action
@@ -0,0 +1,13 @@
+# Action definition for undocking a Clearpath UGV from one of its charging docks.
+
+# goal
+string dock_uuid
+
+---
+# result
+bool success
+string message
+
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockInfo.msg b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockInfo.msg
new file mode 100644
index 0000000..5b6733d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockInfo.msg
@@ -0,0 +1,19 @@
+# Message definition containing the information of a single dock. This includes identifiers, lat/lon and orientation of the dock.
+
+string name
+string uuid
+string frame
+string target_template
+
+# ISO 8601 date/time format of last successfull dock location setting
+string last_location_set_time
+
+# maximum allowable distance to allow for predocking. (ie. the distance within which the dock waypoint must be located)
+float32 max_predock_distance
+# the distance from the dock that the robot will navigate to prior to start docking
+float32 predock_distance
+
+# location of the dock
+float64 latitude
+float64 longitude
+float64 heading
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockProperties.msg b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockProperties.msg
new file mode 100644
index 0000000..f57dd6a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockProperties.msg
@@ -0,0 +1,3 @@
+# Message definition containing the properties for each of the docks available.
+
+clearpath_dock_msgs/DockInfo[] docks
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockState.msg b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockState.msg
new file mode 100644
index 0000000..7c7358c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/DockState.msg
@@ -0,0 +1,9 @@
+# Message definition containing information on what state the docking process is in.
+
+uint8 UNDOCKED = 0
+uint8 DOCKED = 1
+uint8 IN_PROGRESS = 2
+uint8 FAILED = 3
+uint8 CANCELLED = 4
+
+uint8 state
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/TargetTrackerState.msg b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/TargetTrackerState.msg
new file mode 100644
index 0000000..7d07115
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/msg/TargetTrackerState.msg
@@ -0,0 +1,15 @@
+# Message definition containing the state information of the target tracker.
+# This includes whether or not the tracker is active, whether the target is visible/lost, and the target pose and score of that pose.
+
+bool active
+
+# flag indicates if the target is visible or not
+bool target_locked
+
+geometry_msgs/PoseWithCovarianceStamped target_pose
+float32 score
+
+# the distance of the sensor_link to the dock target
+float64 distance_to_target
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_dock_msgs/package.xml
new file mode 100644
index 0000000..450407f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/package.xml
@@ -0,0 +1,24 @@
+
+
+
+ clearpath_dock_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav dock module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ action_msgs
+ clearpath_navigation_msgs
+ geometry_msgs
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/AddDock.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/AddDock.srv
new file mode 100644
index 0000000..6691eea
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/AddDock.srv
@@ -0,0 +1,8 @@
+# Service definition to add a dock to the list of available docks
+
+# A dock information message for the dock to be added
+clearpath_dock_msgs/DockInfo dock
+---
+# True if the dock has been added successfully, otherwise False
+bool success
+string message
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ExportData.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ExportData.srv
new file mode 100644
index 0000000..9cff987
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ExportData.srv
@@ -0,0 +1,5 @@
+---
+# A JSON string representing the database contents.
+# This can be written to a file or used with the ImportData.srv
+# to back-up/restore the database contents
+string data
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/GetDockByUuid.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/GetDockByUuid.srv
new file mode 100644
index 0000000..103fbf9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/GetDockByUuid.srv
@@ -0,0 +1,7 @@
+# Service definition to get dock related into for dock specified by UUID
+
+string dock_uuid
+---
+geometry_msgs/Pose dock_pose
+geometry_msgs/Pose predock_pose
+clearpath_dock_msgs/DockInfo info
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ImportData.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ImportData.srv
new file mode 100644
index 0000000..c95dc0e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/ImportData.srv
@@ -0,0 +1,7 @@
+# A JSON string representing the database contents.
+# This is the same as the data output by the ExportData service, and is intended
+# to be used to restore the database to a previous state
+string data
+---
+# The state of the database after importing the data
+clearpath_dock_msgs/DockInfo[] docks
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/RemoveDock.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/RemoveDock.srv
new file mode 100644
index 0000000..c2f9e62
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/RemoveDock.srv
@@ -0,0 +1,9 @@
+# Service definition to remove a dock from the list of available docks
+
+# The uuid or the semantic name of the dock to be removed
+string uuid
+string name
+---
+# True if the dock has been removed successfully, otherwise False
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationById.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationById.srv
new file mode 100644
index 0000000..7a4f095
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationById.srv
@@ -0,0 +1,9 @@
+# Service definition to either create a new dock or update the location of an existing dock.
+
+# The UUID of the dock whose location we are updating
+# If empty, a new dock is added with the random UUID and the name dockX, where X is the number of current docks
+string uuid
+---
+# True if the location was updated/added successfully, otherwise False
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationByName.srv b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationByName.srv
new file mode 100644
index 0000000..0ded2ac
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_dock_msgs/srv/SetDockLocationByName.srv
@@ -0,0 +1,8 @@
+# Service definition to update the location of an existing dock by name. A dock with the name needs to have been previously created
+
+# The semantic name of the dock whose location we are updating
+string name
+---
+# True if the location was updated successfully, otherwise False
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_localization_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..2a2e948
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/CHANGELOG.rst
@@ -0,0 +1,41 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_localization_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+* Add additional messages for Network of Paths
+* Contributors: Chris Iverach-Brereton , Stephen Phillips
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Add: .srv definition for ConvertCartesianToLatLon service
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton, Stephen Phillips, Jose Mastrangelo
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_localization_msgs/CMakeLists.txt
new file mode 100644
index 0000000..4cad67b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_localization_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(geometry_msgs REQUIRED)
+find_package(sensor_msgs REQUIRED)
+find_package(std_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ action/SurveyBaseStation.action
+ msg/GNSSStatus.msg
+ msg/LocalizationStatus.msg
+ msg/SurveyProperties.msg
+ msg/XvnStatus.msg
+ srv/ConvertCartesianToLatLon.srv
+ srv/ConvertCartesianToLatLonArray.srv
+ srv/ConvertLatLonToCartesian.srv
+ srv/ConvertLatLonToCartesianArray.srv
+ srv/ResetLocalization.srv
+ srv/SetDatum.srv
+ DEPENDENCIES
+ std_msgs
+ geometry_msgs
+ sensor_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/action/SurveyBaseStation.action b/clearpath_outdoornav_msgs/clearpath_localization_msgs/action/SurveyBaseStation.action
new file mode 100644
index 0000000..2e2bee9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/action/SurveyBaseStation.action
@@ -0,0 +1,12 @@
+# Action definition for surveying the base station
+
+# goal
+# the number of GPS fixes that will be used to compute to surveyed position
+uint32 number_of_desired_fixes
+---
+# result
+bool success
+---
+# feedback
+# current progress, as a percentage, of the surveying
+float32 percent_complete
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/GNSSStatus.msg b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/GNSSStatus.msg
new file mode 100644
index 0000000..445ca9b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/GNSSStatus.msg
@@ -0,0 +1,24 @@
+# Message definition containing the GNSS receiver status information.
+
+uint8 POSITION_RECEIVER = 0
+uint8 HEADING_RECEIVER = 1
+uint8 BASE_STATION_RECEIVER = 2
+uint8 receiver_type
+
+uint8 POSITION_NO_FIX = 0
+uint8 POSITION_SPP = 1
+uint8 POSITION_SBAS = 2
+uint8 POSITION_RTK_FLOAT = 3
+uint8 POSITION_RTK_FIXED = 4
+uint8 position_fix_type
+
+uint8 HEADING_NOT_APPLICABLE = 0
+uint8 HEADING_NO_SOLUTION = 1
+uint8 HEADING_RTK_FLOAT = 2
+uint8 HEADING_RTK_FIXED = 3
+uint8 heading_fix_type
+
+uint8 num_connected_sats # Number of satellites connected to the antenna/receiver
+uint8 num_sats_solution # Number of sats used in solution
+float32[] cn0 # The carrier-to-noise ratio of each connected satellite
+float64 correction_age # Age of RTK corrections. -1 indicates none received
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/LocalizationStatus.msg b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/LocalizationStatus.msg
new file mode 100644
index 0000000..9756fcf
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/LocalizationStatus.msg
@@ -0,0 +1,12 @@
+# # Message definition containing localization status information for all sources of localization
+
+std_msgs/Header header
+# the localization accuracy as a percentage value (covariance?)
+float32 accuracy # in development
+
+# status information related to the GPS receiver units
+GNSSStatus position_gnss
+GNSSStatus heading_gnss
+GNSSStatus base_station_gnss
+
+bool dead_reckoning
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/SurveyProperties.msg b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/SurveyProperties.msg
new file mode 100644
index 0000000..e776a88
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/SurveyProperties.msg
@@ -0,0 +1,13 @@
+# Message definition containing the base station survey properties
+
+# ISO 8601 date/time format of last successfull base station survey
+string last_survey_time
+
+# Number of samples used in survey
+uint32 num_samples
+
+# GPS location of the base station
+sensor_msgs/NavSatFix base_location
+
+# denotes a successfull base station survey
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/XvnStatus.msg b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/XvnStatus.msg
new file mode 100644
index 0000000..ef22881
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/msg/XvnStatus.msg
@@ -0,0 +1,42 @@
+std_msgs/Header header
+float64 latitude
+float64 longitude
+float32 yaw
+float32 stddev_x
+float32 stddev_y
+float32 stddev_yaw
+
+uint8 UNKNOWN = 0
+uint8 VISION = 1
+uint8 VISUAL_INERTIAL = 2
+uint8 INERTIAL_GNSS = 3
+uint8 VI_GNSS = 4
+uint8 fusion_status
+
+uint8 IMU_NOT_CONVERGED = 0
+uint8 IMU_CONVERGED = 1
+uint8 imu_status
+
+int8 WS_NOT_USED = -1
+int8 WS_NOT_CONVERGED = 0
+int8 WS_CONVERGED = 1
+int8 wheelspeed_status
+
+uint8 GNSS_UNKNOWN = 0
+uint8 GNSS_NO_FIX = 1
+uint8 GNSS_DEAD_RECKONING = 2
+uint8 GNSS_TIME_FIX = 3
+uint8 GNSS_2D_FIX = 4
+uint8 GNSS_3D_FIX = 5
+uint8 GNSS_3D_WITH_DR = 6
+uint8 GNSS_RTK_FLOAT = 7
+uint8 GNSS_RTK_FIX = 8
+
+uint8 gnss1_status
+uint8 gnss2_status
+
+uint8 RTK_ERROR = 0
+uint8 RTK_WARNING = 1
+uint8 RTK_CONNECTING = 2
+uint8 RTK_CONNECTED = 3
+uint8 rtk_status
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_localization_msgs/package.xml
new file mode 100644
index 0000000..a3e1732
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/package.xml
@@ -0,0 +1,25 @@
+
+
+
+ clearpath_localization_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav localization module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ action_msgs
+ geometry_msgs
+ sensor_msgs
+ std_msgs
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLon.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLon.srv
new file mode 100644
index 0000000..2faaccc
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLon.srv
@@ -0,0 +1,5 @@
+# Service definition to convert Cartesian (map) coordinates to lat-lon
+
+geometry_msgs/PoseStamped pose
+---
+sensor_msgs/NavSatFix msg
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLonArray.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLonArray.srv
new file mode 100644
index 0000000..99d7bda
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertCartesianToLatLonArray.srv
@@ -0,0 +1,5 @@
+# Service definition to convert Cartesian (map) coordinates to lat-lon
+
+geometry_msgs/PoseStamped[] pose
+---
+sensor_msgs/NavSatFix[] msg
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesian.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesian.srv
new file mode 100644
index 0000000..66fc022
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesian.srv
@@ -0,0 +1,5 @@
+# Service definition to convert the Lat/Lon to Cartesian coordinates
+
+sensor_msgs/NavSatFix msg
+---
+geometry_msgs/PoseStamped pose
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesianArray.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesianArray.srv
new file mode 100644
index 0000000..ced3660
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ConvertLatLonToCartesianArray.srv
@@ -0,0 +1,5 @@
+# Service definition to convert the Lat/Lon to Cartesian coordinates
+
+sensor_msgs/NavSatFix[] msg
+---
+geometry_msgs/PoseStamped[] pose
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ResetLocalization.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ResetLocalization.srv
new file mode 100644
index 0000000..86a34fb
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/ResetLocalization.srv
@@ -0,0 +1,6 @@
+# Service definition to reset the localization
+
+bool require_gnss
+uint32 gnss_samples
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/SetDatum.srv b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/SetDatum.srv
new file mode 100644
index 0000000..c0f6057
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_localization_msgs/srv/SetDatum.srv
@@ -0,0 +1,6 @@
+# Service definition to set the datum with a latitude (lat) and longitude (lon)
+
+float32 lat
+float32 lon
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_logger_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..a56b895
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/CHANGELOG.rst
@@ -0,0 +1,37 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_logger_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.10.0 (2024-07-04)
+-------------------
+* Merge pull request `#46 `_ from clearpathrobotics/0.13/features
+ 0.13/features
+* Merge remote-tracking branch 'refs/remotes/origin/mission-logger' into 0.13/features
+* Docs
+* mission_uuid -> name in StartRecording
+* EventLog mission_uuid -> name
+* Add MIME types to media events
+* Remove quotation marks around string constants; they are not required
+* Add error event logging, add a custom json field to the master event log
+* Add the custom json data to the stop_recording service
+* Change the heading units
+* Add the EventLogs message
+* Add an additional flag to expunge the master record if desired
+* Add the service to delete logs
+* Add a flag to indicate if media files are missing from recording archives
+* Add the auto_telemetry tag
+* Remove an unnecessary dependency
+* Fix the all-logs service to return an array
+* Fix constants
+* Add additional services, add fields to event-recorder services
+* Add the download-log service
+* TAG_POSITION -> TAG_LOCATION, add frame_id to custom events
+* Add additional services
+* Add the custom event service
+* Add initial event-recording services
+* Add first-draft Event, EventLog messages
+* Fill in the skeleton for the new messages package
+* Contributors: Chris Iverach-Brereton, Stephen Phillips, jmastrangelo-cpr
+
+0.9.9 (2024-03-14)
+------------------
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_logger_msgs/CMakeLists.txt
new file mode 100644
index 0000000..60c125c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/CMakeLists.txt
@@ -0,0 +1,40 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_logger_msgs)
+
+## Find catkin macros and libraries
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(geometry_msgs REQUIRED)
+find_package(nav_msgs REQUIRED)
+find_package(sensor_msgs REQUIRED)
+find_package(std_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ msg/Event.msg
+ msg/EventLog.msg
+ msg/EventLogs.msg
+ srv/DeleteLog.srv
+ srv/GetAllLogs.srv
+ srv/DownloadLog.srv
+ srv/RecordEvent.srv
+ srv/RecordCustomEvent.srv
+ srv/RecordErrorEvent.srv
+ srv/RecordLocationEvent.srv
+ srv/RecordMediaEvent.srv
+ srv/RecordPowerEvent.srv
+ srv/StartRecording.srv
+ srv/StopRecording.srv
+ DEPENDENCIES
+ geometry_msgs
+ nav_msgs
+ sensor_msgs
+ std_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/Event.msg b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/Event.msg
new file mode 100644
index 0000000..62b54a4
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/Event.msg
@@ -0,0 +1,101 @@
+################################################################################
+## Universal log event. Represents a single even recorded to the log
+################################################################################
+
+# Tag for events that include a media_path
+string TAG_MEDIA = media
+
+# Tag indicating that the event's charger status & battery level have been set
+string TAG_POWER = power
+
+# Tag indicating that the event's GPS position has been set
+string TAG_LOCATION = location
+
+# Tag indicating that the event's odometry data has been set
+string TAG_ODOMETRY = odom
+
+# Tag indicating that the event's velocity data has been set
+string TAG_VELOCITY = vel
+
+# Tag indicating that the event's error/debugging data has been set
+string TAG_ERROR = error
+
+# Tag indicating that this event was automatically recorded telemetry
+string TAG_AUTO_TELEMETRY = auto_telemetry
+
+################################################################################
+## Header & general meta-data about the event
+################################################################################
+
+# Header
+# - seq: the order of this event within its parent ExecutionLog
+# - frame_id: the sensor/manipulator frame referenced by the frame_pose field
+# - stamp: the time that this event occurred
+std_msgs/Header header
+
+################################################################################
+## Media & sensor data
+################################################################################
+
+# If this even has media, this is its path on-disk
+string media_path
+
+# If this event has media, this is its MIME type
+# May be left blank
+string media_mime_type
+
+# The pose of the sensor/manipulator frame given by header.frame_id relative to
+# base_link
+geometry_msgs/Pose frame_pose
+
+################################################################################
+## Robot location, orientation, velocity
+################################################################################
+
+# The robot's latitude, longitude, and heading as recorded by the GPS
+# - lat: decimal degrees
+# - lon: decimal degrees
+# - heading: ENU orientation in radians
+geometry_msgs/Point lat_lon_heading
+
+# The robot's location relative to the odometry frame
+nav_msgs/Odometry odometry
+
+# The robot's linear & angular velocity
+geometry_msgs/Twist velocity
+
+################################################################################
+## Power & battery
+################################################################################
+
+# The 0-1 charge level of the battery
+float32 battery_percent
+
+# True of the robot's battery is charging, otherwise False
+bool charging
+
+# True if power-saving/low-power mode is enabled, otherwise False
+bool power_saver
+
+################################################################################
+## Error and debugging events
+################################################################################
+
+# An error code indicating the type of error
+int32 error_code
+
+# A diagnostic error message, or non-integer error code
+string error_msg
+
+# The name of the module/process/pipeline/etc... that signalled the error
+string error_component
+
+################################################################################
+## Custom fields for expansion
+################################################################################
+
+# Arbitrary free-form tags usable to annotate custom data
+string[] tags
+
+# Arbitrary JSON-formatted data that can contain user-defined fields
+string custom_fields_json
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLog.msg b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLog.msg
new file mode 100644
index 0000000..2c5dde0
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLog.msg
@@ -0,0 +1,45 @@
+################################################################################
+## A log representing a single mission execution
+################################################################################
+
+# The log is currently active and being modified
+int32 STATE_ACTIVE = 0
+
+# The log is old and closed
+int32 STATE_CLOSED = 1
+
+# The master record of the log exists, but its data has been deleted from the disk
+int32 STATE_DELETED = 2
+
+# The state of the log on disk
+int32 state
+
+# The time the log started recording
+builtin_interfaces/Time start_time
+
+# The time the log stopped recording
+builtin_interfaces/Time end_time
+
+# This execution's unique ID
+string uuid
+
+# A descriptive name for the log to be displayed in the GUI. Does not need to be unique
+string name
+
+# The total percentage of the battery used during the execution
+# This measures only negative changes, not positive ones
+# e.g. if the robot uses 75% of the battery, returns to dock to recharge to full
+# and then finishes the mission using another 75% of the battery, this value
+# will read 1.5
+float32 battery_percent_used
+
+# The total distance driven by the robot (approximate) during the execution (meters)
+# The exact path used to calculate the distance may be simplified and subject to
+# sensor noise/error
+float32 distance_driven
+
+# A custom JSON field for adding additional custom metrics, meta-data, etc... as needed
+string custom_fields_json
+
+# The list of events recorded in this execution
+clearpath_logger_msgs/Event[] events
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLogs.msg b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLogs.msg
new file mode 100644
index 0000000..c55b10e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/msg/EventLogs.msg
@@ -0,0 +1 @@
+clearpath_logger_msgs/EventLog[] logs
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_logger_msgs/package.xml
new file mode 100644
index 0000000..ad27bd5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/package.xml
@@ -0,0 +1,21 @@
+
+
+
+ clearpath_logger_msgs
+ 0.10.0
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav logging module.
+ Chris Iverach-Brereton
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DeleteLog.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DeleteLog.srv
new file mode 100644
index 0000000..a9c40bb
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DeleteLog.srv
@@ -0,0 +1,5 @@
+string uuid
+bool delete_media
+bool purge_record
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DownloadLog.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DownloadLog.srv
new file mode 100644
index 0000000..36e02af
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/DownloadLog.srv
@@ -0,0 +1,8 @@
+# The UUID of the recording to download
+string log_uuid
+---
+# The on-disk path the the generated archive
+string path
+
+# If True at least one media file from the recording has been moved/deleted
+bool media_missing
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/GetAllLogs.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/GetAllLogs.srv
new file mode 100644
index 0000000..32b1fe9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/GetAllLogs.srv
@@ -0,0 +1,2 @@
+---
+clearpath_logger_msgs/EventLog[] logs
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordCustomEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordCustomEvent.srv
new file mode 100644
index 0000000..6d248e1
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordCustomEvent.srv
@@ -0,0 +1,10 @@
+# A valid JSON string containing the custom data to be recorded
+string custom_fields_json
+
+# Tags to add to the event
+string[] tags
+
+# Optional frame ID relevant to the event
+string frame_id
+---
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordErrorEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordErrorEvent.srv
new file mode 100644
index 0000000..8e61693
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordErrorEvent.srv
@@ -0,0 +1,10 @@
+# An error code indicating the type of error
+int32 error_code
+
+# A diagnostic error message, or non-integer error code
+string error_msg
+
+# The name of the module/process/pipeline/etc... that signalled the error
+string error_component
+---
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordEvent.srv
new file mode 100644
index 0000000..cb8eea8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordEvent.srv
@@ -0,0 +1,7 @@
+# The event to be recorded
+# If the header's stamp is not zero the header will be modified to be the current time
+# Otherwise the provided time will be used without verification
+clearpath_logger_msgs/Event event
+---
+# The event as it was recorded, after any modifications made for serialization
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordLocationEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordLocationEvent.srv
new file mode 100644
index 0000000..efb79a7
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordLocationEvent.srv
@@ -0,0 +1,20 @@
+# The robot's current latitude (decimal degrees)
+float64 latitude
+
+# The robot's current longitude (decimal degrees)
+float64 longitude
+
+# The robot's current heading (cardinal direction in decimal degrees)
+float64 heading
+
+# The robot's current linear & angular velocity
+geometry_msgs/Twist velocity
+
+# The robot's current odometry location
+nav_msgs/Odometry odometry
+
+# Tags for the event
+# Should contain one or more of Event.TAG_LOCATION, TAG_ODOMETRY, or TAG_VELOCITY
+string[] tags
+---
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordMediaEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordMediaEvent.srv
new file mode 100644
index 0000000..8a707d0
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordMediaEvent.srv
@@ -0,0 +1,13 @@
+# The path to the media file on-disk
+string media_path
+
+# A MIME type string indicating the media type
+# May be left blank if desired
+string mime_type
+
+# The frame ID for the sensor that recorded the media
+# Leave blank if the sensor has no frame/TF data associated with it
+string frame_id
+---
+# The logged event
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordPowerEvent.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordPowerEvent.srv
new file mode 100644
index 0000000..7a2ad3d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/RecordPowerEvent.srv
@@ -0,0 +1,8 @@
+# The battery's current level
+# 0.0 to 1.0
+float32 battery_percent
+
+# Is the battery currently charging?
+bool charging
+---
+clearpath_logger_msgs/Event event
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StartRecording.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StartRecording.srv
new file mode 100644
index 0000000..f42da2a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StartRecording.srv
@@ -0,0 +1,4 @@
+# A human-readable name for the log
+string name
+---
+clearpath_logger_msgs/EventLog log
diff --git a/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StopRecording.srv b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StopRecording.srv
new file mode 100644
index 0000000..905dbb8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_logger_msgs/srv/StopRecording.srv
@@ -0,0 +1,4 @@
+# Additional custom end-of-mission metrics to record as part of the log
+string custom_fields_json
+---
+clearpath_logger_msgs/EventLog log
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..00c1296
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CHANGELOG.rst
@@ -0,0 +1,64 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_mission_manager_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+* Message updates for onav-0.12 (`#34 `_)
+ * Add the size_exceeded field to NetworkMapState
+ * Mod: Update dock messages for new 0.12 docking APIs
+ * Mod: Add new autonomy API types to AutonomyStatus.msg
+ * Mod: Use float64 version of Vector2D for returning path recording lat-lons
+ * Mod: Add header field to RunNetworkGoToPlanner.action feedback
+ ---------
+ Co-authored-by: Chris Iverach-Brereton
+* Contributors: stephen-cpr
+
+0.9.8 (2024-03-11)
+------------------
+* Add additional messages for Network of Paths
+* Contributors: Chris Iverach-Brereton , Stephen Phillips
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+* Add a new service for deleting multiple IDs at once
+* Add a new service to import entire mission objects, including their associated tasks & waypoints
+* Contributors: Chris Iverach-Brereton
+
+0.9.5 (2023-11-03)
+------------------
+* [ONAV-1772] Add 'allow_failure' boolean to Task message type
+ - When set to True, any missions that execute this task will be allowed to continue if the task fails
+* Merge pull request `#18 `_ from stephen-cpr/ONAV-1771/on_start_stop_tasks
+ [ONAV-1771] Add support for on_start / on_stop Mission Tasks
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* [ONAV-1771] Add support for on_start / on_stop Mission Tasks
+ - clearpath_navigation_msgs/Mission.msg has been updated to include 'on_start' and 'on_stop' Task arrays which are executed when the mission begins and ends respectively (on_stop Tasks will execute regardless of mission failure or success)
+ - The CreateTask service has been updated to include 'assign_on_start' and 'assign_on_stop' fields (similar functionality as the 'assign_to' field)
+ - The 'assign_to' field of the CreateTask service has been updated to 'assign_to_wp' to distinguish it from assign_on_start/assign_on_stop
+ - Added the following service endpoints to mission_manager (using the AddRemoveById.srv type):
+ - ~add_task_to_start & ~add_task_to_stop - Adds a task to the on_start/on_stop array for given mission
+ - ~remove_task_from_start & ~remove_task_from_stop - Removes a task from the on_start/on_stop array for given mission
+* Contributors: Stephen Phillips, Tony Baltovski
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Use raw JSON strings for import & export; don't bother gzipping & base-64 encoding them
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CMakeLists.txt
new file mode 100644
index 0000000..706b2cc
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/CMakeLists.txt
@@ -0,0 +1,72 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_mission_manager_msgs)
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(clearpath_navigation_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ msg/NetworkEdgeReq.msg
+ msg/NetworkMapState.msg
+ msg/NetworkMapValidityState.msg
+ msg/StorageState.msg
+ srv/AddNetworkEdge.srv
+ srv/AddNetworkPath.srv
+ srv/AddNetworkPoint.srv
+ srv/AddRemoveById.srv
+ srv/AddRemoveTag.srv
+ srv/CloneMission.srv
+ srv/CloneNetworkMap.srv
+ srv/CloneNetworkMission.srv
+ srv/ClonePointOfInterest.srv
+ srv/CreateMission.srv
+ srv/CreateNetworkMap.srv
+ srv/CreateNetworkMission.srv
+ srv/CreatePointOfInterest.srv
+ srv/CreateTask.srv
+ srv/CreateWaypoint.srv
+ srv/CreateWaypointFromPoi.srv
+ srv/DeleteById.srv
+ srv/DeleteEverything.srv
+ srv/DeleteMultiple.srv
+ srv/ExportData.srv
+ srv/GetAllMissions.srv
+ srv/GetAllNetworkMaps.srv
+ srv/GetAllNetworkMissions.srv
+ srv/GetAllPointsOfInterest.srv
+ srv/GetAllTasks.srv
+ srv/GetAllWaypoints.srv
+ srv/GetEverything.srv
+ srv/GetMission.srv
+ srv/GetNetworkMap.srv
+ srv/GetNetworkMission.srv
+ srv/GetPointOfInterest.srv
+ srv/GetTask.srv
+ srv/GetWaypoint.srv
+ srv/ImportData.srv
+ srv/ImportMission.srv
+ srv/ImportNetworkMap.srv
+ srv/ImportNetworkMission.srv
+ srv/SplitNetworkEdge.srv
+ srv/UpdateMission.srv
+ srv/UpdateNetworkEdge.srv
+ srv/UpdateNetworkEdges.srv
+ srv/UpdateNetworkMap.srv
+ srv/UpdateNetworkMission.srv
+ srv/UpdateNetworkPoint.srv
+ srv/UpdateNetworkPoints.srv
+ srv/UpdatePointOfInterest.srv
+ srv/UpdateTask.srv
+ srv/UpdateWaypoint.srv
+ srv/ValidateNetworkMap.srv
+ DEPENDENCIES
+ clearpath_navigation_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkEdgeReq.msg b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkEdgeReq.msg
new file mode 100644
index 0000000..c26127a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkEdgeReq.msg
@@ -0,0 +1,6 @@
+string start_point_id
+string end_point_id
+
+float32 speed_limit
+
+float32 radius
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapState.msg b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapState.msg
new file mode 100644
index 0000000..59259df
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapState.msg
@@ -0,0 +1,20 @@
+# The UUID of the map
+string uuid
+
+# True if the map actually exists and was found
+bool exists
+
+# The number of disconnected sub-graphs of the map
+# Normally this will be 1 (i.e. the map is a single graph that is connected)
+# but there are circumstances where the user may intentionally want 2+ disconnected graphs
+# (e.g. a separate graph for each side of a fence, where the only connection between the two
+# sides is an out-of-bounds, teleop-only road)
+int32 num_subgraphs
+
+# If the map has any disconnected vertices, we enumerate them here by their ID
+# If size_exceeded is true, this list may be empty or incomplete (see below)
+string[] disconnected_point_ids
+
+# True if the map is too big for the validation to run on it
+# Maps with more than 1000 vertices or 8000 edges will not be fully tests
+bool size_exceeded
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapValidityState.msg b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapValidityState.msg
new file mode 100644
index 0000000..8cf775a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/NetworkMapValidityState.msg
@@ -0,0 +1,2 @@
+# Reports the validity of all network of paths maps registered with the mission manager
+clearpath_mission_manager_msgs/NetworkMapState[] map_states
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/StorageState.msg b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/StorageState.msg
new file mode 100644
index 0000000..e202755
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/msg/StorageState.msg
@@ -0,0 +1,24 @@
+# The entire contents of the Mission database
+# Note that all of the following cases are valid:
+# - a Task can be referenced in multiple Waypoints
+# - a Waypoint can be referenced in multiple Missions
+# - a Waypoint can be orphaned (i.e. not included in any Missions)
+# - a Task can be orphaned (i.e. not included in any Waypoints)
+
+# All missions defined in the database
+clearpath_navigation_msgs/Mission[] missions
+
+# All waypoints defined in the database
+clearpath_navigation_msgs/Waypoint[] waypoints
+
+# All tasks defined in the database
+clearpath_navigation_msgs/Task[] tasks
+
+# All network of paths missions in the database
+clearpath_navigation_msgs/NetworkMission[] network_missions
+
+# All network of paths maps in the database
+clearpath_navigation_msgs/NetworkMap[] network_maps
+
+# Points of interest
+clearpath_navigation_msgs/PointOfInterest[] points_of_interest
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/package.xml
new file mode 100644
index 0000000..36dd598
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/package.xml
@@ -0,0 +1,25 @@
+
+
+
+ clearpath_mission_manager_msgs
+ 0.9.9
+ The clearpath_mission_manager_msgs package
+
+ Chris Iverach-Brereton
+ Chris Iverach-Brereton
+
+ Clearpath Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ clearpath_navigation_msgs
+ rosidl_default_runtime
+
+
+ ament_cmake
+
+ rosidl_interface_packages
+
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkEdge.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkEdge.srv
new file mode 100644
index 0000000..3ac4913
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkEdge.srv
@@ -0,0 +1,26 @@
+# The UUID of the map we're operating on
+string map_id
+
+# The UUIDs of the start and end points for this edge
+string start_point_id
+string end_point_id
+
+# The operational radius around the edge
+float32 radius
+
+# The speed limit when driving along this edge
+float32 speed_limit
+
+# An additional cost factor to prioritize certain edges over others in the planner
+# Higher costs -> edge is less likely to be included in the planned route
+# Expected range is (0.0, 100.0) (exclusive range).
+# Values outside the expected range will be treated as the default 1.0
+float32 cost_factor
+
+# If true, we add 2 edges, with the second one having inverted start and end points
+bool symmetrical
+
+---
+
+# The generated edge(s)
+clearpath_navigation_msgs/NetworkEdge[] edges
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPath.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPath.srv
new file mode 100644
index 0000000..112a584
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPath.srv
@@ -0,0 +1,13 @@
+# The lat-lon locations of the points to add
+float64[] latitudes
+float64[] longitudes
+
+# The UUID of the map we're adding points to
+string map_id
+
+# If true, bidirectional edges are added between the points
+bool symmetrical
+
+---
+bool success
+string message
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPoint.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPoint.srv
new file mode 100644
index 0000000..10fe7b9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddNetworkPoint.srv
@@ -0,0 +1,22 @@
+# The location of this point on the map
+float64 latitude
+float64 longitude
+
+# The UUID of the map we're adding this point to
+string map_id
+
+# Optional list of node IDs in the map we want to connect to the new node
+# This specifies edges originating in the given nodes, pointing to the new node
+string[] connect_from
+
+# Optional list of node IDs in the map we want to connect to the new node
+# This specifies edges originating at the new node, pointing to the nodes with the given UUIDs
+string[] connect_to
+
+# If true, bidirectional edge are added between the nodes specified in connect_from and connect_to
+bool symmetrical
+
+---
+
+# The added point, with generated UUID
+clearpath_navigation_msgs/NetworkPoint point
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveById.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveById.srv
new file mode 100644
index 0000000..a0efa48
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveById.srv
@@ -0,0 +1,14 @@
+# The UUID of the object we're inserting/removing
+# When removing, all instances with this UUID are deleted from the parent if this is set
+# To remove a single instance at a given position, leave this blank and set position (see below)
+string uuid
+
+# The UUID of the parent object
+string parent_uuid
+
+# The zero-based index to insert the object into or removing from
+# When removing by position, make sure to leave uuid empty
+int32 position
+---
+# True if the object was added/removed successfully, otherwise False
+bool ok
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveTag.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveTag.srv
new file mode 100644
index 0000000..f98eb3e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/AddRemoveTag.srv
@@ -0,0 +1,8 @@
+# The UUID of the item whose tags we're modifying
+string uuid
+
+# The tag to add/remove
+string tag
+---
+# The item's tags after modification
+string[] tags
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneMission.srv
new file mode 100644
index 0000000..18fd832
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneMission.srv
@@ -0,0 +1,12 @@
+# The UUID of the mission to clone
+string uuid
+
+# The new name for the mission
+# If blank, the old mission name will be re-used with -copy appended to the end
+string new_name
+
+# If true, the order of the waypoints within the cloned mission are reversed
+bool reverse
+---
+# The Mission with the given ID, or null if no Mission with that ID exists
+clearpath_navigation_msgs/Mission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMap.srv
new file mode 100644
index 0000000..bd907a0
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMap.srv
@@ -0,0 +1,10 @@
+# The UUID of the map to clone
+string uuid
+
+# The new name for the map
+# If blank, the old map name will be re-used with -copy appended to the end
+string new_name
+
+---
+# The newly-created copy of the original map, with a new name and new UUID
+clearpath_navigation_msgs/NetworkMap map
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMission.srv
new file mode 100644
index 0000000..9fe0fbd
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CloneNetworkMission.srv
@@ -0,0 +1,12 @@
+# The UUID of the mission to clone
+string uuid
+
+# The new name for the mission
+# If blank, the old mission name will be re-used with -copy appended to the end
+string new_name
+
+# If true, the order of the waypoints within the cloned mission are reversed
+bool reverse
+---
+# The Mission with the given ID, or null if no Mission with that ID exists
+clearpath_navigation_msgs/NetworkMission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ClonePointOfInterest.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ClonePointOfInterest.srv
new file mode 100644
index 0000000..230932a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ClonePointOfInterest.srv
@@ -0,0 +1,5 @@
+string uuid
+
+string new_name
+---
+clearpath_navigation_msgs/PointOfInterest result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateMission.srv
new file mode 100644
index 0000000..129a803
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateMission.srv
@@ -0,0 +1,18 @@
+# The desired name for the new mission
+string name
+
+# The additional configuration options
+# see clearpath_navigation_msgs/msg/Mission for details
+string onav_config
+
+# The ordered list of Waypoint UUIDs to include in this mission
+string[] waypoint_ids
+
+# The ordered list of Task UUIDs to include in the on_start Task Array
+string[] on_start_ids
+
+# The ordered list of Task UUIDs to include in the on_stop Task Array
+string[] on_stop_ids
+---
+# The resulting Mission, with an auto-generated UUID is returned
+clearpath_navigation_msgs/Mission result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMap.srv
new file mode 100644
index 0000000..174950f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMap.srv
@@ -0,0 +1,21 @@
+# Create a new NetworkMap
+
+# The human-readable name for the map
+string name
+
+float32 default_radius
+float32 default_speed_limit
+
+# The UUIDs of the points will be re-generated when creating the map.
+# When calling this service it is acceptable to use e.g. 0, 1, 2, ... to identify each point and re-use these
+# values for the start/stop points in the connections
+clearpath_navigation_msgs/NetworkPoint[] points
+
+# A simplified array of edges; just specify the start and end point IDs from the array above, rather than providing
+# complete point objects
+clearpath_mission_manager_msgs/NetworkEdgeReq[] connections
+
+---
+
+# The resulting NetworkMap with an auto-generated UUID is returned
+clearpath_navigation_msgs/NetworkMap result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMission.srv
new file mode 100644
index 0000000..90ef5f6
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateNetworkMission.srv
@@ -0,0 +1,37 @@
+# The desired name for the new mission
+string name
+
+# The additional configuration options
+# see clearpath_navigation_msgs/msg/Mission for details
+string onav_config
+
+# The ordered list of Waypoint UUIDs to include in this mission
+string[] waypoint_ids
+
+# The ordered list of Task UUIDs to include in the on_start Task Array
+string[] on_start_ids
+
+# The ordered list of Task UUIDs to include in the on_stop Task Array
+string[] on_stop_ids
+
+# Boolean value indicating whether robot should attempt 'return to dock' behavior
+# when battery level drops below return_to_dock_battery_level
+bool return_to_dock_enabled
+
+# Dock UUID that the robot should return to for 'return to dock' behavior
+string return_to_dock_id
+
+# Value from 0 to 1 indicating what charge level the robot will return to dock at
+float32 return_to_dock_battery_level
+
+# Value from 0 to 1 indicating what charge level the robot should resume this mission at
+# after returning to dock for recharging
+float32 resume_mission_battery_level
+
+# Boolean value indicating whether 'network' level replanning should be performed
+# in the event that a network edge is deemed un-traversable (e.g., due to obstacles)
+bool network_replan_enabled
+
+---
+# The resulting Mission, with an auto-generated UUID is returned
+clearpath_navigation_msgs/NetworkMission result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreatePointOfInterest.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreatePointOfInterest.srv
new file mode 100644
index 0000000..45f5948
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreatePointOfInterest.srv
@@ -0,0 +1,23 @@
+# The human-readable name of this POI
+string name
+
+# The latitude (in decimal degrees) of this POI
+float64 latitude
+
+# The longitude (in decinal degrees) of this POI
+float64 longitude
+
+# The height above ground level (in meters)
+float64 elevation
+
+# The compass heading (in degrees) of this POI (optional)
+bool enable_heading
+float64 heading
+
+# A set of labels assigned to the POI in order to categorize it
+string[] tags
+
+# A JSON formatted string that contains user defined POI fields
+string custom_fields_json
+---
+clearpath_navigation_msgs/PointOfInterest result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateTask.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateTask.srv
new file mode 100644
index 0000000..1660e7a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateTask.srv
@@ -0,0 +1,35 @@
+# The desired name for the Task
+string name
+
+# The ROS Action to invoke to execute the task
+string action_server_name
+
+# The version of the task
+string version
+
+# The numerical arguments to pass to the action_server_name
+float64[] floats
+
+# The string arguments to pass to the action_server_name
+string[] strings
+
+# Boolean value which determines whether a mission using this task can continue
+# if this task fails to execute
+bool allow_failure
+
+# Optional list of Waypoint UUIDs to assign this task to automatically
+# The new task will be appended to the end of the existing Waypoints
+string[] assign_to_wp
+
+# Optional list of Mission UUIDs to assign this task to automatically
+# The new task will be appended to the end of the existing on_start tasks
+# associated with the specified mission
+string[] assign_on_start
+
+# Optional list of Waypoint UUIDs to assign this task to automatically
+# The new task will be appended to the end of the existing on_stop tasks
+# associated with the specified mission
+string[] assign_on_stop
+---
+# The resulting Task with an auto-generated UUID is returned
+clearpath_navigation_msgs/Task result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypoint.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypoint.srv
new file mode 100644
index 0000000..f458dc2
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypoint.srv
@@ -0,0 +1,27 @@
+# The desired name for the Waypoint
+string name
+
+# The latitude for the Waypoint in degrees
+float64 latitude
+
+# The longitude for the Waypoint in degrees
+float64 longitude
+
+# The compass heading in degrees for the Waypoint
+float64 heading
+
+# The position tolerance for the Waypoint in meters
+float64 position_tolerance
+
+# The orientation tolerance for the Waypoint in degrees
+float64 yaw_tolerance
+
+# Optional ordered list of Task UUIDs to execute at this Waypoint
+string[] task_ids
+
+# Optional list of Mission UUIDs to assign the new Waypoint to
+# The new Waypoint is appended to the end of the existing Missions
+string[] assign_to
+---
+# The resulting Waypoint with an auto-generated UUID is returned
+clearpath_navigation_msgs/Waypoint result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypointFromPoi.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypointFromPoi.srv
new file mode 100644
index 0000000..fdf59a2
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/CreateWaypointFromPoi.srv
@@ -0,0 +1,3 @@
+clearpath_navigation_msgs/PointOfInterest point_of_interest
+---
+clearpath_navigation_msgs/Waypoint waypoint
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteById.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteById.srv
new file mode 100644
index 0000000..8076e9d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteById.srv
@@ -0,0 +1,5 @@
+# The UUID of the object we want to delete
+string uuid
+---
+# True if the item was successfully deleted, otherwise False
+bool ok
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteEverything.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteEverything.srv
new file mode 100644
index 0000000..f06cf37
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteEverything.srv
@@ -0,0 +1,8 @@
+# Used to permanently delete everything from the database.
+# Use this service at your own risk
+
+# This must be set to true to confirm you really want to delete everything
+bool yes_i_am_absolutely_sure_i_want_to_do_this
+---
+# True if the database was cleared, otherwise False
+bool ok
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteMultiple.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteMultiple.srv
new file mode 100644
index 0000000..52e5300
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/DeleteMultiple.srv
@@ -0,0 +1,8 @@
+# A list of UUIDs of items we want to delete
+string[] uuids
+
+# An optional ID of the parent object we're deleting from
+string parent_id
+---
+# A list of UUIDs that we were asked to delete, but failed to
+string[] failed_uuids
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ExportData.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ExportData.srv
new file mode 100644
index 0000000..9cff987
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ExportData.srv
@@ -0,0 +1,5 @@
+---
+# A JSON string representing the database contents.
+# This can be written to a file or used with the ImportData.srv
+# to back-up/restore the database contents
+string data
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllMissions.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllMissions.srv
new file mode 100644
index 0000000..aba5072
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllMissions.srv
@@ -0,0 +1,3 @@
+---
+# An array of all Missions defined in the database
+clearpath_navigation_msgs/Mission[] missions
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMaps.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMaps.srv
new file mode 100644
index 0000000..5b81c42
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMaps.srv
@@ -0,0 +1,2 @@
+---
+clearpath_navigation_msgs/NetworkMap[] maps
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMissions.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMissions.srv
new file mode 100644
index 0000000..e303d29
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllNetworkMissions.srv
@@ -0,0 +1,3 @@
+---
+# An array of all Missions defined in the database
+clearpath_navigation_msgs/NetworkMission[] missions
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllPointsOfInterest.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllPointsOfInterest.srv
new file mode 100644
index 0000000..86a7354
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllPointsOfInterest.srv
@@ -0,0 +1,2 @@
+---
+clearpath_navigation_msgs/PointOfInterest[] points_of_interest
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllTasks.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllTasks.srv
new file mode 100644
index 0000000..fa8ae06
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllTasks.srv
@@ -0,0 +1,3 @@
+---
+# The array of all Tasks defined in the database
+clearpath_navigation_msgs/Task[] tasks
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllWaypoints.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllWaypoints.srv
new file mode 100644
index 0000000..66d1c92
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetAllWaypoints.srv
@@ -0,0 +1,3 @@
+---
+# The array of all Waypoints defined in the database
+clearpath_navigation_msgs/Waypoint[] waypoints
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetEverything.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetEverything.srv
new file mode 100644
index 0000000..c4fee04
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetEverything.srv
@@ -0,0 +1,3 @@
+---
+# All Missions, Waypoints, and Tasks defined in the database
+clearpath_mission_manager_msgs/StorageState state
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetMission.srv
new file mode 100644
index 0000000..369747c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetMission.srv
@@ -0,0 +1,5 @@
+# The UUID of the Mission we want to retrieve
+string uuid
+---
+# The Mission with the given ID, or null if no Mission with that ID exists
+clearpath_navigation_msgs/Mission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMap.srv
new file mode 100644
index 0000000..98647a2
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMap.srv
@@ -0,0 +1,4 @@
+# The UUID of the NetworkMap we want to retrieve
+string uuid
+---
+clearpath_navigation_msgs/NetworkMap map
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMission.srv
new file mode 100644
index 0000000..49aa655
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetNetworkMission.srv
@@ -0,0 +1,5 @@
+# The UUID of the NetworkMission we want to retrieve
+string uuid
+---
+# The Mission with the given ID, or null if no Mission with that ID exists
+clearpath_navigation_msgs/NetworkMission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetPointOfInterest.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetPointOfInterest.srv
new file mode 100644
index 0000000..667bbac
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetPointOfInterest.srv
@@ -0,0 +1,3 @@
+string uuid
+---
+clearpath_navigation_msgs/PointOfInterest point_of_interest
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetTask.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetTask.srv
new file mode 100644
index 0000000..8a47d1d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetTask.srv
@@ -0,0 +1,5 @@
+# The UUID of the Task we want to retrieve
+string uuid
+---
+# The Task with the given ID, or null if no Task with that ID exists
+clearpath_navigation_msgs/Task task
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetWaypoint.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetWaypoint.srv
new file mode 100644
index 0000000..df77fa7
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/GetWaypoint.srv
@@ -0,0 +1,5 @@
+# The UUID of the Waypoint we want to retrieve
+string uuid
+---
+# The Waypoint with the given ID, or null if no Waypoint with that ID exists
+clearpath_navigation_msgs/Waypoint waypoint
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportData.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportData.srv
new file mode 100644
index 0000000..2ce8ca5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportData.srv
@@ -0,0 +1,7 @@
+# A JSON string representing the database contents.
+# This is the same as the data output by the ExportData service, and is intended
+# to be used to restore the database to a previous state
+string data
+---
+# The state of the database after importing the data
+clearpath_mission_manager_msgs/StorageState state
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportMission.srv
new file mode 100644
index 0000000..734810c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportMission.srv
@@ -0,0 +1,6 @@
+# The mission to import. UUIDs that do not already exist are added, but objects with existing UUIDs
+# are re-used
+clearpath_navigation_msgs/Mission mission
+---
+# The imported mission
+clearpath_navigation_msgs/Mission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMap.srv
new file mode 100644
index 0000000..9f6e9af
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMap.srv
@@ -0,0 +1,6 @@
+# The map to import. UUIDs that do not already exist are added, but objects with existing UUIDs
+# are re-used
+clearpath_navigation_msgs/NetworkMap map
+---
+# The imported map
+clearpath_navigation_msgs/NetworkMap map
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMission.srv
new file mode 100644
index 0000000..74d0e90
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ImportNetworkMission.srv
@@ -0,0 +1,6 @@
+# The mission to import. UUIDs that do not already exist are added, but objects with existing UUIDs
+# are re-used
+clearpath_navigation_msgs/NetworkMission mission
+---
+# The imported mission
+clearpath_navigation_msgs/NetworkMission mission
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/SplitNetworkEdge.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/SplitNetworkEdge.srv
new file mode 100644
index 0000000..b8c0360
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/SplitNetworkEdge.srv
@@ -0,0 +1,17 @@
+# Splits an edge on a NetworkMap to connect to a new point
+
+# The UUID of the map to edit
+string map_id
+
+# The UUID of the edge we want to split
+string edge_id
+
+# The position of the new point to create
+float64 new_point_latitude
+float64 new_point_longitude
+
+# If true, we also split the reverse edge (if it exists)
+bool symmetrical
+---
+# The map in its new state
+clearpath_navigation_msgs/NetworkMap result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateMission.srv
new file mode 100644
index 0000000..0c32ab9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateMission.srv
@@ -0,0 +1,20 @@
+# The UUID of the mission we want to edit
+string uuid
+
+# The human-readable name for the Mission
+string name
+
+# The configuration parameters for the Mission
+string onav_config
+
+# The ordered list of Waypoint UUIDs to include in the Mission
+string[] waypoint_ids
+
+# The ordered list of Task UUIDs to include in the on_start Task Array
+string[] on_start_ids
+
+# The ordered list of Task UUIDs to include in the on_stop Task Array
+string[] on_stop_ids
+---
+# The edited Mission, or null if no mission with the given ID exists
+clearpath_navigation_msgs/Mission result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdge.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdge.srv
new file mode 100644
index 0000000..74f6479
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdge.srv
@@ -0,0 +1,27 @@
+# The UUID of the map we're operating on
+string map_id
+
+# The UUIDs of the start and end points for this edge
+string uuid
+
+# The UUIDs of the start & end points of the edge we're editing
+# Ignored if null/empty
+string start_point_id
+string end_point_id
+
+# The operational radius around the edge
+float32 radius
+
+# The speed limit when driving along this edge
+float32 speed_limit
+
+# An additional cost factor to prioritize certain edges over others in the planner
+# Higher costs -> edge is less likely to be included in the planned route
+# Expected range is (0.0, 100.0) (exclusive range).
+# Values outside the expected range will be treated as the default 1.0
+float32 cost_factor
+
+---
+
+# The updated edge
+clearpath_navigation_msgs/NetworkEdge result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdges.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdges.srv
new file mode 100644
index 0000000..6821d3e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkEdges.srv
@@ -0,0 +1,23 @@
+# Update multiple edges in a single map
+
+# The UUID of the map we're operating on
+string map_id
+
+# The UUIDs of the start and end points for this edge
+string[] uuids
+
+# The operational radii around the edges
+# Ignored if negative
+float32[] radii
+
+# The speed limit when driving along the edges
+# Ignored if negative
+float32[] speed_limits
+
+# The cost factors of the edges
+float32[] cost_factors
+
+---
+
+# The updated edge
+clearpath_navigation_msgs/NetworkEdge[] result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMap.srv
new file mode 100644
index 0000000..81c2c64
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMap.srv
@@ -0,0 +1,7 @@
+string uuid
+
+string name
+float32 default_radius
+float32 default_speed_limit
+---
+clearpath_navigation_msgs/NetworkMap result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMission.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMission.srv
new file mode 100644
index 0000000..5e58b01
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkMission.srv
@@ -0,0 +1,40 @@
+# The UUID of the mission we want to edit
+string uuid
+
+# The desired name for the new mission
+string name
+
+# The additional configuration options
+# see clearpath_navigation_msgs/msg/Mission for details
+string onav_config
+
+# The ordered list of Waypoint UUIDs to include in this mission
+string[] waypoint_ids
+
+# The ordered list of Task UUIDs to include in the on_start Task Array
+string[] on_start_ids
+
+# The ordered list of Task UUIDs to include in the on_stop Task Array
+string[] on_stop_ids
+
+# Boolean value indicating whether robot should attempt 'return to dock' behavior
+# when battery level drops below return_to_dock_battery_level
+bool return_to_dock_enabled
+
+# Dock UUID that the robot should return to for 'return to dock' behavior
+string return_to_dock_id
+
+# Value from 0 to 1 indicating what charge level the robot will return to dock at
+float32 return_to_dock_battery_level
+
+# Value from 0 to 1 indicating what charge level the robot should resume this mission at
+# after returning to dock for recharging
+float32 resume_mission_battery_level
+
+# Boolean value indicating whether 'network' level replanning should be performed
+# in the event that a network edge is deemed un-traversable (e.g., due to obstacles)
+bool network_replan_enabled
+
+---
+# The resulting Mission, with an auto-generated UUID is returned
+clearpath_navigation_msgs/NetworkMission result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoint.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoint.srv
new file mode 100644
index 0000000..411304f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoint.srv
@@ -0,0 +1,14 @@
+# The UUID of the map we're working on
+string map_id
+
+# The UUID of the point to edit
+string uuid
+
+# The location of this point on the map
+float64 latitude
+float64 longitude
+
+---
+
+# The added point, with generated UUID
+clearpath_navigation_msgs/NetworkPoint result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoints.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoints.srv
new file mode 100644
index 0000000..9126f29
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateNetworkPoints.srv
@@ -0,0 +1,14 @@
+# The UUID of the map we're working on
+string map_id
+
+# The UUID of the points to edit
+string[] uuids
+
+# The location of the points on the map, in the same order as uuids
+float64[] latitudes
+float64[] longitudes
+
+---
+
+# The added point, with generated UUID
+clearpath_navigation_msgs/NetworkPoint[] result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdatePointOfInterest.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdatePointOfInterest.srv
new file mode 100644
index 0000000..26e9163
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdatePointOfInterest.srv
@@ -0,0 +1,26 @@
+# The ID of the point to edit
+string uuid
+
+# The human-readable name of this POI
+string name
+
+# The latitude (in decimal degrees) of this POI
+float64 latitude
+
+# The longitude (in decinal degrees) of this POI
+float64 longitude
+
+# The height above ground level (in meters)
+float64 elevation
+
+# The compass heading (in degrees) of this POI (optional)
+bool enable_heading
+float64 heading
+
+# A set of labels assigned to the POI in order to categorize it
+string[] tags
+
+# A JSON formatted string that contains user defined POI fields
+string custom_fields_json
+---
+clearpath_navigation_msgs/PointOfInterest result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateTask.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateTask.srv
new file mode 100644
index 0000000..b494302
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateTask.srv
@@ -0,0 +1,24 @@
+# The UUID of the Task to edit
+string uuid
+
+# The human-readable name for the Task
+string name
+
+# The ROS Action that the Task executes
+string action_server_name
+
+# The version of the Task
+string version
+
+# The numerical data to pass to the action_server_name
+float64[] floats
+
+# The string data to pass to the action_server_name
+string[] strings
+
+# Boolean value which determines whether a mission using this task can continue
+# if this task fails to execute
+bool allow_failure
+---
+# The edited Task, or null if no Task with the given ID exists
+clearpath_navigation_msgs/Task result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateWaypoint.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateWaypoint.srv
new file mode 100644
index 0000000..13cce9f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/UpdateWaypoint.srv
@@ -0,0 +1,26 @@
+# The UUID of the Waypoint to edit
+string uuid
+
+# The human-readable name for the Waypoint
+string name
+
+# The latitude of the Waypoint in degrees
+float64 latitude
+
+# The longitude of the Waypoint in degrees
+float64 longitude
+
+# The compass heading of the Waypoint in degrees
+float64 heading
+
+# The Waypoint's position tolerance in meters
+float64 position_tolerance
+
+# The Waypoint's orientation tolerance in degrees
+float64 yaw_tolerance
+
+# The ordered list of Task UUIDs to execute at this Waypoint
+string[] task_ids
+---
+# The edited Waypoint, or null if no Waypoint with the given ID exists
+clearpath_navigation_msgs/Waypoint result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ValidateNetworkMap.srv b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ValidateNetworkMap.srv
new file mode 100644
index 0000000..ab7071a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_manager_msgs/srv/ValidateNetworkMap.srv
@@ -0,0 +1,6 @@
+# Checks that a Network of Paths map is valid and error/warning-free
+
+# The UUID of the map to check
+string uuid
+---
+clearpath_mission_manager_msgs/NetworkMapState state
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..8665df3
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CHANGELOG.rst
@@ -0,0 +1,40 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_mission_scheduler_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+* Add additional messages for Network of Paths
+* Contributors: Chris Iverach-Brereton , Stephen Phillips
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* Use raw JSON strings for import & export; don't bother gzipping & base-64 encoding them
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CMakeLists.txt
new file mode 100644
index 0000000..b47a585
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_mission_scheduler_msgs)
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(builtin_interfaces REQUIRED)
+find_package(clearpath_navigation_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ action/RunScheduleByUuid.action
+ msg/NextSchedule.msg
+ msg/Schedule.msg
+ msg/StorageState.msg
+ msg/UtcTime.msg
+ srv/CloneSchedule.srv
+ srv/CreateSchedule.srv
+ srv/EnableSchedule.srv
+ srv/ExportData.srv
+ srv/GetAllSchedules.srv
+ srv/GetNextSchedule.srv
+ srv/GetSchedule.srv
+ srv/ImportData.srv
+ srv/UpdateSchedule.srv
+ DEPENDENCIES
+ builtin_interfaces
+ clearpath_navigation_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/action/RunScheduleByUuid.action b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/action/RunScheduleByUuid.action
new file mode 100644
index 0000000..14b221a
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/action/RunScheduleByUuid.action
@@ -0,0 +1,17 @@
+# Action definition for executing a schedule on-demand
+# Potentially only useful for debugging
+
+# The UUID of the schedule to execute
+string uuid
+
+# Wait this long before starting the schedule
+builtin_interfaces/Duration delay
+---
+# Did the schedule terminate successfully?
+bool success
+---
+# The ID of the mission we're executing right now
+string current_mission_uuid
+
+# One of "waiting" or "executing" indicating what the schedule is doing
+string state
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/NextSchedule.msg b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/NextSchedule.msg
new file mode 100644
index 0000000..238f425
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/NextSchedule.msg
@@ -0,0 +1,6 @@
+# The ID of the next schedule to start
+# Empty if nothing is scheduled
+string uuid
+
+# The time until the schedule starts (rounded to the nearest second)
+builtin_interfaces/Duration time_to_start
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/Schedule.msg b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/Schedule.msg
new file mode 100644
index 0000000..ba22944
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/Schedule.msg
@@ -0,0 +1,45 @@
+# Single-execution mode; the schedule starts at the designated time and runs once
+uint8 MODE_ONCE=0
+
+# Looping mode; the schedule starts at the designated time, and every loop_interval seconds after
+# for the designated number of repeats
+uint8 MODE_LOOP=1
+
+# Single-shot execution, but does NOT get added to the persistent storage
+# Equivalent to MODE_ONCE, but for one-off, throw-away schedules (e.g. "Run X in 5 minutes")
+uint8 MODE_TRANSIENT=2
+
+# The human-readable name for this schedule
+# Should be unique, but there's no hard requirement for it to be so
+string name
+
+# The unique ID of this schedule
+# A string of the form "12345678-90ab-cdef-1234-567890abcdef"
+string uuid
+
+# The time that this mission starts every day
+clearpath_mission_scheduler_msgs/UtcTime start_time
+
+# Either MODE_ONCE or MODE_LOOP to indicate the execution mode
+uint8 mode
+
+# In MODE_LOOP, how many times do we repeat the missions?
+uint8 loop_repeats
+
+# In MODE_LOOP, how long do we wait between executions?
+builtin_interfaces/Duration loop_interval
+
+# The ordered list of Mission UUIDs to execute
+string[] mission_ids
+
+# The minimum battery charge needed before we execute the missions
+# Must be in the range 0-1
+float32 min_battery
+
+# If the missions take longer than this to execute, assume the schedule has failed and alert the user
+# Set to zero to disable the timeout
+builtin_interfaces/Duration timeout
+
+# Is this schedule enabled?
+# Only enabled schedules will execute
+bool enabled
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/StorageState.msg b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/StorageState.msg
new file mode 100644
index 0000000..8d72082
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/StorageState.msg
@@ -0,0 +1 @@
+clearpath_mission_scheduler_msgs/Schedule[] schedules
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/UtcTime.msg b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/UtcTime.msg
new file mode 100644
index 0000000..e7ed930
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/msg/UtcTime.msg
@@ -0,0 +1,13 @@
+# Represents a moment in time on a 24-hour clock
+
+# The hour, 0-23
+uint8 hour
+
+# The minute, 0-59
+uint8 minute
+
+# The second, 0-59
+uint8 second
+
+# Milliseconds, 0-999 (not typically needed)
+uint16 millisecond
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/package.xml
new file mode 100644
index 0000000..bc46f10
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/package.xml
@@ -0,0 +1,27 @@
+
+
+
+ clearpath_mission_scheduler_msgs
+ 0.9.9
+ The clearpath_mission_scheduler_msgs package
+
+ Chris Iverach-Brereton
+ Chris Iverach-Brereton
+
+ Clearpath Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ action_msgs
+ builtin_interfaces
+ clearpath_navigation_msgs
+ rosidl_default_runtime
+
+
+ ament_cmake
+
+ rosidl_interface_packages
+
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CloneSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CloneSchedule.srv
new file mode 100644
index 0000000..66f4398
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CloneSchedule.srv
@@ -0,0 +1,9 @@
+# The UUID of the schedule to clone
+string uuid
+
+# The name for the new copy of the schedule
+string new_name
+---
+# The cloned schedule
+# This should be identical to the original, but with a new name and new UUID
+clearpath_mission_scheduler_msgs/Schedule schedule
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CreateSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CreateSchedule.srv
new file mode 100644
index 0000000..da002d8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/CreateSchedule.srv
@@ -0,0 +1,35 @@
+# The human-readable name for this schedule
+# Should be unique, but there's no hard requirement for it to be so
+string name
+
+# The time that this mission starts every day
+clearpath_mission_scheduler_msgs/UtcTime start_time
+
+# Either Schedule.MODE_ONCE, Schedule.MODE_LOOP, OR Schedule.MODE_TRANSIENT to indicate the execution mode
+uint8 mode
+
+# In MODE_LOOP, how many times do we repeat the missions?
+uint8 loop_repeats
+
+# In MODE_LOOP, how long do we wait between executions?
+builtin_interfaces/Duration loop_interval
+
+# The ordered list of Mission UUIDs to execute
+string[] mission_ids
+
+# The minimum battery charge needed before we execute the missions
+# Must be in the range 0-1
+float32 min_battery
+
+# If the missions take longer than this to execute, assume the schedule has failed and alert the user
+# Set to zero to disable the timeout
+builtin_interfaces/Duration timeout
+
+# Is this schedule enabled?
+# Only enabled schedules will execute
+bool enabled
+
+---
+
+# The created mission, as-saved on disk
+clearpath_mission_scheduler_msgs/Schedule result
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/EnableSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/EnableSchedule.srv
new file mode 100644
index 0000000..cdeafd5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/EnableSchedule.srv
@@ -0,0 +1,11 @@
+# The ID of the schedule to enable/disable
+string uuid
+
+# Should this schedule be enabled or disabled?
+bool enable
+
+---
+
+# True if we successfully enabled/disabled the schedule
+# False if there was an error or the schedule wasn't found
+bool ok
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ExportData.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ExportData.srv
new file mode 100644
index 0000000..9cff987
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ExportData.srv
@@ -0,0 +1,5 @@
+---
+# A JSON string representing the database contents.
+# This can be written to a file or used with the ImportData.srv
+# to back-up/restore the database contents
+string data
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetAllSchedules.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetAllSchedules.srv
new file mode 100644
index 0000000..5c17728
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetAllSchedules.srv
@@ -0,0 +1,2 @@
+---
+clearpath_mission_scheduler_msgs/Schedule[] schedules
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetNextSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetNextSchedule.srv
new file mode 100644
index 0000000..b1d2541
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetNextSchedule.srv
@@ -0,0 +1,7 @@
+---
+# The ID of the next schedule to start
+# Empty if nothing is scheduled
+string uuid
+
+# The time until the schedule starts (rounded to the nearest second)
+builtin_interfaces/Duration time_to_start
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetSchedule.srv
new file mode 100644
index 0000000..da511c2
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/GetSchedule.srv
@@ -0,0 +1,3 @@
+string uuid
+---
+clearpath_mission_scheduler_msgs/Schedule schedule
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ImportData.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ImportData.srv
new file mode 100644
index 0000000..9eb03ec
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/ImportData.srv
@@ -0,0 +1,7 @@
+# A JSON string representing the database contents.
+# This is the same as the data output by the ExportData service, and is intended
+# to be used to restore the database to a previous state
+string data
+---
+# The state of the database after importing the data
+clearpath_mission_scheduler_msgs/StorageState state
diff --git a/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/UpdateSchedule.srv b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/UpdateSchedule.srv
new file mode 100644
index 0000000..400b510
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_mission_scheduler_msgs/srv/UpdateSchedule.srv
@@ -0,0 +1,38 @@
+# The ID of the mission to edit
+string uuid
+
+# The human-readable name for this schedule
+# Should be unique, but there's no hard requirement for it to be so
+string name
+
+# The time that this mission starts every day
+clearpath_mission_scheduler_msgs/UtcTime start_time
+
+# Either Schedule.MODE_ONCE, Schedule.MODE_LOOP, OR Schedule.MODE_TRANSIENT to indicate the execution mode
+uint8 mode
+
+# In MODE_LOOP, how many times do we repeat the missions?
+uint8 loop_repeats
+
+# In MODE_LOOP, how long do we wait between executions?
+builtin_interfaces/Duration loop_interval
+
+# The ordered list of Mission UUIDs to execute
+string[] mission_ids
+
+# The minimum battery charge needed before we execute the missions
+# Must be in the range 0-1
+float32 min_battery
+
+# If the missions take longer than this to execute, assume the schedule has failed and alert the user
+# Set to zero to disable the timeout
+builtin_interfaces/Duration timeout
+
+# Is this schedule enabled?
+# Only enabled schedules will execute
+bool enabled
+
+---
+
+# The modified mission, as-saved on disk
+clearpath_mission_scheduler_msgs/Schedule result
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..baa2122
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CHANGELOG.rst
@@ -0,0 +1,69 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_navigation_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+* Message updates for onav-0.12 (`#34 `_)
+ * Add the size_exceeded field to NetworkMapState
+ * Mod: Update dock messages for new 0.12 docking APIs
+ * Mod: Add new autonomy API types to AutonomyStatus.msg
+ * Mod: Use float64 version of Vector2D for returning path recording lat-lons
+ * Mod: Add header field to RunNetworkGoToPlanner.action feedback
+ ---------
+ Co-authored-by: Chris Iverach-Brereton
+* Contributors: stephen-cpr
+
+0.9.8 (2024-03-11)
+------------------
+* Add additional messages for Network of Paths
+* Contributors: Chris Iverach-Brereton , Stephen Phillips
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* [ONAV-1772] Add 'allow_failure' boolean to Task message type
+ - When set to True, any missions that execute this task will be allowed to continue if the task fails
+* Merge pull request `#18 `_ from stephen-cpr/ONAV-1771/on_start_stop_tasks
+ [ONAV-1771] Add support for on_start / on_stop Mission Tasks
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* [ONAV-1771] Add support for on_start / on_stop Mission Tasks
+ - clearpath_navigation_msgs/Mission.msg has been updated to include 'on_start' and 'on_stop' Task arrays which are executed when the mission begins and ends respectively (on_stop Tasks will execute regardless of mission failure or success)
+ - The CreateTask service has been updated to include 'assign_on_start' and 'assign_on_stop' fields (similar functionality as the 'assign_to' field)
+ - The 'assign_to' field of the CreateTask service has been updated to 'assign_to_wp' to distinguish it from assign_on_start/assign_on_stop
+ - Added the following service endpoints to mission_manager (using the AddRemoveById.srv type):
+ - ~add_task_to_start & ~add_task_to_stop - Adds a task to the on_start/on_stop array for given mission
+ - ~remove_task_from_start & ~remove_task_from_stop - Removes a task from the on_start/on_stop array for given mission
+* Contributors: Stephen Phillips, Tony Baltovski
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+
+0.9.2 (2023-10-17)
+------------------
+* [ONAV-1546] Add autonomy API option to start mission from current position
+ - Changes to the ExecuteMissionByUuid.action and Mission.action to support 'Resuming' missions and starting missions from specified waypoints.
+ - The combination of the 'from_start' and 'start_waypoint' field determine the behavior:
+ - from_start == True will always force the mission to run from the beginning
+ - from_start == False AND start_waypoint_uuid/start_waypoint == Null will let autonomy decide where to start the mission ('closest' waypoint)
+ - from_start == False AND start_waypoint_uuid/start_waypoint != Null will tell autonomy to start the mission from the specified waypoint (useful in area-coverage type applications)
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton, Stephen Phillips, Tony Baltovski
+
+0.9.1 (2023-08-22)
+------------------
+* Add comments to Waypoint message to match documentation
+* Added Metrics.msg
+* Contributors: Chris Iverach-Brereton, José Mastrangelo
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CMakeLists.txt
new file mode 100644
index 0000000..699c6b7
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/CMakeLists.txt
@@ -0,0 +1,66 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_navigation_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(builtin_interfaces REQUIRED)
+find_package(geometry_msgs REQUIRED)
+find_package(nav_msgs REQUIRED)
+find_package(std_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ action/ExecuteMissionByUuid.action
+ action/ExecuteNetworkGoTo.action
+ action/ExecuteNetworkMissionByUuid.action
+ action/GetWaypointPath.action
+ action/Mission.action
+ action/RecordPath.action
+ action/RunNetworkGoToPlanner.action
+ action/RunNetworkMissionPreviewer.action
+ action/SmoothPath.action
+ action/UITask.action
+ msg/AutonomyStatus.msg
+ msg/DistanceToGoal.msg
+ msg/Metrics.msg
+ msg/Mission.msg
+ msg/MissionStatus.msg
+ msg/MotionState.msg
+ msg/NavigationState.msg
+ msg/NetworkEdge.msg
+ msg/NetworkGoalState.msg
+ msg/NetworkMap.msg
+ msg/NetworkMission.msg
+ msg/NetworkMissionSegment.msg
+ msg/NetworkPoint.msg
+ msg/OdomIntent.msg
+ msg/PointOfInterest.msg
+ msg/PointVector.msg
+ msg/Progress.msg
+ msg/ScanPoints.msg
+ msg/Task.msg
+ msg/TrackError.msg
+ msg/Vector2D.msg
+ msg/Vector2D64.msg
+ msg/Waypoint.msg
+ msg/WaypointStatus.msg
+ srv/AutonomyTaskSrv.srv
+ srv/SetDelayCompensation.srv
+ srv/SetPathShifter.srv
+ srv/SetPathSmoother.srv
+ srv/SetStopDistance.srv
+ DEPENDENCIES
+ builtin_interfaces
+ geometry_msgs
+ nav_msgs
+ std_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteMissionByUuid.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteMissionByUuid.action
new file mode 100644
index 0000000..fc420e8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteMissionByUuid.action
@@ -0,0 +1,19 @@
+# Action definition for executing a mission by uuid
+
+# goal
+
+string uuid # UUID of The mission being executed
+
+# from_start = True -> Forces the mission to execute from the beginning
+bool from_start
+
+# If from_start = False, mission will be executed from the waypoint with UUID specified.
+# If from_start = False and no start_waypoint_uuid is specified then autonomy will pick the closest waypoint
+string start_waypoint_uuid
+---
+# result
+bool success
+string message
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkGoTo.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkGoTo.action
new file mode 100644
index 0000000..e2c9b41
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkGoTo.action
@@ -0,0 +1,28 @@
+# Action definition for sending a mission to the Clearpath OutdoorNav software
+
+# goal
+string map_uuid
+clearpath_navigation_msgs/Waypoint waypoint
+
+---
+# result
+
+uint8 UNKNOWN = 0
+uint8 CANCELLED = 1
+uint8 COLLISION = 2
+uint8 PLANNING = 3
+uint8 START_TASKS = 4
+uint8 END_TASKS = 5
+uint8 MISSION_TASKS = 6
+uint8 code
+
+bool success
+string message
+uint16 NONE=0
+uint16 error_code
+string error_msg
+
+---
+# feedback
+string message
+clearpath_navigation_msgs/NetworkMissionSegment network_plan
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkMissionByUuid.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkMissionByUuid.action
new file mode 100644
index 0000000..9e18aaa
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/ExecuteNetworkMissionByUuid.action
@@ -0,0 +1,29 @@
+# Action definition for executing a NetworkMission by uuid
+
+# goal
+string mission_uuid
+string map_uuid
+
+---
+# result
+
+uint8 UNKNOWN = 0
+uint8 CANCELLED = 1
+uint8 COLLISION = 2
+uint8 PLANNING = 3
+uint8 START_TASKS = 4
+uint8 END_TASKS = 5
+uint8 MISSION_TASKS = 6
+uint8 code
+
+bool success
+string message
+clearpath_navigation_msgs/NetworkGoalState[] goal_states
+uint16 NONE=0
+uint16 error_code
+string error_msg
+---
+# feedback
+string message
+clearpath_navigation_msgs/NetworkGoalState[] goal_states
+clearpath_navigation_msgs/NetworkMissionSegment network_plan
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/GetWaypointPath.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/GetWaypointPath.action
new file mode 100644
index 0000000..8e288f9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/GetWaypointPath.action
@@ -0,0 +1,37 @@
+geometry_msgs/PoseStamped[] waypoints
+bool use_start_pose # Use start_pose or current position as the beginning of the path
+geometry_msgs/PoseStamped start_pose # The start pose for the path; optional, used if use_start_pose is true
+float64 tolerance # If the goal is obstructed, how many meters the planner can relax the constraint in x and y before failing
+string planner # Planner to use; defaults to the first one specified on "planners" parameter
+uint8 concurrency_slot # use different slots for concurrency
+
+---
+
+# Predefined success codes:
+uint8 SUCCESS = 0
+# 1..9 are reserved as plugin specific non-error results
+
+# Possible error codes:
+uint8 FAILURE = 50 # Unspecified failure, only used for old, non-mfb_core based plugins
+uint8 CANCELED = 51 # The action has been canceled by a action client
+uint8 INVALID_START = 52 #
+uint8 INVALID_GOAL = 53
+uint8 NO_PATH_FOUND = 54
+uint8 PAT_EXCEEDED = 55
+uint8 EMPTY_PATH = 56
+uint8 TF_ERROR = 57
+uint8 NOT_INITIALIZED = 58
+uint8 INVALID_PLUGIN = 59
+uint8 INTERNAL_ERROR = 60
+uint8 OUT_OF_MAP = 61
+uint8 MAP_ERROR = 62
+uint8 STOPPED = 63 # The planner execution has been stopped rigorously.
+
+# 71..99 are reserved as plugin specific errors
+
+uint32 outcome
+string message
+nav_msgs/Path path
+float64 cost
+builtin_interfaces/Duration planning_time
+---
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/Mission.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/Mission.action
new file mode 100644
index 0000000..32bc0d0
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/Mission.action
@@ -0,0 +1,18 @@
+# Action definition for sending a mission to the Clearpath OutdoorNav software
+
+# goal
+clearpath_navigation_msgs/Mission mission
+
+# from_start = True -> Forces the mission to execute from the beginning
+bool from_start
+
+# If from_start = False, mission will be executed from the start_waypoint specified.
+# If from_start = False and no start_waypoint is specified then autonomy will pick the closest waypoint
+clearpath_navigation_msgs/Waypoint start_waypoint
+---
+# result
+bool success
+string message
+---
+# feedback
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RecordPath.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RecordPath.action
new file mode 100644
index 0000000..0451fb4
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RecordPath.action
@@ -0,0 +1,29 @@
+# Action definition for recording a path while the robot is driving
+
+# goal
+
+# the maximum allowed deviation in the smoothed path in meters
+# this value is used during the path simiplification
+float64 max_deviation
+
+# the minimum allowable distance between points (in meters) published in the feedback
+# this filters the feedback topic to reduce the number of points published
+# the final result _may_ include points closer than this distance as a result of
+# the final simplification
+float64 min_distance
+
+---
+# result
+
+# the simplified path; the length of this path will be <= the length of the last feedback
+# [0] = latitude
+# [1] = longitude
+clearpath_navigation_msgs/Vector2D64[] points
+
+---
+# feedback
+
+# current progress; the raw points recorded so far
+# [0] = latitude
+# [1] = longitude
+clearpath_navigation_msgs/Vector2D64[] points
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkGoToPlanner.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkGoToPlanner.action
new file mode 100644
index 0000000..cc0470b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkGoToPlanner.action
@@ -0,0 +1,14 @@
+# Action for starting network GoTo planner
+
+# goal
+string map_uuid
+clearpath_navigation_msgs/Waypoint waypoint
+
+---
+# result
+bool success
+
+---
+# feedback
+std_msgs/Header header
+geometry_msgs/Point[] points
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkMissionPreviewer.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkMissionPreviewer.action
new file mode 100644
index 0000000..2254b3f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/RunNetworkMissionPreviewer.action
@@ -0,0 +1,13 @@
+# Action for starting network mission previewer
+
+# goal
+string map_uuid
+string mission_uuid
+
+---
+# result
+bool success
+
+---
+# feedback
+clearpath_navigation_msgs/NetworkMissionSegment[] segments
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/SmoothPath.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/SmoothPath.action
new file mode 100644
index 0000000..e0b028b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/SmoothPath.action
@@ -0,0 +1,29 @@
+#goal
+uint8 CUBIC_SPLINE_SMOOTHER = 1
+uint8 DUBINS_SMOOTHER = 2
+uint8 GENERIC_SMOOTHER = 3
+
+nav_msgs/Path path
+uint8 type
+
+## Parameters for cubic spline smoother
+int32 spline_points_per_unit
+int32 spline_skip_points
+bool spline_use_end_conditions
+bool spline_use_middle_conditions
+
+## Parameters for dubins
+float64 dubins_turning_radius
+float64 dubins_step_size
+
+## Parameters for generic
+bool generic_enable_refinement
+int32 generic_refinement_iterations
+
+---
+#result definition
+nav_msgs/Path smoothed_path
+float64 time
+---
+#feedback
+string sequence
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/UITask.action b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/UITask.action
new file mode 100644
index 0000000..d334fd9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/action/UITask.action
@@ -0,0 +1,10 @@
+#goal definition
+string version
+float64[] floats
+string[] strings
+---
+#result definition
+bool success
+---
+#feedback
+string state
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/AutonomyStatus.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/AutonomyStatus.msg
new file mode 100644
index 0000000..10e1118
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/AutonomyStatus.msg
@@ -0,0 +1,19 @@
+# Message containing status of individual Waypoint in NetworkMission
+
+std_msgs/Header header
+builtin_interfaces/Time last_start
+string mission_uuid
+string map_uuid
+bool paused
+
+uint8 IDLE = 0
+uint8 MISSION_DIRECT = 1
+uint8 MISSION_BY_ID = 2
+uint8 NETWORK_MISSION = 3
+uint8 NETWORK_GOTO = 4
+uint8 LOCAL_DOCKING = 5
+uint8 LOCAL_UNDOCKING = 6
+uint8 RADIUS_DOCKING = 7
+uint8 NETWORK_DOCKING = 8
+
+uint8 state
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/DistanceToGoal.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/DistanceToGoal.msg
new file mode 100644
index 0000000..056a2ef
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/DistanceToGoal.msg
@@ -0,0 +1,4 @@
+# Message includes Euclidean and Path distance, in meters, to the end of the mission.
+
+float32 euclidean
+float32 path
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Metrics.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Metrics.msg
new file mode 100644
index 0000000..addee86
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Metrics.msg
@@ -0,0 +1,10 @@
+# Message containing some metric information related to the autonomy metrics.
+
+float64 total_distance_travelled # [m]
+float64 total_duration # [s]
+
+uint64 num_missions_sent
+uint64 num_missions_completed
+uint64 num_replans
+uint64 num_recoveries
+uint64 num_tasks_executed
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Mission.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Mission.msg
new file mode 100644
index 0000000..9e04f92
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Mission.msg
@@ -0,0 +1,23 @@
+# Message definition for an OutdoorNav mission
+
+std_msgs/Header header
+
+# The human-readable name of this mission
+string name
+
+# A UUID string used to uniquely identify this mission
+string uuid
+
+# The ordered list of Waypoints that make up the mission
+clearpath_navigation_msgs/Waypoint[] waypoints
+
+# An array of Tasks to execute on Mission start
+clearpath_navigation_msgs/Task[] on_start
+
+# An array of Tasks to execute on Mission stop
+# These Tasks will execute regardless of mission success or failure
+clearpath_navigation_msgs/Task[] on_stop
+
+# Configuration parameters for the mission
+# Additional details TBD
+string onav_config
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MissionStatus.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MissionStatus.msg
new file mode 100644
index 0000000..1046b7e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MissionStatus.msg
@@ -0,0 +1,8 @@
+# Message definition for an OutdoorNav mission
+
+std_msgs/Header header
+
+string name
+string uuid
+
+clearpath_navigation_msgs/WaypointStatus[] waypoints
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MotionState.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MotionState.msg
new file mode 100644
index 0000000..8faa2f5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/MotionState.msg
@@ -0,0 +1,23 @@
+# Motion state message to indicate the current motion, expected motion and the direction of travel of the robot.
+
+# State pertaining to current motion of the robot.
+uint8 MOTION_NORMAL=10
+uint8 MOTION_STOPPED=11
+uint8 MOTION_REVERSE=12
+uint8 MOTION_SLOWING=13 # Currently unused
+uint8 motion
+
+# State pertaining to the robot's movement along the path. Predictive, ie state
+# will be INDICATOR_LEFT_TURN if in or approaching a left turn.
+uint8 INDICATOR_NORMAL=20
+uint8 INDICATOR_LEFT_TURN=21
+uint8 INDICATOR_RIGHT_TURN=22
+uint8 INDICATOR_CLOCKWISE=23
+uint8 INDICATOR_COUNTERCLOCKWISE=24
+uint8 INDICATOR_HAZARD=25 # Currently unused
+uint8 indicator
+
+# Direction of travel of the robot relative to its physical forward direction.
+uint8 DIRECTION_FORWARD=30
+uint8 DIRECTION_REVERSE=31
+uint8 direction
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NavigationState.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NavigationState.msg
new file mode 100644
index 0000000..509daa5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NavigationState.msg
@@ -0,0 +1,15 @@
+# Message containing the current navigation state(s). Navigation may be in multiple states.
+
+uint8 STATE_IDLE = 0
+uint8 STATE_COMPUTE_PATH = 1
+uint8 STATE_EXECUTE_PATH = 2
+uint8 STATE_REPLAN = 3
+uint8 STATE_NAVIGATING_AROUND_OBSTACLE = 4
+uint8 STATE_RECOVERY = 5
+uint8 STATE_LOST = 6
+uint8 STATE_DONE = 7
+uint8 STATE_SAFETY_STOP = 8
+uint8 STATE_PAUSE = 9
+uint8 STATE_DISABLE = 10
+
+uint8[] states
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkEdge.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkEdge.msg
new file mode 100644
index 0000000..618aa0e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkEdge.msg
@@ -0,0 +1,26 @@
+# A directed edge connecting two NetworkPoint instances
+
+float32 MIN_COST_FACTOR = 0.0
+float32 MAX_COST_FACTOR = 100.0
+float32 DEFAULT_COST_FACTOR = 1.0
+
+# The unique ID for this edge
+string uuid
+
+# The points on either end of this edge
+clearpath_navigation_msgs/NetworkPoint start_point
+clearpath_navigation_msgs/NetworkPoint end_point
+
+# The deviation radius allowed around this edge in meters
+# If zero/negative, the planner will use the parent NetworkGraph object's default_radius property
+float32 radius
+
+# The speed limit for the zone covered by this edge in m/s
+# If zero/negative, the planner will use the parent NetworkGraph object's default_speed_limit property
+float32 speed_limit
+
+# An additional cost factor to prioritize certain edges over others in the planner
+# Higher costs -> edge is less likely to be included in the planned route
+# Expected range is (0.0, 100.0] (i.e. 0 < cost_factor <= 100).
+# Values outside the expected range will be treated as the default 1.0
+float32 cost_factor
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkGoalState.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkGoalState.msg
new file mode 100644
index 0000000..129eb57
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkGoalState.msg
@@ -0,0 +1,11 @@
+# Message containing status of individual Waypoint in NetworkMission
+
+uint8 PENDING = 0
+uint8 ACTIVE = 1
+uint8 SUCCEEDED = 2
+uint8 NAV_FAILURE = 3
+uint8 TASK_WARNING = 4
+uint8 TASK_FAILURE = 5
+
+uint8 state
+clearpath_navigation_msgs/Waypoint waypoint
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMap.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMap.msg
new file mode 100644
index 0000000..c2d3057
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMap.msg
@@ -0,0 +1,19 @@
+# The graph representing the Network of Paths
+# This is implemented as a directed graph
+
+string name
+string uuid
+
+# The default radius for all edges in the graph
+# Edges with a zero/negative radius will use this default instead
+float32 default_radius
+
+# The default speed limit for all edges in the graph
+# Edges with a zero/negative speed limit will use this default instead
+float32 default_speed_limit
+
+# The array of vertices in the graph
+clearpath_navigation_msgs/NetworkPoint[] points
+
+# The array of all edges in the graph
+clearpath_navigation_msgs/NetworkEdge[] connections
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMission.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMission.msg
new file mode 100644
index 0000000..3a242e2
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMission.msg
@@ -0,0 +1,39 @@
+# A Network of Paths mission
+# Broadly the same as a standard Mission, but with additional fields to allow NoP planning
+
+std_msgs/Header header
+
+string name
+string uuid
+
+# The ordered list of waypoints to visit during this mission
+clearpath_navigation_msgs/Waypoint[] waypoints
+
+# An array of Tasks to execute on Mission start
+clearpath_navigation_msgs/Task[] on_start
+
+# An array of Tasks to execute on Mission stop
+# These Tasks will execute regardless of mission success or failure
+clearpath_navigation_msgs/Task[] on_stop
+
+# Boolean value indicating whether robot should attempt 'return to dock' behavior
+# when battery level drops below return_to_dock_battery_level
+bool return_to_dock_enabled
+
+# Dock UUID that the robot should return to for 'return to dock' behavior
+string return_to_dock_id
+
+# Value from 0 to 1 indicating what charge level the robot will return to dock at
+float32 return_to_dock_battery_level
+
+# Value from 0 to 1 indicating what charge level the robot should resume this mission at
+# after returning to dock for recharging
+float32 resume_mission_battery_level
+
+# Boolean value indicating whether 'network' level replanning should be performed
+# in the event that a network edge is deemed un-traversable (e.g., due to obstacles)
+bool network_replan_enabled
+
+# Configuration parameters for the mission
+# Additional details TBD
+string onav_config
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMissionSegment.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMissionSegment.msg
new file mode 100644
index 0000000..7b7bfe6
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkMissionSegment.msg
@@ -0,0 +1,5 @@
+# Message containing points defining network path
+
+std_msgs/Header header
+clearpath_navigation_msgs/Waypoint goal
+geometry_msgs/Point[] points
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkPoint.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkPoint.msg
new file mode 100644
index 0000000..ce343f1
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/NetworkPoint.msg
@@ -0,0 +1,8 @@
+# A node on the network of paths
+
+# The unique ID of this point
+string uuid
+
+# The location of this point on the map
+float64 latitude
+float64 longitude
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/OdomIntent.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/OdomIntent.msg
new file mode 100644
index 0000000..256b2f7
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/OdomIntent.msg
@@ -0,0 +1,10 @@
+# Message containing current and predicted odom related information
+
+std_msgs/Header header
+
+# Current and predicted odom
+nav_msgs/Odometry odom
+nav_msgs/Odometry predicted_odom
+
+# Time offset corresponding to prediction
+float32 dt
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointOfInterest.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointOfInterest.msg
new file mode 100644
index 0000000..7016137
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointOfInterest.msg
@@ -0,0 +1,32 @@
+# Message containing the data used to represent a Point of interest (POI)
+
+# If this tag is present, the POI can be used as a navigation goal
+string TAG_GOTO = goto
+
+# If this tag is present, the POI can be set as the target for a PTZ camera action
+string TAG_INSPECT = inspect
+
+# A UUID string to uniquely identify this POI
+string uuid
+
+# The human-readable name of this POI
+string name
+
+# The latitude (in decimal degrees) of this POI
+float64 latitude
+
+# The longitude (in decinal degrees) of this POI
+float64 longitude
+
+# The height above ground level (in meters)
+float64 elevation
+
+# The compass heading (in degrees) of this POI (optional)
+bool enable_heading
+float64 heading
+
+# A set of labels assigned to the POI in order to categorize it
+string[] tags
+
+# A JSON formatted string that contains user defined POI fields
+string custom_fields_json
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointVector.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointVector.msg
new file mode 100644
index 0000000..998022d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/PointVector.msg
@@ -0,0 +1,4 @@
+# Vector of point vectors (for GUI)
+std_msgs/Header header
+
+clearpath_navigation_msgs/Vector2D[] cloud
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Progress.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Progress.msg
new file mode 100644
index 0000000..40d5cc3
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Progress.msg
@@ -0,0 +1,5 @@
+# Message containing the completion percentage of the currently executed path and the current goal.
+
+float32 path_progress
+float32 goal_progress # IN DEVELOPMENT
+float32 mission_progress # IN DEVELOPMENT
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/ScanPoints.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/ScanPoints.msg
new file mode 100644
index 0000000..f581aa9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/ScanPoints.msg
@@ -0,0 +1,6 @@
+# Message definition for the detection points used by the navigation that relate to the detected obstacles.
+
+std_msgs/Header header
+
+string[] frames_vector
+clearpath_navigation_msgs/PointVector[] cloud_vector
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Task.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Task.msg
new file mode 100644
index 0000000..2ab9ccd
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Task.msg
@@ -0,0 +1,25 @@
+# A single task that can be executed at a Waypoint
+
+# The human-readable name of this task
+string name
+
+# A UUID string to uniquely identify this Task
+string uuid
+
+# The ROS action that this task executes
+string action_server_name
+
+# The version of this task
+string version
+
+# Numerical/boolean data to be passed to the action_server_name
+# The exact meaning of these values is dependent on the underlying service
+float64[] floats
+
+# String data to be passed to the action_server_name
+# The exact meaning of these values is dependent on the underlying service
+string[] strings
+
+# Boolean value which determines whether a mission using this task can continue
+# if this task fails to execute
+bool allow_failure
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/TrackError.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/TrackError.msg
new file mode 100644
index 0000000..a251b14
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/TrackError.msg
@@ -0,0 +1,5 @@
+# The path error message containing the off-path cross track error and the relative heading error to the path direction
+
+std_msgs/Header header
+float32 cross_track_error
+float32 heading_error
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D.msg
new file mode 100644
index 0000000..9f48884
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D.msg
@@ -0,0 +1,3 @@
+# 2D Vector of floats (used for GUI)
+
+float32[2] point
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D64.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D64.msg
new file mode 100644
index 0000000..d4f0863
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Vector2D64.msg
@@ -0,0 +1,3 @@
+# 2D Vector of float64s
+
+float64[2] point
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Waypoint.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Waypoint.msg
new file mode 100644
index 0000000..9a7fb25
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/Waypoint.msg
@@ -0,0 +1,27 @@
+# A single Waypoint along a Mission
+
+# A UUID string to uniquely identify this Waypoint
+string uuid
+
+# The human-readable name of this Waypoint
+string name
+
+# The latitude (in degrees) of this Waypoint
+float64 latitude
+
+# The longitude (in degrees) of this Waypoint
+float64 longitude
+
+# The compass heading (in degrees) of this Waypoint
+float64 heading
+
+# A radius in meters indicating the acceptable radius from the target location
+# Posititon tolerance is disabled if this value is negative
+float64 position_tolerance
+
+# A tolerance in degrees indicating the acceptable deviation from the heading
+# Heading tolerance is disabled if this value is negative
+float64 yaw_tolerance
+
+# The ordered set of Tasks to execute once the goal position & orientation are reached
+clearpath_navigation_msgs/Task[] tasks
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/WaypointStatus.msg b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/WaypointStatus.msg
new file mode 100644
index 0000000..1c7edea
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/msg/WaypointStatus.msg
@@ -0,0 +1,6 @@
+# The x and y coordinates of a specific waypoint in map (utm) coordinates.
+
+clearpath_navigation_msgs/Waypoint waypoint
+
+bool visited
+bool skipped
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/package.xml
new file mode 100644
index 0000000..bc5a5f3
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/package.xml
@@ -0,0 +1,26 @@
+
+
+
+ clearpath_navigation_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav navigation module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ action_msgs
+ builtin_interfaces
+ geometry_msgs
+ nav_msgs
+ std_msgs
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/AutonomyTaskSrv.srv b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/AutonomyTaskSrv.srv
new file mode 100644
index 0000000..36f15cb
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/AutonomyTaskSrv.srv
@@ -0,0 +1,17 @@
+
+string version
+float64[] floats
+string[] strings
+---
+#List of possible things that we will use in status, add more items later
+uint8 NOGPS = 0
+uint8 NOHEADING_RTK = 1
+uint8 ROBOT_IS_MOVING = 2
+uint8 ERROR = 3
+uint8 SERVICE_NOT_AVAILABLE = 4
+uint8 PENDING = 5
+uint8 COMPLETED = 6
+
+
+bool success
+int8 status
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetDelayCompensation.srv b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetDelayCompensation.srv
new file mode 100644
index 0000000..867a2fe
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetDelayCompensation.srv
@@ -0,0 +1,7 @@
+# Service definition to enable/disable the delay compensation feature. If enabling, the delay to compensate for must be specified in the request.
+
+bool enable_delay_compensation
+uint16 delay
+---
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathShifter.srv b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathShifter.srv
new file mode 100644
index 0000000..1576422
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathShifter.srv
@@ -0,0 +1,8 @@
+# Service definition to enable/disable the path smoothing feature. If enabling, minimum turning radius must be specified in the request.
+
+bool enable_path_shifter
+float32 path_shift_offset
+float32 path_shift_time
+---
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathSmoother.srv b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathSmoother.srv
new file mode 100644
index 0000000..3182de9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetPathSmoother.srv
@@ -0,0 +1,8 @@
+# Service definition to enable/disable the path smoothing feature. If enabling, minimum turning radius must be specified in the request.
+
+bool enable_path_smoother
+float32 turn_radius
+float32 step_size
+---
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetStopDistance.srv b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetStopDistance.srv
new file mode 100644
index 0000000..81a0abe
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_navigation_msgs/srv/SetStopDistance.srv
@@ -0,0 +1,7 @@
+# Service definition to enable/disable the stop distance. If enabling, the stop distance must be specified in the request.
+
+bool enable_stop_distance
+float32 stop_distance
+---
+bool success
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/CHANGELOG.rst b/clearpath_outdoornav_msgs/clearpath_safety_msgs/CHANGELOG.rst
new file mode 100644
index 0000000..28f0053
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/CHANGELOG.rst
@@ -0,0 +1,48 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package clearpath_safety_msgs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+0.9.9 (2024-03-14)
+------------------
+
+0.9.8 (2024-03-11)
+------------------
+* remove old commented message
+* finalized assisted teleop state message
+* change stop field
+* add new endline
+* change bypass trigger to uint8
+* added bypass trigger type to state message
+* added assisted teleop messages
+* Contributors: José Mastrangelo
+
+0.9.7 (2024-02-05)
+------------------
+
+0.9.6 (2023-12-21)
+------------------
+
+0.9.5 (2023-11-03)
+------------------
+* Merge remote-tracking branch 'origin/noetic-devel' into ONAV-1771/on_start_stop_tasks
+* Contributors: Stephen Phillips
+
+0.9.4 (2023-10-20)
+------------------
+
+0.9.3 (2023-10-19)
+------------------
+* Added trigger_type field and include in message generation
+* Contributors: José Mastrangelo
+
+0.9.2 (2023-10-17)
+------------------
+* Fix over & underline length in changelogs
+* Contributors: Chris Iverach-Brereton
+
+0.9.1 (2023-08-22)
+------------------
+
+0.9.0 (2023-07-05)
+------------------
+* Initial release
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/CMakeLists.txt b/clearpath_outdoornav_msgs/clearpath_safety_msgs/CMakeLists.txt
new file mode 100644
index 0000000..4952263
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/CMakeLists.txt
@@ -0,0 +1,59 @@
+cmake_minimum_required(VERSION 3.8)
+project(clearpath_safety_msgs)
+
+## Find catkin macros and libraries
+
+find_package(rosidl_default_generators REQUIRED)
+find_package(ament_cmake REQUIRED)
+find_package(std_msgs REQUIRED)
+set(CMAKE_CXX_STANDARD 17)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ msg/AssistedTeleopState.msg
+ msg/ObstacleMap.msg
+ msg/Safety.msg
+ msg/WatchdogConfigArray.msg
+ msg/WatchdogConfigCommon.msg
+ msg/WatchdogConfigCommunication.msg
+ msg/WatchdogConfigEmergencyStop.msg
+ msg/WatchdogConfigHeartbeat.msg
+ msg/WatchdogConfigInclination.msg
+ msg/WatchdogConfigNodeletStatus.msg
+ msg/WatchdogConfigNodeStatus.msg
+ msg/WatchdogConfigNumPoints.msg
+ msg/WatchdogConfigOdomCovariance.msg
+ msg/WatchdogConfigRtkFix.msg
+ msg/WatchdogConfigTopicData.msg
+ msg/WatchdogStatus.msg
+ msg/WatchdogStatusArray.msg
+ srv/AddCommunicationWatchdog.srv
+ srv/AddEmergencyStopWatchdog.srv
+ srv/AddHeartbeatWatchdog.srv
+ srv/AddInclinationWatchdog.srv
+ srv/AddNodeletStatusWatchdog.srv
+ srv/AddNodeStatusWatchdog.srv
+ srv/AddNumPointsWatchdog.srv
+ srv/AddOdomCovarianceWatchdog.srv
+ srv/AddRtkFixWatchdog.srv
+ srv/AddTopicDataWatchdog.srv
+ srv/RemoveWatchdog.srv
+ srv/UpdateCommunicationWatchdog.srv
+ srv/UpdateEmergencyStopWatchdog.srv
+ srv/UpdateHeartbeatWatchdog.srv
+ srv/UpdateInclinationWatchdog.srv
+ srv/UpdateNodeletStatusWatchdog.srv
+ srv/UpdateNodeStatusWatchdog.srv
+ srv/UpdateNumPointsWatchdog.srv
+ srv/UpdateOdomCovarianceWatchdog.srv
+ srv/UpdateRtkFixWatchdog.srv
+ srv/UpdateTopicDataWatchdog.srv
+ DEPENDENCIES
+ std_msgs
+)
+
+ament_package()
+
+install(FILES
+ DESTINATION include/${PROJECT_NAME}
+)
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/AssistedTeleopState.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/AssistedTeleopState.msg
new file mode 100644
index 0000000..eca2f4c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/AssistedTeleopState.msg
@@ -0,0 +1,18 @@
+# Assisted teleoperation message indicating the current state of the protection
+
+uint8 STATE_ACTIVE = 0
+uint8 STATE_DISABLED = 1
+uint8 STATE_COLLISION_IMMINENT = 2
+uint8 STATE_STOPPED = 3
+uint8 STATE_COLLISION = 4
+uint8 STATE_ERROR = 5
+uint8 state
+
+uint8 ASSIST_ON = 100
+uint8 ASSIST_OFF_SERVICE = 101
+uint8 ASSIST_OFF_JOYSTICK_OVERRIDE = 102
+uint8 ASSIST_OFF_SENSOR_TIMEOUT = 103
+uint8 ASSIST_OFF_REMOTE_CONTROLLER_OVERRIDE = 104
+uint8 assist_off_trigger
+
+string error_message
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/ObstacleMap.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/ObstacleMap.msg
new file mode 100644
index 0000000..ffcce9e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/ObstacleMap.msg
@@ -0,0 +1,3 @@
+# Assisted teleoperation message indicating the threat level of obstacles surrounidng the platform
+
+float32[] threat_level
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/Safety.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/Safety.msg
new file mode 100644
index 0000000..e47ba25
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/Safety.msg
@@ -0,0 +1,9 @@
+# Safety monitor message telling us if the safety monitor has been triggered and a message
+# indicating what caused the trigger
+
+uint8 SAFETY_ESTOP = 0
+uint8 SAFETY_SENSOR_TIMEOUT = 1
+
+bool safety_monitor_triggered
+uint8 trigger_type
+string message
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigArray.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigArray.msg
new file mode 100644
index 0000000..6566741
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigArray.msg
@@ -0,0 +1,14 @@
+# Watchdog config message containing information related to device
+# monitoring and what action should be taken to recover from an error
+
+
+WatchdogConfigCommunication[] communication_config
+WatchdogConfigEmergencyStop[] emergency_stop_config
+WatchdogConfigHeartbeat[] heartbeat_config
+WatchdogConfigInclination[] inclination_config
+WatchdogConfigNodeStatus[] node_status_config
+WatchdogConfigNodeletStatus[] nodelet_status_config
+WatchdogConfigNumPoints[] num_points_config
+WatchdogConfigOdomCovariance[] odom_covariance_config
+WatchdogConfigRtkFix[] rtk_fix_config
+WatchdogConfigTopicData[] topic_data_config
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommon.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommon.msg
new file mode 100644
index 0000000..a1fdff0
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommon.msg
@@ -0,0 +1,6 @@
+string name
+string type
+bool enabled
+string[] components
+string on_trigger_action
+# string[] on_trigger_options
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommunication.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommunication.msg
new file mode 100644
index 0000000..210836f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigCommunication.msg
@@ -0,0 +1,5 @@
+WatchdogConfigCommon base_config
+string protocol
+string ip # only used when protocol is 'ip'
+string interface # only used when protocol is 'can' or 'serial'
+float32 timeout
\ No newline at end of file
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigEmergencyStop.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigEmergencyStop.msg
new file mode 100644
index 0000000..882a10d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigEmergencyStop.msg
@@ -0,0 +1,3 @@
+WatchdogConfigCommon base_config
+string topic
+float32 timeout
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigHeartbeat.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigHeartbeat.msg
new file mode 100644
index 0000000..882a10d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigHeartbeat.msg
@@ -0,0 +1,3 @@
+WatchdogConfigCommon base_config
+string topic
+float32 timeout
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigInclination.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigInclination.msg
new file mode 100644
index 0000000..9c74a0b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigInclination.msg
@@ -0,0 +1,5 @@
+WatchdogConfigCommon base_config
+float32 roll_limit
+float32 pitch_limit
+float32 delay
+string topic
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeStatus.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeStatus.msg
new file mode 100644
index 0000000..9c64093
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeStatus.msg
@@ -0,0 +1,3 @@
+WatchdogConfigCommon base_config
+string node_name
+uint8 num_requests
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeletStatus.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeletStatus.msg
new file mode 100644
index 0000000..cc5716b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNodeletStatus.msg
@@ -0,0 +1,4 @@
+WatchdogConfigCommon base_config
+string manager
+string nodelet
+uint8 num_requests
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNumPoints.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNumPoints.msg
new file mode 100644
index 0000000..1a166bc
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigNumPoints.msg
@@ -0,0 +1,3 @@
+WatchdogConfigCommon base_config
+string topic
+int32 threshold
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigOdomCovariance.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigOdomCovariance.msg
new file mode 100644
index 0000000..f6d24d8
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigOdomCovariance.msg
@@ -0,0 +1,5 @@
+WatchdogConfigCommon base_config
+string topic # Odometry topic
+float32 xy_threshold
+float32 yaw_threshold
+float32 timeout
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigRtkFix.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigRtkFix.msg
new file mode 100644
index 0000000..88d331f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigRtkFix.msg
@@ -0,0 +1,6 @@
+WatchdogConfigCommon base_config
+
+bool rtk_heading_required
+bool rtk_position_required
+float32 timeout
+string gnss_type # Either 'swiftnav' or 'xvn'
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigTopicData.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigTopicData.msg
new file mode 100644
index 0000000..882a10d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogConfigTopicData.msg
@@ -0,0 +1,3 @@
+WatchdogConfigCommon base_config
+string topic
+float32 timeout
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatus.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatus.msg
new file mode 100644
index 0000000..c6e7e7c
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatus.msg
@@ -0,0 +1,8 @@
+# The message definition for a Watchdog including the type of watchdog, whether it
+# has been triggered or not and the recovery taken.
+
+
+string name
+bool triggered
+string trigger_message
+string action
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatusArray.msg b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatusArray.msg
new file mode 100644
index 0000000..c9145ba
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/msg/WatchdogStatusArray.msg
@@ -0,0 +1,5 @@
+# Watchdog status message containing information related to device
+# monitoring and what action has been taken to recover from an error
+
+std_msgs/Header header
+WatchdogStatus[] statuses
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/package.xml b/clearpath_outdoornav_msgs/clearpath_safety_msgs/package.xml
new file mode 100644
index 0000000..ff9ee1f
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/package.xml
@@ -0,0 +1,21 @@
+
+
+
+ clearpath_safety_msgs
+ 0.9.9
+ ROS package containing the message definitions for the Clearpath Robotics OutdoorNav safety module.
+ José Mastrangelo
+ Proprietary
+
+ ament_cmake
+ rosidl_default_generators
+
+ rosidl_default_runtime
+
+ ament_cmake
+
+ rosidl_interface_packages
+
+
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddCommunicationWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddCommunicationWatchdog.srv
new file mode 100644
index 0000000..bd9a912
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddCommunicationWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigCommunication config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddEmergencyStopWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddEmergencyStopWatchdog.srv
new file mode 100644
index 0000000..459fd2b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddEmergencyStopWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigEmergencyStop config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddHeartbeatWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddHeartbeatWatchdog.srv
new file mode 100644
index 0000000..0dc753e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddHeartbeatWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigHeartbeat config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddInclinationWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddInclinationWatchdog.srv
new file mode 100644
index 0000000..2fd425d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddInclinationWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigInclination config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeStatusWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeStatusWatchdog.srv
new file mode 100644
index 0000000..d167fbf
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeStatusWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNodeStatus config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeletStatusWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeletStatusWatchdog.srv
new file mode 100644
index 0000000..6a9650b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNodeletStatusWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNodeletStatus config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNumPointsWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNumPointsWatchdog.srv
new file mode 100644
index 0000000..4a4b6e5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddNumPointsWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNumPoints config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddOdomCovarianceWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddOdomCovarianceWatchdog.srv
new file mode 100644
index 0000000..04100b9
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddOdomCovarianceWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigOdomCovariance config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddRtkFixWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddRtkFixWatchdog.srv
new file mode 100644
index 0000000..125fa2d
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddRtkFixWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigRtkFix config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddTopicDataWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddTopicDataWatchdog.srv
new file mode 100644
index 0000000..d08f243
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/AddTopicDataWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigTopicData config
+
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/RemoveWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/RemoveWatchdog.srv
new file mode 100644
index 0000000..a2e6dcf
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/RemoveWatchdog.srv
@@ -0,0 +1,4 @@
+
+string name
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateCommunicationWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateCommunicationWatchdog.srv
new file mode 100644
index 0000000..2635315
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateCommunicationWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigCommunication new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateEmergencyStopWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateEmergencyStopWatchdog.srv
new file mode 100644
index 0000000..ca74220
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateEmergencyStopWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigEmergencyStop new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateHeartbeatWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateHeartbeatWatchdog.srv
new file mode 100644
index 0000000..9aee227
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateHeartbeatWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigHeartbeat new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateInclinationWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateInclinationWatchdog.srv
new file mode 100644
index 0000000..550fb49
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateInclinationWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigInclination new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeStatusWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeStatusWatchdog.srv
new file mode 100644
index 0000000..9f373c5
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeStatusWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNodeStatus new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeletStatusWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeletStatusWatchdog.srv
new file mode 100644
index 0000000..070750e
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNodeletStatusWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNodeletStatus new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNumPointsWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNumPointsWatchdog.srv
new file mode 100644
index 0000000..bbecc50
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateNumPointsWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigNumPoints new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateOdomCovarianceWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateOdomCovarianceWatchdog.srv
new file mode 100644
index 0000000..9a50948
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateOdomCovarianceWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigOdomCovariance new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateRtkFixWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateRtkFixWatchdog.srv
new file mode 100644
index 0000000..5950b66
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateRtkFixWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigRtkFix new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateTopicDataWatchdog.srv b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateTopicDataWatchdog.srv
new file mode 100644
index 0000000..58f206b
--- /dev/null
+++ b/clearpath_outdoornav_msgs/clearpath_safety_msgs/srv/UpdateTopicDataWatchdog.srv
@@ -0,0 +1,5 @@
+
+WatchdogConfigTopicData new_config
+string current_name # used as a key to find the watchdog in the list of watchdogs
+---
+bool success
diff --git a/clearpath_platform_msgs/CMakeLists.txt b/clearpath_platform_msgs/CMakeLists.txt
index 2a99201..0a72a8d 100644
--- a/clearpath_platform_msgs/CMakeLists.txt
+++ b/clearpath_platform_msgs/CMakeLists.txt
@@ -21,8 +21,11 @@ rosidl_generate_interfaces(${PROJECT_NAME}
msg/Fans.msg
msg/Feedback.msg
msg/Lights.msg
+ msg/PlatformID.msg
msg/Power.msg
msg/RGB.msg
+ msg/RYG.msg
+ msg/StackLightState.msg
msg/Status.msg
msg/StopStatus.msg
srv/ConfigureMcu.srv
diff --git a/clearpath_platform_msgs/msg/PlatformID.msg b/clearpath_platform_msgs/msg/PlatformID.msg
new file mode 100644
index 0000000..ac11b46
--- /dev/null
+++ b/clearpath_platform_msgs/msg/PlatformID.msg
@@ -0,0 +1,6 @@
+# Platform ID message containing the model, serial #, hardware and firmware versions
+
+string model
+string serial_id
+string hardware_revision
+string firmware_revision
diff --git a/clearpath_platform_msgs/msg/RYG.msg b/clearpath_platform_msgs/msg/RYG.msg
new file mode 100644
index 0000000..4496444
--- /dev/null
+++ b/clearpath_platform_msgs/msg/RYG.msg
@@ -0,0 +1,6 @@
+# Represents the intensity of a single RYG LED, either reported or commanded.
+# Each channel is limited to a range of [0, 255]
+
+uint8 red
+uint8 yellow
+uint8 green
diff --git a/clearpath_platform_msgs/msg/StackLightState.msg b/clearpath_platform_msgs/msg/StackLightState.msg
new file mode 100644
index 0000000..c200ee1
--- /dev/null
+++ b/clearpath_platform_msgs/msg/StackLightState.msg
@@ -0,0 +1,11 @@
+# Status messages can be encoded with the LEDs on the stack light
+# The light has 2 componenents: a 3-channel RYG LED and an orange strobe
+
+# What is the RYG color of the stack light?
+RYG color
+
+# Is the strobe light currently on?
+bool strobe_on
+
+# Human-readable explanation of why the light is in the state it's in
+string message
diff --git a/clearpath_platform_msgs/package.xml b/clearpath_platform_msgs/package.xml
index f6ae13f..1b4178e 100644
--- a/clearpath_platform_msgs/package.xml
+++ b/clearpath_platform_msgs/package.xml
@@ -25,4 +25,4 @@
ament_cmake
-
\ No newline at end of file
+