Aruna - ROV

Modular ROV for underwater exploration, discovery and monitoring

Similar projects worth following
Aruna is my attempt to create a low-cost modular ROV (remote operated vehicle) ecosystem. Complete with software, electrical hardware and mechanical hardware.

Because Aruna is very modular it can be used for many applications and easy be adjusted to the users need. For example by adding new sensors, adjusting the motor layout or even running it on a complete new system. This is all possible because of the modular nature of the project. The codebase is already cross-platform and the hardware is very flexible with many possible configurations.


Monitoring and observing life is an important aspect of getting an insight on the current state of animal life and if they are in danger of extinction. This can however be a difficult process to do if the life you are trying to monitor is in difficult to reach places, or even hazarded environments to humans like deep water bodies. The ocean is a very fast place with many species that may suffer the hardest from climate change. Therefore, it is important to monitor, inspect and preserve them as much as possible. From the tiniest sea creatures living on the bottom of the ocean to the school of flying fish. Currently, doing so is an expensive operation and require a lot of human labour and expensive equipment like ROVs (remove operate vehicle). A marine expert has to be present to analyse the data and draw conclusions. To do this in a continues matter would be a very cumbersome and expensive task. As new equipment for monitoring is being developed it may be difficult to adapt the already existing hardware to these new equipment.


I propose a low cost, highly modular ROV: Aruna, with specialized equipment that can be used for underwater monitoring and marine research. The ROV can have a wide range of sensor and equipment such as:

  • Camera: This is not just useful for taking pictures and as a visual guide for controlling the ROV, but it can also be used in conjunction with an artificial network to automaticly detect fishes and counts them without user interference.
  • Soil sampler: To inspect life at the sea floor a sample of the soil can be taken with the ROV. For later (or on-board) analysis.
  • Water sample: To monitor the microscopic particles in the water like plankton or micro plastic particles. Samples can be taken from varying depths for further analyses.
  • Tag system: tagging an animal to monitor its behaviour or dropping a node on an interesting side for continues analysis to be later retrieved.
  • Microphone: for monitoring whale activity.

Any other equipment can be easily introduced later because of the modular nature of the ROV. The ROV was designed with modularity in mind, so it can be easily adjusted to the desired situation. The current design has 5DOF (degrees of freedom) using 6 propellers. Adding two extra propellers can be used to get full 6DOF. The model can also be substantially changed by converting it to a glider model, so it can be more effective on longer missions with greater distances where high mobility is not required. The high modular design of the ROV allows for all these adjustments and is at the heart of the implementation of the device.

Aside from the monitoring sensors described above a number of other sensors are to be used for navigation like gyroscope, pressure sensor, accelerometer, GNSS, compass and sonar. The goal is to allow the ROV to complete a mission with as little human interference as possible. Thus, the user can choice to deploy multiple ROVs at a site which all perform a set mission and communicate their findings back to the user. This could also happen periodicity so that a continuously monitoring function can be achieved. The user may also choice to manually control the ROV for precise missions, this is the current focus of the project.



At the base of the project lies the Aruna C++ library. This library is build of multiple modules. The goal of these modules is to be written portable so that they may run on any platform. Beneath the modules are drivers-interfaces. These are abstract classes that divine the behaviour of the platform specific drivers. These are platform specific and need to be rewritten for every platform. Aruna currently has full support for ESP32 (using ESP-IDF 3.2.2), there is partially support for Linux. And lastly, planned support for the STM32 family.

Software Diagram
Architecture of Aruna






Logging (log)...

