Skip to main content

ROV control and image library by RobEn

Project description

ROV Library

A custom library developed by RobEn that exactly fits our needs, be it programmatically controlling a Remote Operated Vehicle (ROV) or processing image data from the on-board cameras, it's got you covered.

Table of contents 🗒

Installing ⬇

The module is available at pypi, download with a simple

$ pip install rovlib 

General Usage 🔑

Like any other 3rd party module you can easily import the desired sub-module by specifying what you want from the main rovlib module

from rovlib.cameras import RovCam

# or

from rovlib.control import RovMavLink, Mode

More about rovlib.cameras ? ➡ Cameras module


More about rovlib.control ? ➡ Control module


ROV-cameras 🎥

The camera module is required to receive OpenCV frames from ROV cameras being sent by the On board camera system used in conjunction with this user level module.

How to use it 🔧

Starting a camera 🟢

To start capturing frames from a specific camera you have to start an instance of RovCam similarly as starting a cv2.VideoCapture() instance from opencv.

As it might seem the interface is very similar to OpenCV's as the image data is originally captured on the ROV with OpenCV so it is required to run the script.

from rovlib.cameras import RovCam

import cv2



cam = RovCam(RovCam.FRONT)



while True:

  image = cam.read()



  cv2.imshow("ROV", image)



  if cv2.waitKey(1) & 0xFF == ord('q'):

    break



cv2.destroyAllWindows()

The RovCam instance requires the user to specify which camera to get image data from, only a supported camera would work

Camera Options 📸

As for now the camera option are:

Front main camera looking ahead

RovCam.FRONT

Arm facing camera looking exactly at the robotic arm

RovCam.ARM

Misc cameras looking wherever we need to position them (still not supported in this version)

RovCam.MISC1

RovCam.MISC2


ROV-control 🕹

It is a python sub-module that simplifies the use of pymavlink APIs, to ease the control of our beloved Alenda (the ROV).

How to use it 🔧

Establish communication 🤝

# create an instance of RovMavlink

# Those are the default constructor params.

rov = RovMavlink(connection_type = 'udpin', connection_ip = '0.0.0.0', connection_port = '14550', silent_mode = True)

# Binds to the port in the given address

rov.establish_connection()

To start controlling the vehicle you should Arm it first. To arm it use there following commands.

# Silent mode is used to shut off prints from the used functions for instance - > 'vehicle Armed successfully'

rov = RovMavlink(silent_mode=False).establish_connection()

rov.arm_vehicle() # you only need to arm the vehicle once, there is no need to arm it every time you want to stablize it



# to disarm vehicle

rov.disarm_vehicle()

Set vehicle mode 🎯

rov = RovMavlink().establish_connection()

rov.arm_vehicle()

rov.set_vehicle_mode(Mode.STABILIZE)

Those are all the modes you would need to use. If you used set_vehicle_mode() with any thing other that Mode enum it would raise a violation ❌🔞. blash fakaka 😘

class Mode(IntEnum):

    STABILIZE = 0

    ACRO = 1

    ALT_HOLD = 2

    AUTO = 3

    GUIDED = 4

    CIRCLE = 7

    SURFACE = 9

    POSHOLD = 16

    MANUAL = 19



# use them as follows

# rov.set_vehicle_mode(Mode.STABILIZE)

sending custom control 🎮

⚠ Take care the throttle of x, y, z and rotation is a value between -1 to 1. any value out side this boundry will raise a violation. ❌🔞

rov.send_control(JoyStickControl(x_throttle = 0.5, y_throttle = 0.5, z_throttle = 0, rotation_throttle = 1, delay = 0.1))

also you can it as follows ⬇

rov = RovMavlink(silent_mode=False).establish_connection()

period = 10 # period for moving the joystick control in seconds

rov.arm_vehicle()

# my_lovely_fake_joy_stick = JoyStickControl(x_throttle=1, y_throttle=1) # name the param u want to add and give it a value between -1 to 1

my_lovely_fake_joy_stick = JoyStickControl(y_throttle=1)

rov.send_control(my_lovely_fake_joy_stick, period)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rovlib-1.0.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rovlib-1.0.1-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file rovlib-1.0.1.tar.gz.

File metadata

  • Download URL: rovlib-1.0.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.13

File hashes

Hashes for rovlib-1.0.1.tar.gz
Algorithm Hash digest
SHA256 d93ef5986911e9bc09300066954c9b13c9642b6610649b68be0f4aa234a74a00
MD5 955f4c0fe928a707cea7aef9830b8f67
BLAKE2b-256 9c3d5111e8810197aaf7dbc26f38dabd868beb9509c6e09ac7a9caacf2a5a0fb

See more details on using hashes here.

File details

Details for the file rovlib-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: rovlib-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.13

File hashes

Hashes for rovlib-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5ce1419759b55cc4f0cee9daa47feb0254dbfbb650e3345a62700488d0f5685b
MD5 d6b88a2659b5069c4a23ee9924d831ae
BLAKE2b-256 8a32d6d319a04366eaddddb7a3f5d69b56248de344753372c02253a3e476f90b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page