Field Operation Guide - Offset-official/Nautilus-One GitHub Wiki

Top Side Computing Manual

This guide provides detailed operational instructions for running and managing the Autonomous Underwater Vehicle (AUV) system using the top side laptop. In the current configuration, all nodes except inference nodes are deployed on the AUV.


Prerequisites

Ensure the following prerequisites are completed on the top side laptop:

  • Static IP address set to 192.168.2.1/24

  • IP routing to Jetson Nano via Raspberry Pi configured

  • FastDDS configuration completed

  • auv_ws workspace built with auv_interfaces sourced


Network Configuration

IP Routing

Run the following command on the top side laptop:

sudo ip route add 192.168.2.4 via 192.168.2.2

FastDDS Configuration

On the top side laptop, add the following to each terminal session:

export ROS_DISCOVERY_SERVER=192.168.2.2:11811
export FASTRTPS_DEFAULT_PROFILES_FILE=~/auv_ws/src/auv_ros2/super_client_configuration_file.xml

ros2 daemon stop && ros2 daemon start


AUV Software Stack Overview

Raspberry Pi (Navigator)

Package Description
auv_bringup Launch files
auv_controller Control node
auv_interfaces Custom messages, services, actions
auv_manipulators Arm actuation package
auv_mav_utils MAVLink utility nodes

Raspberry Pi Operation

SSH Access

Default password: raspberry

Docker Container

Start the container:

docker run --rm --network host --name pi-ros-main -it \
  --mount type=bind,src=/home/pi/trees,dst=/trees \
  ghcr.io/offset-official/pi-ros-full

If a container is already running:

docker container rm --force pi-ros-main
  • The container starts with a tmux session and automatically runs pi.launch.py in the first window.

  • Access the first window using Ctrl + b, then press 0.

Refer to docker/README.md for more information.

Code Editing and Rebuilding

All code resides in the /auv_ws directory.

To rebuild packages:

cd /auv_ws
colcon build

To source the workspace:

source /auv_ws/install/setup.bash

Jetson Nano Operation

SSH Access

Default password: nano

Docker Container

Start the container:

sudo docker run --rm --network host --name nano-ros-main -it \
  --device=/dev/ttyACM0 \
  --device=/dev/video0 \
  --device=/dev/video2 \
  ghcr.io/offset-official/nano-ros-full

If a container is already running:

sudo docker container rm --force nano-ros-main
  • A tmux session will launch with nano.launch.py running in the first window.

  • Access with Ctrl + b, then press 0.

Refer to docker/README.md for details.

Code Editing and Rebuilding

Code is located in /auv_ws.

To rebuild:

cd /auv_ws
colcon build

To source:

source /auv_ws/install/setup.bash

ML Inference

Run the inference container:

docker run --rm -it --network host --runtime nvidia \
  -v /home/nano/models:/models \
  --name jetson-ml-final \
  jetson-ml-final:latest

In a different tmux window inside the ROS container:

ros2 launch auv_bringup qualify_inference_launch.py

Top Side Laptop Operation

The top side laptop is responsible for sending commands and monitoring the AUV.


Base Controller

To issue movement commands:

ros2 run auv_controller control_cmd_cli

To check pressure sensor output:

ros2 topic echo /current_depth

To send a depth action (example: descend to -0.3 meters):

ros2 action send_goal /depth_descent auv_interfaces/action/DepthDescent \
  '{target_depth: -0.3}' --feedback

To manually arm thrusters:

ros2 service call /mavros/cmd/arming mavros_msgs/srv/CommandBool "{value: true}"

MAV Utilities

To run heading test with custom parameters:

ros2 run auv_mav_utils heading_test --ros-args \
  -p target_depth:=-0.8 \
  -p linear_speed:=1.5 \
  -p enable_angle_correction:=false \
  -p movement_duration:=15.0

To calibrate the depth sensor:

ros2 service call /calibrate_depth_sensor std_srvs/srv/Trigger

Arm Controller

To actuate the dropper:

ros2 service call /dropper_trigger auv_interfaces/srv/DropperTrigger "{enable: true}"

Viewing Camera Feed

Use rqt_image_view:

ros2 run rqt_image_view rqt_image_view

Select the desired camera topic from the GUI.


Diagnostics

To change LED color (example: white):

ros2 service call /set_color auv_interfaces/srv/SetColor "{color: '#ffffff'}"

To turn off LEDs:

ros2 service call /set_color auv_interfaces/srv/SetColor "{color: 'off'}"

Communication

To run the full communication sequence:

ros2 action send_goal /read_comm_sequence auv_interfaces/action/ReadCommSequence {} --feedback

Experiments

To run experiment nodes, for example the qualify experiment:

ros2 run auv_experiments qualify
⚠️ **GitHub.com Fallback** ⚠️