Read more »

  • Three PCB boards

    Noeël Moeskops07/11/2020 at 06:27 0 comments

    Apsu PCB Design

    Since the beginning of the project I wanted to create a PCB that houses the electronics of the project. This was later further motivated by the big rats nest and space limitations of the prototype board I was using. Some wires kept going out mid dive duo to the 2.54mm pin-headers not being really movement friendly.

    Current prototype board wiring

    I also wanted to add extra sensors for finer movement control of the ROV. Because currently the device is blind and deaf to its surroundings. So it is required to do all the steering, calibrations and adjustments manually. I choice to fix it in my next iteration of the project by designing a PCB with the follow features:

    • ESP32
    • Inertial Measurement Units (IMU) (compass, gyroscope and accelerator meter)
    • JTAG and UART debug ports
    • expansion port for future additions
    • RS485
    • on-PCB temperate measurement
    • water t temperate measurement
    • battery and ESC temperate
    • Humidity sensor
    • outside pressure sensor
    • inside pressure sensor
    • BLHeli motor driver
    • SimonK (PWM) motor driver
    • 2xwaterlevel measurement

    For all things concerning power I decided to create a separate PCB with:

    • battery voltage measurement
    • complete circuit current measurement
    • XT60 breakdown
    • 12V to 3.3V step-down

    Here is a complete block diagram breakdown of the two PCB:

    Block diagram of Apsu and power board

    Apsu board

    Apsu board front 3D

    I originally wanted to create the board with a naked ESP32D (U1) chip, without the shell that contain the flash and a crystal and such. But I got intimidated by the data-sheet and the complexity that the ESP32 requires to operate. So as inexperience as I am, I decided to go with the ready to use ESP32-WROOM.

    The IMU sensors are formed by an LSM6DOX (U6) made by IT controlled over I²C for 3D accelerometer and 3D gyroscope. The compass is also from ST; the LIS2MDL (U5) also controlled with I²C. Picking these chips was no easy task as I originally wanted to have the boards fully hand soldered. But IMU-type chips are rarely that big, so I instead went with the highest accuracy/price combination that was also highly available and well known to make it easier to write drivers for.

    JTAG capabilities are of course an absolute must, especially since I have not yet created drivers for 90% of the IC’s attached to the ESP32. 1.27mm pin header (J2) where chosen because big 2.54mm simply would not fit.

    Expansion port

    To keep the project modular I designed an expansion port that can daisy chain to as many boards as you want.

    • GND and +3V3 to supply (and get) power to other boards
    • I²C/SPI for peripheral master-slave communication
    • RS485 for master-master communication
    • SPI_SS0-2 for Slave-select, total of eight SPI slaves are supported. `0b0` is standard selected and `0b1` is in-use for the pressure sensor

    RS485 is brought by a MAX485 (U8) chip, uses J13 for outboard A and B. short J12 if it's the end node to connect the 120Ohm resistor between A and B.

    Temperature, Humidity and in-hull pressure is all measured by a BME280 (U7) by Bosh, communication over I²C. The humidity and in-hull pressure are used to detect hull breaches. Because the air pressure will rise when the hull is breached and the humidity will also rise. Having multiple redundant ways of measuring something critical as a hull breach is important as it increases safety of the device.

    The water-pressure outside the ROV is measured using the cheapest water-proof pressure sensor I could find: “EBOWAN DC 5V G1/4 Pressure Transducer 1.2 Mpa” with the ¼ A4 of documentation available on Aliexpress it is just enough to drive it (hopefully). Unfortunately this sensor requires 5V, while all my other components are on +3V3. So I have made a 3-5V boost converter specially for this sensor (FAN3860 (U4)). Together with a voltage divider to read the analogue output of the device.

    water pressure sensor schematic

    The water temperature is measured by an even undocumented...

    Read more »

  • PCB sneak peek and wire documentation

    Noeël Moeskops06/24/2020 at 15:13 0 comments

    PCB sneak peek

    For the last few weeks I have been hard at work at designing a PCB for the ROV.  It will include the base ESP32 module as is, plus a ton of extra sensors and connectors for much more sensors! One of these new sensors is an underwater pressure sensor that I got today.

    Furthermore, here is a little sneak peek of the PCB (not yet finished):

    Wiring documentation

    There is a lot of cabling in the project. It can be quite complicated and it is easy to make mistakes or to forget to plug a wire back in when they become disconnected. This will only continue to grow with the project. So I create a document of all the wires and how they connect to each other.

    Made with

View all 2 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates