Skip to content

Latest commit

 

History

116 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

seabed-ros

The full driver set for running a seabed 125 class AUV

To Do

  • 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

Redesign Items:

  • 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.

Getting Started

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.

Prerequisites

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-common

Installing

To 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.launch

Running the tests

The 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

Nodes

  1. 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)
  1. ct_node
    Communicates with the CT sensor over serial to recieve and publises meaurements in ROS
  1. 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)
  1. 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)
  1. 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)
  1. 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)

  1. 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:

LBL Diagram

  • 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")
  1. 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)
  1. 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)
  1. simple_state_node

nose_down

nose_down

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.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • Lot of the code was derived from the original SEABED code

About

Collection of sensor drivers and vehicle control code and behaviors for the SeaBED-125 AUV

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages