The ArduSub project is a subsea vehicle control system designed primarily for ROVs and AUVs. It is based on the *ArduCopter* vehicle-type of the [ArduPilot](https://github.com/diydrones/ardupilot) project.
The majority of code changes required for the ArduSub are held in the [/ArduSub/](/ArduSub/) directory of this repository. Changes have also been made to a number of libraries:
- **AP_Baro:** Added support for MS58XX pressure sensors for water depth measurement
- **AP_RCMapper:** Added "forward" and "strafe" input axes
## Setup ##
### Hardware ###
The ArduSub project currently supports the following hardware:
- 3DR PixHawk Autopilot
- Any reversible ESCs with PWM control and 1500 centerpoint (Blue Robotics Basic ESC and BlueESC)
Since this is based on the ArduPilot project and includes the ArduPilot Hardware Abstration Layer (HAL), it should also be able to run on a number of other autopilots including the following:
The ArduSub project currently only supports topside control through [QGroundControl](http://www.qgroundcontrol.org/) using compatible joysticks and gamepad controllers. Please be sure to use the most recent daily build for bug fixes and improvements.
### ROV Frame ###
The ArduSub project currently supports two frame types:
- 6-DOF Thruster Configuration (for the [BlueRobotics BlueROV](http://bluerobotics.com/store/rov/bluerov/))
- Vectored Thruster Configuration with side-by-side vertical thrusters
The gamepad controls the ROV during operation. It has been tested with the Microsoft XBox controller and the Logitech F310. The following joysticks and buttons are used:
- **Left Stick:** Forward and strafe input
- **Right Stick:** Throttle and yaw input
- **Start Button:** Arm vehicle
- **Back Button:** Disarm vehicle
- **Y Button:** Switch to althold (learning) mode
- **B Button:** Switch to stabilize (manual) mode
- **Buttonpad Up/Down Arrows:** Tilt camera (if applicable and set up in QGC)
In **Stabilize** (manual) mode, the ROV will attempt to remain level and will be easily controllable. Constant attention is needed to maintain depth.
In **Althold** (learning) mode, the ROV will stabilize and also hold its depth. Throttle input will cause the vehicle to ascend or descend and releasing the throttle will cause it to hold its current depth.
The ArduSub project is open source and we encourage participation and code contributions: [guidelines for contributors to the ardupilot codebase](http://dev.ardupilot.com/wiki/guidelines-for-contributors-to-the-apm-codebase).