The Remotely Operated underwater Vehicle (ROV) team was founded as a committee within Purdue IEEE Student Organization in 2008 with a small but dedicated group of five students. Today, the team's mission is to foster technical and professional skills of its members by designing, constructing, and testing an innovative underwater vehicle to compete in the MATE Center International ROV Competition.
The ROV team is comprised of both engineering and non-engineering students working collaboratively on a hands-on project from the vehicle's design and prototyping phase, to its construction and testing, and ultimately competition performance. The team fosters a multidisciplinary spirit so that the best ideas may come forth. In addition to the mission, the MATE competition also requires a professional presentation, public display poster, and technical documentation.
Because the vehicle requires excellence in design, construction, and presentation, the team members are themselves multidisciplinary collaborators and experts in their own discipline. Members learn to communicate clearly with each other and with clients while managing their own project responsibilities. Through various outreach events during the year, the team aims to inspire future generations to enter STEM (Science, Technology, Engineering, and Mathematics) fields.
For more current and past information view the links to the left or contact us as rov@purdueieee.org. The ROV team will be accepting new members at the beginning of each semester.
X17 Surface contains the frontend and backend processes for the ROV. For the frontend, the surface (computer) connects the user interface with the cameras and gamepad, allowing us to display the camera steams, controls, and readouts needed to successfully pilot the ROV. For the backend, the surface sends and receives information to and from the Raspberry Pi inside of the ROV, allows us to send outputs to the thrusters and tools in order to fully operate the ROV.
Shown below is a diagram showing the X17 system architecture. Each white box represents a ROS node and each arrow represents a topic which is published and subscribed to.
- Description: ROS2, or Robot Operating System 2, is an open-source framework designed for developing and controlling robotic systems. It provides a comprehensive suite of libraries, tools, and middleware for communication, hardware abstraction, and real-time control.
- Nodes: A node is a fundamental computational unit in ROS. It is an individual process that performs a specific task.
- Master: The ROS Master is the centralized coordination service that helps nodes discover and communicate with each other. Nodes register with the ROS Master, which maintains a registry of all active nodes.
- Topics: Topics are named communication channels that allow nodes to send and receive data. Nodes can publish data to a topic or subscribe to receive data from a topic.
- Communication: Nodes in a ROS system communicate asynchronously. This means that they can operate independently, sending nad receiving messages at their own pace. Multiple nodes can public data to the same topic, and multiple nodes can subscribe to the same topic.
- Description: PyQt5 is a Python binding for the Qt framework. Qt is a cross-platform application development framework that provides tools and libraries for creating graphical user interfaces and other software components.
- Widgets: Widgets are graphical components such as buttons, labels, textboxes, etc. The can be used to create the various components of a graphical user interface.
- Layouts: Layouts can be used to organize and arrange widgets within your window. You can also place widgets in a dock, on the tool bar, or set a central widget.
- Signals and Slots: Widgets emit signals in response to user action or system events (e.g., key press, key release, etc.). These signals can be connected to slots, which are functions that get called in response to signals.
- QtDesigner: Qt Designer is an application within Qt that allows you to design a user interface using drag-and-drop methods, and then is able to convert your design to working C++ or Python code.
Note: Downloading Qt as an application needs over 20Gb. If you just want to use QtDesigner, you can download a standalone version here: https://build-system.fman.io/qt-designer-download
To see all of the dependenices used for this system, navigate to X17-Surface > requirements.txt.
This file is generated by running the following command while in the directory:
pipreqs X17-Surface
To install all of the dependancies for the frontend, you can run the following command:
pip install -r requirements.txt
All of the information needed for use of the X17 ROV can be found below.
- Plug in the power supply, ensuring that the switch is off first.
- Connect the ROV to the power supply via the power cable in the tether.
- Connect the ROV to the router via the ethernet cable in the tether.
- Turn on the power supply.
-
For the locally run nodes, the launching the frontend should launch the frontend ROS nodes
-
To launch the pi nodes, run the following command:
ros2 launch rov_launch run_rov_launch.xml
- The user interface can be launched by running the main file in X17Surface > ui > src
- This will automatically launch and bring up the camera streams
- Upon closing the user interface, these processes will be killed
<<<<<<< HEAD
ros2 run ui runner.py
=======
eb
Follow these steps to start using QtDesigner:
-
Use QtDesigner to design/modify the user interface
-
Once finished, save the file to your local project folder (this will be saved as a .ui file)
-
Open your terminal and navigate to your local project folder. You must be in the same folder as your .ui file.
-
Run the following command in the terminal to convert your .ui file to a .py file:
pyuic5 -o <python-filename>.py <qtdesigner-filename>.ui
-
This generates an automated file containing your ui design as a python file
-
Your user interface should now open once you run your main file
-
Plug in the ROV and connect the ethernet cable from the tether to the router. Power on the ROV.
-
Connect your computer to the ROV wifi
-
In your browser, search up '10.0.0.1'. This will pull up the internet configuration setting for the router.
-
In Attatched Devices, you can see the IP address assigned to the Raspberry Pi and the IP address assigned to your computer.
-
In a terminal, ssh into the pi using the following command:
ssh pi@<rov-ip-address>
-
To launch the camera streams, run one of the following commands while ssh'd into the pi. You will have to change the host to match the IP address of your computer. NOTE: running a command will begin a process timer. If you want to launch and receive multiple streams you will have to ssh into multiple terminal windows.
Stream 1 (Front-facing camera)
gst-launch-1.0 -v v4l2src device=/dev/video8 ! video/x-h264, width=1920,height=1080! h264parse ! queue ! rtph264pay config-interval=10 pt=96 ! udpsink host=10.0.0.103 port=5600 sync=false buffer-size=1048576
Stream 2 (Downward-facing camera)
gst-launch-1.0 -v v4l2src device=/dev/video4 ! video/x-h264, width=1920,height=1080! h264parse ! queue ! rtph264pay config-interval=10 pt=96 ! udpsink host=10.0.0.103 port=5601 sync=false buffer-size=1048576
Stream 3 (Bandicam)
gst-launch-1.0 -v v4l2src device=/dev/video0 ! image/jpeg, width=1920,height=1080, framerate=30/1 ! jpegparse ! queue max-size-buffers=100 ! rtpjpegpay ! udpsink host=10.0.0.101 port=5602 sync=false buffer-size=1048576
-
To receive the camera streams, run the corresponding command in a new terminal (this terminal should not be ssh'd into the pi) NOTE: The port for a receiving command should match the port from the corresponding launch command.
Stream 1 (Front-facing camera)
gst-launch-1.0 udpsrc port=5600 ! application/x-rtp ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
Stream 2 (Downward-facing camera)
gst-launch-1.0 udpsrc port=5601 ! application/x-rtp ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
Stream 3 (Bandicam)
gst-launch-1.0 -v v4l2src device=/dev/video0 ! image/jpeg, width=1920,height=1080, framerate=30/1 ! jpegparse ! queue max-size-buffers=100 ! rtpjpegpay ! udpsink host=10.0.0.101 port=5602 sync=false buffer-size=1048576
The above image is the xbox controller used as the gamepad for the ROV.
The gamepad is used to control linear and angular movement of the ROV as well as the movement mode that it is in. The gamepad is also used to control the solenoids and other tools located on the ROV.
The ROV is capable of movement in the x,y,z linear directions as well as the x,y,z angular directions also called roll, pitch, and yaw respectively.
Linear x: Move the left stick (LS) up for positive x movement and down for negative x movement.
Linear y: Move the left stick (LS) left for positive y movement and right for negative y movement.
Linear z: Hold down the right trigger (RT) for positive z movement and the left trigger (LT) for negative z movement.
Angular x (roll): Hold down the right bumper (RB) for positive x roll and the left bumper (LB) for negative x roll.
Angular y (pitch): Move the right stick (RS) up for positive y pitch and the right stick (RS) down for negative y pitch.
Angular z (yaw): Move the right stick (RS) left for positive z yaw and the left stick (LS) right for positive z yaw.
Tool 1: Press button A
Tool 2: Press button B
Tool 3: Press button Y
Tool 4: Press button X
For more documentation on using X17 Surface, visit the Purdue ROV BookStack.
X17 Software has been a collaborative effort involving the dedication and contributions of many individuals, including:
- Software Lead: Xavier Callait
- Frontend Leads: Ethan Burmane, Caden Brennan
- Sensors Lead: Adam Kahl
- CV Lead: Anna Arnaudova
- Purdue IEEE: For their ongoing support and collaboration.
- MATE ROV: For hosting the annual MATE ROV Competition.
For any inquires about Purdue ROV, please send an email to rov@purdueieee.org
For more information on MATE ROV, visit https://materovcompetition.org/
To see updates about Purdue ROV, follow us on social media:
- Instagram: @purduerov
- Linkedin: https://www.linkedin.com/company/purdue-rov