The full driver set for running a seabed 125 class AUV
- Add depth sensor link to URDF
- Confirm orientation of flood housing to match URDF
- Reattach pinion to motor shaft, clean with solvent, attach pinion using Loctite 638, cure at 40 deg
- Submerge prop by adding weight to bottom
- confirm imu direction
- dvl confim coordinate frame
- umodem node needs more work:
- add relay to it - Switch 1
- add to seabed.launch
- Thruster node: add code to free wheel motor when cmd_times out
- Add testport to main housing
- replace rf antenna module
- order parts for antenna, GPS and LED to create a long range module
- Replace computer with RTD
- Replace batteries
- Redesign battery control module
- Add RTD USB to serial
- Spacers around the main electronics to prevent sliding
- Correct the thurster housing
- Fins joints need to be coupled better
- Make system reversible in the flood housing (so delta T can look down) ( possibly move gps antenna forward)
- Make tailcone to flood housing single piece
- Make extra tailcone (since the one now has a stuck pin) and extra fins shafts
- To increase buoyancy adjustment, make the tailcone piece using foam instead of plastic, also make the tailcone slightly bigeer to add a little more buoyancy.
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
The pre-requisites for this repo include:
- ros-kinetic-desktop-full
- ros-kinetic-xsens-driver
- ros-kinetic-pid
- ros-kinetic-nmea-navsat-driver
- ros-kinetic-gps-common
# after installing ros, install other pre-requisites with:
sudo apt install ros-kinetic-xsens-driver ros-kinetic-pid ros-kinetic-nmea-navsat-driver ros-kinetic-gps-commonTo install the seabed drivers
mkdir -p ~/seabed_ws/src
cd seabed_ws/src
git clone https://gitlab.com/neu-mit-lfi/seabed-ros.git
cd ~/seabed_ws/
catkin_make
source ~/seabed_ws/devel/setup.bash
# add this to ~/.bashrc to make this permanent The full seabed driver set can be executed by running:
roslaunch seabed_drivers seabed.launch
# check if appropriate topics are being published by running:
rostopic list
# also to display the rviz graphic run:
roslaunch seabed_drivers display.launchThe tests are located in the seabed-ros/seabed_drivers/test folder. These can be used to publish test messages to test various modules. Run the tests by:
# the main seabed launch file runs all the drivers under namespace seabed, so
export namespace=seabed
cd ~/seabed_ws/src/seabed-ros/seabed_drivers/test
./TESTNAME- battery_node
Communicates with the Oceanserver battery controller via serial and publishes BatteryState msgs.
- Published Topics
batter/status (sensor_msgs/BatteryState)
battery/temperature (std_msgs/FLoat64)
battery/time_to_empty (std_msgs/Duration) - Parameters
~port (string, default: /dev/ttyCTI9)
~baudrate (int, default: 19200)
~batts_per_controller (int, default: 8)
~no_of_controllers (int, default: 2)
~critical_level (float, default: 0.2)
~warn_level (float, default: 0.4)
~batts_in_pack (int, default: 15)
- ct_node
Communicates with the CT sensor over serial to recieve and publises meaurements in ROS
- Published Topics
ct/conductivity (std_msgs/FLoat64)
ct/salinity (std_msgs/FLoat64)
ct/temperature (std_msgs/FLoat64) - Parameters
~port (string, default: /dev/ttyCTI2)
~baudrate (int, default: 9600)
- deltat_node
Communicates with the Imagenex 83B deltat sensor by spawning a separate process running the deltat beamforming driver located at seabed_drivers/deltat_driver and then communicating with it via UDP. The deltat data can be saved directly from the beam forming driver to the sepcified path and/or sent over ROS as LaserScan messages.
- Published Topics
deltat/deltat_scan (sensor_msgs/LaserScan) - Services Used
relay_switch - Parameters
speed_of_sound(float, default: 1500.0)
~port (string, default: /dev/ttyCTI2)
~driver_ip_address (string, default: 192.168.2.10)
~port (int, default: 4040)
~relay_switch (int, default: 2)
~driver_log_dir (string, default: /data/deltat)
~save_from_driver (bool, default: True)
~publish_as_scan (bool, default: True)
~range (int, default: 40, possible values = 5,10,20,30,40,50,60,80 or 100)
~gain (int, default:20, possible values = int between 0 and 20)
~number_of_beams (int, default: 480, possible values = 120, 240 or 480)
- depth_node
Communicates with the paro sensor over serial to recieve pressure and converts it to depth based on the formula discovered and presented by Leroy and Parthiot in: Claude C. Leroy and Francois Parthiot, 'Depth-pressure relationships in the oceans and seas', J. Acoustic Society of America, March 1998, p1346-.
- Published Topics
paro/depth (std_msgs/FLoat64) - Parameters
~port (string, default: /dev/ttyS1)
~baudrate (int, default: 9600)
~sampling_rate (float, default: 5.0) - Higher rates reduces sampling resolution 1.9hz gets to 1ppa
~atm_offset (float, default: 12.121)
~latitude (float, default: 41.526)
- dvl_node
Communicates with Teledyne Explorer DVL over serial to recieve doppler velocity measurements and publishes it as DvlMeasurements and Odom messages.
- Published Topics
dvl/velocity_measurements (seabed_drivers/DvlMeasurements)
dvl/odom (nav_msgs/Odometry) - Services Used
relay_switch - Parameters
~port (string, default: /dev/ttyCTI0)
~baudrate (int, default: 57600)
~relay_switch (int, default: 2)
- fins_node
This node subsribes to "elevator_cmd", "rudder_cmd" and "roll_cmd" messages. The commands have to be a float between -1 and 1:
-
For the rudder positive number indicates fins turning clockwise when seen from the top -> Turn the AUV towards port
-
For the elevator positive number indicates fins turning clockwise when seen from starboard -> Turn the AUV towards upward (reduce depth)
The message callbacks update the pos[] array with desired positions. The main loop looks at pos[] array at rate set by CMD_UPDATE_FREQ (in Hz) and sends the command to the fins over serial to move the fins.
If the cmd_watchdog expires, the fins are moved to the neutral position and turned off. -
Subscribed Topics
fins/elevator_cmd (std_msgs/FLoat64)
fins/rudder_cmd (std_msgs/FLoat64)
fins/roll_cmd (std_msgs/FLoat64) -
Published Topics
fins/state (ssensor_msgs/JointState) -
Services Used
relay_switch -
Parameters
~port (string, default: /dev/ttyCTI6)
~baudrate (int, default: 9600)
~relay_switch (int, default: 3)
- lbl_node
Subscribes to the lbl_measurement messages from the umodm and publishes an lbl fix. The variables use in the computation are descried in the figure below:
- Subscribed Topics
paro/depth (std_msgs/FLoat64)
umodem/lbl (seabed_drivers/LblMeasurements) - Published Topics
lbl/fix (nav_msgs/Odometry) - Parameters
speed_of_sound(float, default: 1500.0)
~range_gates (2D float array, default: [[200.0, 8000.0],[200.0,8000.0]])
~xponder_pos (2D float array, no default, example: [[2.0,1.0,-9.0],[1.0,6.0,-8.0]])
~baseline_direction (string, no default, must be "CW" or "CCW")
- relay_node
Communicates with the relay over a serial port and offers the SwitchRelay service which allows to query a current relay position and switch it on or off.
- Services Offered
relay_switch (seabed_drivers/SwitchRelay) - Parameters
~port (string, default: /dev/ttyCTI8)
~baudrate (int, default: 9600)
- thruster_node
This node subscribes to thruster_cmd messages (propellor rpm) and sends those to the thruster motors at a maximum rate specified by CMD_UPDATE_FREQ. It also queries the thruster motors at rate set by TELEMETRY_UPDATE_FREQ and publishes the result as thruster_data messages. If no thruster_cmd messages are received within CMD_WATCHDOG_SECS, the nodes sends the Stop command to the motors.
- Subscribed Topics
thruster/cmd (std_msgs/FLoat64) - Published Topics
thruster/state (ssensor_msgs/JointState)
thruster/data (seabed_drivers/ThrusterData) - Services Used
relay_switch - Parameters
~port (string, default: /dev/ttyCTI7)
~baudrate (int, default: 19200)
~relay_switch (int, default: 3)
~gearbox_ratio (float, default: xxx)
~encoder_counts_per_rev (int, default: 4000)
~motor_pid_freq (int, default: 8000)
- simple_state_node
This node subscribes to imu messages, and dvl odom messages. At the launch of the node it looks up the transforms from baselink to the imu and base link to the dvl.
It then transform every imu and odom message to the correct frame and publishes the heading, roll, pitch and fwd_velocity which can then be used by the PID controllers.
- Subscribed Topics
imu/Data (sensor_msgs/Imu) dvl/Odom (nav_msgs/Odometry) - Published Topics
heading (std_msgs/FLoat64)
roll (std_msgs/FLoat64)
pitch (std_msgs/FLoat64)
fwd_velocity (std_msgs/FLoat64)
This project is licensed under the MIT License - see the LICENSE.md file for details
- Lot of the code was derived from the original SEABED code


