Git Product home page Git Product logo

digital-twins-for-rov's Introduction

Digital-Twins-for-ROV

This project involves the creation of a Digital Twin (DT) system for underwater ROV teleoperation. The DT system offers functionalities for teleoperation, simulation and autonomous navigation. The entire project was done in simulation. The project tries to solve dynamic environment representation, spatial awareness and workload issues involved in underwater ROV teleoperation by building a DT that is also an underwater teleoperation interface.

System Overview

DT twin system overview

System Environment

The system was built on the UWRobotics simulator (DT digital component) and ROS (DT physical component). For the UWRobotics simulator Unity version 2019.4.4f1 was used, while for the ROS system ROS melodic running on Ubuntu 18.04 was used.

Packages to install

The following listed packages are needed for the full working system and testing.

1. UWRobotics Simulator - UWRobotics simulator is a unity based underwater robotics simulator. The simulator is used for visualisation, simulation and control purposes. Installation of the simulators unity and ROS packages are found here

2. ORB_u - An ORB-SLAM3 implementation for underwater robots. Available here

3. Bluerov2 - A package for bluerov2 integration with ROS and UUV simulator. Available here. The imc_ros_bridge dependency package for might need to be installed from source.

4. UUV simulator - A gazebo underwater simulator. Available here.

The dt-ros directory of this repository represents the ROS packages created for this project and should be downloaded and integrated with a ROS system. The 'Original_folder' directory represents script in the UWRobotics codebase that have been modified for the DT system to work. The other subdirectories represent unity folders and scripts, these should be cloned into a newly created directory in the UWRobotics simulator codebase. For example you can create a folder with the name "!" and clone this repo into it. Then move the dt-ros system to a ros component of your setup.
For building the ROS packages use the catkin build command.

System testing and workings

The individual components of the system were built and tested seperately. First to connect the DT component and the ROS system, the steps are illustrated in the simulators readme. In this package, the UW robotics starts screen has been duplicated, edited and should be run instead.

1. For the dynamic representation of the environment : The system was tested on real world data using the already purposed ORB_u SLAM. For this the harbor rosbag dataset 1,3,5 and 6 were tested. Here the point clouds from the ORB-SLAM are interpolated over for a dense representation of the sea floor environment and these points and the robots orientation are transferred over the communication channel for the DT digital component representation. The rosbag play command should be replaced with the actual path to the downloaded dataset. To change view point from the DT Unity environment, keypress "1","2" and "3" for different views.
To run
  - Connect the unity and ROS systems
  - On the ros system run the orb_u slam node, the densify node and the harbour dataset with the following respective commands and order.

        roslaunch orb_slam3_ros aqualoc_harbor.launch
        rosrun dt_ros densify.py
        rosbag play "path_to_harbour_dataset".bag

sample-video-dynamic-representation

sample-video-dynamic-representation

2. For autonomous navigation : Following the transversal of the robot keypress "M" saves the ORB-SLAM map and connects to the path planner to plan and publish a path. For this project only a path planner was implemented in the autonomous system of the DT.
To run
  - Follow the above steps in (1), except the last step
  - On the ros system run the ocotmap and pathplanning node with the following command.

        rosrun dt_ros octo
        rosrun dt_ros pathplanning

  - Complete the process by executing the last command in (1) i.e play the Rosbag file

The following images showcase octomap representation of mapped seafloors and planned paths visualization.



3. For teleoperation : To test the teleoperation feature of the DT we used an underwater simulator (UUV simulator) to replace a real robot in an underwater environment.
To run
  - Connect the unity and ROS system
  - On the ros system run the UUV simulator and its various peripherals with the following commands.

        roscore
        roslaunch uuv_gazebo_worlds herkules_ship_wreck.launch gui:=true paused:=true
        roslaunch bluerov2_description upload.launch z:=-50 x:=-15
        roslaunch bluerov2_control start_thruster_manager.launch

  - For a more detailed instruction on how to setup the UUV simulator refer to this

The keymappings for teleoperation are shown in the table below;

Key Function
Right Arrow Torque, y axis
Left Arrow Torque, x axis
Up Arrow Torque, z axis
A Force, x axis
D Force, y axis
W Force, z axis
Q Increase Speed
E Decrease Speed

sample-video-teleoperation

4. For simulation : The UW robotics simulator teleoperation simulation has been integrated into the system .
To run
  - Connect the unity and ROS system
  - On the ros system run the UW robotics ROS package to control the robot.

        rosrun controllerpkg key_publisher.py


sample-video-simulation

Note: For some system testing, the ros bridge subscriber files topics in unity might need uncommenting in some sections. This is the case for the camera, cloud and pose subscriber where testing different system component required different topics or message types. For the path planning , the start state might be invalid due to the map resolution and implemented collision geometry. For the unity system, the DT, start_DT, test_DT and simulation scenes should be added to "scenes in build" under "file/build settings" and rebuilt. Preferably their numbering should be 3,4, 5 and 6 so as not to change their numbers in respective places in the codebase.

Installation Issues: For installation of ORB-SLAM_u, the open cv version will have to be changed in the cmakelist when using ubuntu 18.04.

References

Reference materials are enumerated below;

[1] G. Ellingsen, “ORB-SLAM3-Underwater.” 02/20. [Online]. Available: https://github.com/discoimp/orb_u

[2] F. Maxime, “Aqualoc Deepsea.” [Online]. Available: https://seafile.lirmm.fr/d/79b03788f29148ca84e5/?p=%2FHarbor_sites_sequences&mode=list

[3] FletcherFT, “bluerov2.” [Online]. Available: https://github.com/FletcherFT/bluerov2/tree/master

[4] G. Ayush, ‘path_planning’. [Online]. Available: https://github.com/ayushgaud/path_planning/blob/master/src/old_path_planning.cpp

[5] A. Chaudhary, R. Mishra, B. Kalyan, and M. Chitre, “Development of an Underwater Simulator using Unity3D and Robot Operating System,” in OCEANS 2021: San Diego – Porto, San Diego, CA, USA: IEEE, Sep. 2021, pp. 1–7. doi: 10.23919/OCEANS44145.2021.9706012.

[6] “flexible-collision-library.” [Online]. Available: https://github.com/flexible-collision-library/fcl

[7] M. M. M. Manhaes, S. A. Scherer, M. Voss, L. R. Douat, and T. Rauschenbach, “UUV Simulator: A Gazebo-based package for underwater intervention and multi-robot simulation,” in OCEANS 2016 MTS/IEEE Monterey, Monterey, CA, USA: IEEE, Sep. 2016, pp. 1–8. doi: 10.1109/OCEANS.2016.7761080.

[8] ros-planning, ‘moveit’. [Online]. Available: https://github.com/ros-planning/moveit/blob/master/moveit_core/CMakeLists.txt

The bluerov2 3D model (dae) file was gotten from - https://github.com/UUVControl/bluerov2/tree/thrusterManagement/bluerov2_description/meshes

[9] F. Bonin-Font, M. Massot Campos, and A. B. Burguera, “ARSEA: A Virtual Reality Subsea Exploration Assistant,” IFAC-PapersOnLine, vol. 51, no. 29, pp. 26–31, 2018, doi: 10.1016/j.ifacol.2018.09.464.

To do

Implement a better densification technique or use a different visual SLAM approach.
Implement a more robust path planner
Creation of UI elements in DT system to set path planning goal.
Creation of motion planning system

digital-twins-for-rov's People

Contributors

tunjii10 avatar

Watchers

 avatar  avatar

Forkers

mobi1019

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.