• Nenhum resultado encontrado

[PENDING] Visual telemetry transmission in marine environment using Robot Operating System platform

N/A
N/A
Protected

Academic year: 2024

Share "Visual telemetry transmission in marine environment using Robot Operating System platform"

Copied!
113
0
0

Texto

The floating base is unmanned and instead is equipped with a group of sensors that collect information about its status and the condition of the underwater area. One computer is called unit point and corresponds to the floating base and the other one is named Base Point which corresponds to the land-based control center.

Problem Description

In between, an Ethernet network is set up to simulate the link between the two nodes, with varying traffic and connection performance.

Figure 1.1: A National Technical University of Athens project, which aims to construct a floating surveillance system
Figure 1.1: A National Technical University of Athens project, which aims to construct a floating surveillance system

Literature Review

The autonomous surface vehicle is capable of retrieving the remotely operated vehicle via a radio link from a land-ground station. The autonomous surface vehicle contains sensors to collect and publish, within the agency, the position, attitude, axial rotation rates and accelerations of the vehicle obtained by GPS and IMU.

Thesis Structure

The platform can be used for reconnaissance, monitoring and light intervention purposes in the underwater environment, allowing telepresence and direct guidance of the operator to the desired location without the expense of manned supply vessels. ROS helps monitor the status of the infrastructure and warns of system failures.

Contributions

History

Why Use ROS

ROS can also integrate with other open source programs, such as gazebo and OpenCv for simulation and image processing respectively. For example, a robot's sensor node sends data as messages to be consumed by any other node.

Applications Using ROS

Roomba uses node drivers to describe its functionalities such as speed, odometer and other features from ROS libraries. Lego NXT is compatible with ROS providing the ability to run applications such as keyboard/joystick teleoperation, wheel odometry, etc.

ROS Terminology

The service client is implemented on the node that requests the specified command and receives results. It is used to execute a single node in the package. The node uses the ROS HOSTNAME environment variable stored on the computer the node is running on as the URI address and the port is set to an arbitrary unique value.

Message Communication

The subscriber node receives the information of the publisher node corresponding to the same topic name registered in the master. Based on this information, the subscriber node directly connects to the publisher node to receive messages.

ROS communication models differences

To exchange messages between these nodes, the connection must first be established using a master. They are complex procedures for long tasks as they do not block operations and they can be anticipated.

Analyze Message Communication Flow

The publisher node sends the URI address and port number of its TCP server in response to the subscriber node's connection request. The subscriber node creates a client for the issuing node using TCPROS and connects to the issuing node.

Figure 2.3: Master must be run first in order to use ROS.
Figure 2.3: Master must be run first in order to use ROS.

Messages

The 'msg' file is the message file used by topics and has the file extension . The 'srv' file is the message file used by services, with the file extension .

ROS Tools

The ROS Wiki lists many of the possible tools that are added to the rqt screen as plugins such as 'rqt' plugins. The rqt chart is a tool that shows the correlation between active nodes and the messages being transmitted in the ROS network as a diagram. The 'rqt console' is a viewer in the rqt package that displays messages that are published in rosout 2.16.

CV camera is a ROS camera manager that uses OpenCV capture object to capture images from camera and publish them in topic /cv camera/raw.

Figure 2.11: View from Laser Distance Sensor[5]
Figure 2.11: View from Laser Distance Sensor[5]

SSH Definition

How it works

The SSH protocol uses a client-server model to authenticate two parties and encrypt data between them [17]. It is responsible for negotiating a secure connection, authenticating the person connecting, and creating the correct environment if the credentials are accepted. The client is responsible for initiating the initial TCP handshake with the server, negotiating a secure connection, verifying that the server's identity matches previously recorded information, and providing authentication credentials.

The second phase is to verify the user and discover whether access to the server should be granted 2.18.

Database

Evolution of Databases

Databases have evolved since their beginnings in the 1960s, beginning with hierarchical and network databases, through the 1980s with object-oriented databases, and today with SQL and NoSQL databases and cloud databases. In one view, databases can be classified by type of content: bibliographic, full-text, numerical, and image. There are many different types of 2.19 databases, from the most widespread approach, the relational database, to distributed databases, cloud databases, or NoSQL databases [22].

The objects that will be stored in the database have attributes (ie gender, age) and methods that specify what to do with the data.

Figure 2.19: Database’s evolution [21] [23]
Figure 2.19: Database’s evolution [21] [23]

SQL Definition

In response, the server processes the SQL statements and returns the responses to the client program. SQL is a language designed to store data, but the data stored in an SQL database is not static. It can be modified at any time using some very simple commands.

With the UPDATE statement, already existing information in an SQL table can be easily modified.

OpenCv

  • OpenCv Definition
  • Computer Vision
  • Haar-Cascade Detection in OpenCv
  • YOLO
  • OpenCv in ROS

Algorithms are applied to the binary data acquired in the first step to derive low-level information about parts of the image. This process is most commonly used in image processing for object detection and tracking, primarily face detection and recognition. The first cascade classifier is the Viola and Jones face detector. The requirement for this classifier was to be fast to be implemented on low-power CPUs, such as cameras and phones [41]. To train a classifier, it needs samples, which means it needs a lot of images showing the desired object for detection (positive sample) and even more images without the object (negative sample). The best results came from positive images that resemble those in which the desired object is in, except that they are cropped so that only the object is visible [39].

The thicker the predicted bounding box, the more reliable the prediction, which means a higher pc value. The goal is to remove those "shadow" fields surrounding the main projected field [42].

Figure 2.22: Feature Extraction [32]
Figure 2.22: Feature Extraction [32]

Hypertext Markup Language - HTML

HTML Definition

The cv bridge library converts a cv image into a ROS image message and then republishes it over ROS [1]. HTML documents consist of document tags that act to directly describe the visual appearance of a web page or to provide a directive such as the insertion of visual material or a link to another web page within a document.

How HTML works

A tag can be displayed at the top of a web browser and can also contain Javascript and other metadata information for the web page. The body is the content of the document. The title located in the head of the HTML document is converted to an attributed object in the HTML-CM conceptual model. A section in an HTML document is converted to an attributed object. The header of the section is converted to an attribute and the rest of the section is converted to a value for this attribute.</p><p>A link in an HTML document is converted to a link object, which consists of a tag and an anchor.</p><figure> <img src='https://thumb-eu.123doks.com/thumbv2/pdfplayerco/334367.54016/65.918.258.649.660.887/figure-2-30-example-of-html-links.webp' loading='lazy' alt='Figure 2.30: Example of Html Links'/> <figcaption>Figure 2.30: Example of Html Links</figcaption> </figure><h3>ROS Communication models</h3><p>These two client/server models as well as the topic communication model will be further analyzed in the following sections. In the "application" folder, the "CMakeLists.txt" and "package.xml" files are created along with the default folders. Therefore, the build environment is described in the 'CMakeLists.txt' file in the package folder.</p><p>This option will include "UnitCall.srv" and "BaseCall.srv" when building the package, which will be used on nodes.</p><h3>UnitCall Service</h3><p>Regarding the hardware in the simulation scenario, the Unit machine uses its web cam to detect faces and eyes instead of human bodies. Specifically, in the html code below, four buttons have been created to allow the user to choose what kind of information he wants to receive. Each new message is a new row in the table and their values ​​are placed in the corresponding name.</p><p>The project implemented the idea of ​​building a complete security system to inspect and secure a dispersed area from possible violations.</p><figure> <img src='https://thumb-eu.123doks.com/thumbv2/pdfplayerco/334367.54016/72.918.206.714.197.277/figure-3-2-unitcall-service.webp' loading='lazy' alt='Figure 3.2: UnitCall Service'/> <figcaption>Figure 3.2: UnitCall Service</figcaption> </figure><p>BaseCall Service</p><h3>ROS Master</h3><p>To define the machines' hostnames, the first step is to open the /etc/hosts file. Then specify the color of the line, which is in the form of (blue, green, red) with adjustable values, the range is 0-255. To run the application as a single module, a new Flask instance is initialized with the argument name to let Flask know that it can find the HTML template folder (templates) in the same folder where it is located.</p><p>Every time there is a new human violation in the area and thus the result of OpenCv j=1, "Unit" informs the "Base" with a warning message.</p><figure> <img src='https://thumb-eu.123doks.com/thumbv2/pdfplayerco/334367.54016/76.918.200.719.190.315/figure-3-6-successful-connectivity-with-hal-machine.webp' loading='lazy' alt='Figure 3.6: Successful connectivity with hal machine'/> <figcaption>Figure 3.6: Successful connectivity with hal machine</figcaption> </figure><p>Network Setup in ROS</p><h3>OpenCV</h3><p>The main part of Opencv code block uses LBPH (Local Binary Patterns Histograms) algorithm to detect faces. Since some faces may be closer to the camera, they will appear larger than the faces on the back. Min- Neighbors defines how many objects are detected near the current one before declaring the face found.</p><p>This function returns four values: the x and y location of the rectangle, and the width and height (w, h) of the rectangle. These values ​​are needed to draw a rectangle using the built-in rectangle() function.</p><figure> <img src='https://thumb-eu.123doks.com/thumbv2/pdfplayerco/334367.54016/80.918.352.562.186.387/figure-3-7-result-captured-frame-terminal-window.webp' loading='lazy' alt='Figure 3.7: Result for every captured frame in terminal window'/> <figcaption>Figure 3.7: Result for every captured frame in terminal window</figcaption> </figure><p>Sql</p><h3>Html</h3><p>The route decorator (@app.route('/')) is used to specify the URL that should trigger the execution of the print items and empty functions, therefore it binds the functions with the URL. These three functions simply render the HTML files print items.html and blank.html using the render template() method. Print items function also contains a MessageBox() method that pops up a message box in the rendered print items Html page under conditions.</p><p>Initially, the 'print items' template loads the css file that creates a scroll table where the data will be displayed.</p><h2>Application Description</h2><p>UnitCall Development</p></div> </article> </div> </div> <div class="mb-3"> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2979760623205174" data-ad-slot="9160272902" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script> </div> <div class="container mx-auto md:shadow-lg mb-4 md:rounded-1.5lg"> <div class="bg-white rounded-1.5lg px-4 md:px-5 py-5 border-t border-main-background md:border-none"> <p class="font-semibold text-xl">Referências</p> <div class="mt-4 prose break-all px-4" x-data="{links:[]}"> <ol class="sm:px-4 list-decimal"> <template x-for="link in links"> <li class="references-item mb-3"> <a class="text-primary hover:text-secondary" rel="nofollow" target="_blank" x-text="link.text" x-bind:href="link.href"></a> </li> </template> </ol> <button x-on:click="fetch('https://1library.org/api/component_data?component=App%5CView%5CComponents%5CV4%5CDocument%5CDocumentReferencesComponent&document_id=864335028011958273&signature=fb98ae8e67104f039b3e7a17ebda50affb8cc5ff46249f28270e05461be926b5') .then(response => response.json()) .then(data => links = data) .then(data => $el.remove())"> Visão </button> </div> </div> </div> <div class="md:rounded-1.5lg mt-3 px-1 py-3 md:mt-3 sticky bottom-0 mb-2 bg-white md:shadow-lg text-center z-10"> <div class="inline-block"> <a class="bw-button px-10 py-3 bg-secondary text-white font-medium hover:bg-secondary-600 inline-flex items-center focus:!ring-0 cursor-pointer rounded-full w-full justify-center" rel="nofollow" id="gtm-button-download" href="https://1library.org/auth/login?intended=https%3A%2F%2F1library.org%2Fgr%2Fdocs%2Fvisual-telemetry-transmission-marine-environment-robot-operating-platform.334367" > <span class="font-medium">Descarregar agora ( PDF - 113 páginas - 8.41 MB )</span> </a> </div> </div> <div class="container mx-auto md:shadow-lg md:rounded-1.5lg"> <div class="bg-white rounded-1.5lg px-4 md:px-5 py-5 border-t border-main-background md:border-none"> <p class="font-semibold text-xl">Outline</p> <div class="mt-4"> <?php/** @var $seo_keyword \App\SmartResource\Entities\SeoKeywordData */?> <?php/** @var $seo_title \App\SmartResource\Entities\SeoTitleData */?> <?php/** @var $seo_part \App\SmartResource\Entities\SeoPartData */?> <a href="https://1library.org/gr/article/yolo.334367" class="break-all hover:text-primary border border-gray-400 hover:border-primary inline-block rounded-1.5lg my-1 mx-1 px-2 py-1"> YOLO </a> <a href="https://1library.org/gr/article/how-html-works-hypertext-markup-language-html.334367" class="break-all hover:text-primary border border-gray-400 hover:border-primary inline-block rounded-1.5lg my-1 mx-1 px-2 py-1"> How HTML works </a> <a href="https://1library.org/gr/article/unitcall-service-hypertext-markup-language-html.334367" class="break-all hover:text-primary border border-gray-400 hover:border-primary inline-block rounded-1.5lg my-1 mx-1 px-2 py-1"> OpenCV </a> <a href="https://1library.org/gr/article/html-hypertext-markup-language-html.334367" class="break-all hover:text-primary border border-gray-400 hover:border-primary inline-block rounded-1.5lg my-1 mx-1 px-2 py-1"> Html </a> <a href="https://1library.org/gr/article/application-description.334367" class="break-all hover:text-primary border border-gray-400 hover:border-primary inline-block rounded-1.5lg my-1 mx-1 px-2 py-1"> Application Description </a> </div> </div> </div> <div class="container mx-auto md:shadow-lg mt-4 md:rounded-1.5lg pb-4 md:pb-0 md:mb-4"> <div class="bg-white rounded-1.5lg px-4 md:px-5 py-5 border-t border-main-background md:border-none"> <p class="font-semibold text-xl">Documentos relacionados</p> <div class="mt-4"> </div> </div> </div> </div> <div class="w-full lg:w-3/12 flex flex-col gap-4 hidden lg:block mx-0"> <!-- Upload --> <div class="bg-white rounded-1.5lg p-5 mb-3"> <p class="font-medium text-center"> Carregue os seus materiais de estudo para descarregar todos os documentos.</p> <div class="flex justify-center mt-4 w-full"> <button class="bw-button px-5 py-2 bg-secondary text-white font-medium hover:bg-secondary-600 inline-flex items-center focus:!ring-0 cursor-pointer rounded-full w-full inline-flex items-center justify-center" x-data="{loading: false, component:'v4.upload-confirmation', show_modal() {this.loading = true; Livewire.dispatch('openModal', { component: this.component })} }" @modal_opened.window="loading=false" @click="show_modal" > <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" class="w-4 h-4 !-ml-2 mr-2" viewBox="0 0 16 16" role="img" path="bs.cloud-upload-fill" componentName="orchid-icon" x-show="!loading"> <path fill-rule="evenodd" d="M8 0a5.53 5.53 0 0 0-3.594 1.342c-.766.66-1.321 1.52-1.464 2.383C1.266 4.095 0 5.555 0 7.318 0 9.366 1.708 11 3.781 11H7.5V5.707L5.354 7.854a.5.5 0 1 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 5.707V11h4.188C14.502 11 16 9.57 16 7.773c0-1.636-1.242-2.969-2.834-3.194C12.923 1.999 10.69 0 8 0m-.5 14.5V11h1v3.5a.5.5 0 0 1-1 0"></path> </svg> <svg x-show="loading" x-cloak class="animate-spin inline-block bw-spinner w-4 h-4 !-ml-2 mr-2" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"> <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle> <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path> </svg> <span class="font-medium">Envio</span> </button> </div> <p class="text-sm mt-3 text-center">O seu documento será enriquecido, partilhado no 1Library PT para ajudar nos estudos.</p> </div> <!-- Related documents --> <div class="block bg-white rounded-1.5lg mb-3 py-5 px-4 md:px-8 lg:px-4 xl:px-6 pb-0 shadow-lg lg:shadow-none" > <p class="lg:font-medium lg:text-center font-semibold text-xl">Documentos relacionados</p> <div class="flex flex-wrap mt-4"> </div> </div> <div class="sticky top-0 text-center"> <div class="flex justify-center"> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:600px" data-ad-client="ca-pub-2979760623205174" data-ad-slot="8377321249"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script> </div> </div> </div> </div> </div> </main> <footer id="footer" class="pb-3 pt-8 px-4 md:px-8 lg:px-10 border-t"> <div class="container mx-auto"> <div class="grid grid-cols-12 gap-3 lg:gap-6 mb-4"> <div class="col-span-6 md:col-span-3 lg:col-span-2"> <p class="font-medium text-lg mb-3">Empresa</p> <ul> <li> <a href="https://1library.org/statics/about-us" class="hover:underline inline-block leading-9"> Sobre nós</a> </li> <li> <p class="hover:underline cursor-pointer leading-9">Sitemap</p> </li> </ul> </div> <div class="col-span-6 md:col-span-3 lg:col-span-2"> <p class="font-medium text-lg mb-3">Contato & Apoio</p> <ul> <li> <a href="https://1library.org/statics/contact-us" class="hover:underline inline-block leading-9"> Contacte nos</a> </li> <li> <a class="hover:underline cursor-pointer leading-9" rel="nofollow" href="https://docs.google.com/forms/d/e/1FAIpQLSd8JVJUBXV57b5ijIhagZxN6HgrKNCfgdNEqgozduzNtbt-0w/viewform?entry.1354551515"> Feedback</a> </li> </ul> </div> <div class="col-span-6 md:col-span-3 lg:col-span-2"> <p class="font-medium text-lg mb-3">Legal</p> <ul> <li> <a href="https://1library.org/statics/terms-of-use" class="hover:underline inline-block leading-9"> Termos de uso</a> </li> <li> <a href="https://1library.org/statics/policy" class="hover:underline inline-block leading-9"> Política</a> </li> </ul> </div> <div class="col-span-6 md:col-span-3 lg:col-span-2"> <p class="font-medium text-lg mb-3">Social</p> <ul> <li> <p class="hover:underline flex items-center gap-2 cursor-pointer leading-9"> <svg class="w-4" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"> <path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/> </svg> <a rel="nofollow" href="#">Linkedin</a> </p> </li> <li> <p class="hover:underline flex items-center gap-2 cursor-pointer leading-9"> <svg class="w-4" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"> <path d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"/> </svg> <a rel="nofollow" href="#">Facebook</a> </p> </li> <li> <p class="hover:underline flex items-center gap-2 cursor-pointer leading-9"> <svg class="w-4" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"> <path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-144.934 144.934-144.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/> </svg> <a rel="nofollow" href="#">Twitter</a> </p> </li> <li> <p class="hover:underline flex items-center gap-2 cursor-pointer leading-9"> <svg class="w-4" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 496 512"> <path d="M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"/> </svg> <a rel="nofollow" href="#">Pinterest</a> </p> </li> </ul> </div> <div class="col-span-full lg:col-span-2 lg:col-start-11 mb-6 mt-3 lg:mt-0"> <p class="font-medium text-lg mb-3">Obtenha nossos aplicativos gratuitos</p> <ul> <li class="inline-block"> <a href="https://play.google.com/store/apps/details?id=app.digitalcontent.onepdf" class="inline-block w-[144px] rounded cursor-pointer"> <img x-intersect.margin.150.once="$el.src = 'https://cdn-eu2.123doks.com/assets_v4/assets/google-play-badge-44a4e69d.png'" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt="google-play-badge" class="max-w-full object-cover opacity-0" width="144" height="43" onload="this.classList.add('opacity-100')" /> </a> </li> </ul> </div> </div> <div class="grid grid-cols-12 pt-3 border-t"> <div class="col-span-full text-sm lg:text-right"> <div class="flex flex-row items-center gap-1.5 mb-5 lg:mb-0"> <a href="https://1library.org/institutions" rel="nofollow">Escolas</a> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-dot" viewBox="0 0 16 16"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/> </svg> <a href="https://1library.org/topic">Tópicos</a> </div> <div> <p class="pb-3 mr-4 lg:inline-block"> Língua: <button onclick="Livewire.dispatch('openModal', { component: 'v4.modal.select-language' })" title="language" class="font-medium hover:text-primary hover:fill-primary inline-block ml-1 pb-4"> <span>Português</span> <svg class="inline-block" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"> <path d="M201.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 274.7 86.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/> </svg> </button> </p> <p class="text-muted lg:inline">Copyright 1library.org © 2024</p> </div> </div> </div> </div> </footer> </div> <div id="back-to-top" class="cursor-pointer fixed bottom-20 right-10 h-12 w-12 rounded-full border border-solid border-slate-300 bg-primary hidden items-center justify-center hover:opacity-75 z-10" style="box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.25)" title="To the top"> <svg class="fill-white" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 320 512"><path d="M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192H96l0 288c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32l0-288h72c9.6 0 18.2-5.7 22-14.5z"/></svg> </div> <script> window.url_document_metadata = 'https://1library.org/api/v4/document_metadata'; </script> <script> function addDocumentToLocalStorage(document) { if (localStorage.getItem('v4_viewed_documents')) { let viewed_document = JSON.parse(localStorage.getItem('v4_viewed_documents')); viewed_document.unshift(document); viewed_document = [...new Map(viewed_document.map(item => [item['id'], item])).values()]; viewed_document = viewed_document.slice(0, 8); localStorage.setItem('v4_viewed_documents', JSON.stringify(viewed_document)); } else { localStorage.setItem('v4_viewed_documents', JSON.stringify([document])); } } let url = 'https://1library.org/api/v3/document/count'; let doc_id = '864335028011958273'; setTimeout(function () { addDocumentToLocalStorage({ id: '864335028011958273', title: 'Visual telemetry transmission in marine environment using Robot Operating System platform', url: 'https://1library.org/gr/docs/visual-telemetry-transmission-marine-environment-robot-operating-platform.334367', }); }, 5000); function copyToClipboard() { const inputElement = document.querySelector('input[x-model="currentUrl"]'); if (inputElement) { inputElement.select(); navigator.clipboard.writeText(inputElement.value); Alpine.store('hasCopy', true); setTimeout(() => { Alpine.store('hasCopy', false); }, 2000); // Reset the hasCopied after 2 seconds } } </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-8TD3RPVCWN"></script> <script> gtag('js', new Date()); gtag('config', 'G-8TD3RPVCWN', {"content_group":"\/"}); </script> <script> window.suggestTagUrl = 'https://1library.org/api/v4/suggestion/tags'; window.searchUrl = 'https://1library.org/search'; window.suggestDocUrl = 'https://1library.org/api/v4/suggestion/documents'; window.query = ''; </script> <link rel="modulepreload" href="https://cdn-eu2.123doks.com/assets_v4/assets/app-387ea50c.js" /><script type="module" src="https://cdn-eu2.123doks.com/assets_v4/assets/app-387ea50c.js" data-navigate-track="reload"></script><link rel="modulepreload" href="https://cdn-eu2.123doks.com/assets_v4/assets/livewire-4a3757b9.js" /><script type="module" src="https://cdn-eu2.123doks.com/assets_v4/assets/livewire-4a3757b9.js" data-navigate-track="reload"></script> <script> setTimeout(function () { fetch('https://1library.org/api/v4/analytics', { method: "POST", mode: "no-cors", credentials: "same-origin", headers: { "Content-Type": "application/json", 'X-CSRF-TOKEN': 'Jg5mfm9MexT2I7es1S1kQaHL6Dr0WwgEjH1VMhFV', }, body: JSON.stringify([]), }); }, 5000); </script> <script> document.addEventListener("DOMContentLoaded", function () { setTimeout(function () { gtag('event', 'document_view', {'document_id':864335028011958273,'event_category':'document','event_label':'Document View'}) }, 3000); }) </script> <div></div> <script> window.user_timing_start = Date.now(); window.previewing = 'https://node2.123dok.com/onelib-eu-preview/docs/000/000/334/334367.preview.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=aa5vJ7sqx6H8Hq4u%2F20240429%2Fdc%2Fs3%2Faws4_request&X-Amz-Date=20240429T191851Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Signature=755303b452867d26c5c83b57750451c40f4d00214af68209d5c9c5e2505e457d'; window.previewing_domain = 'node2.123dok.com'; window.pageNumber = '113' window.workerUrl = 'https://cdn-eu2.123doks.com/packages_v4/pdfjs/build/pdf.worker.js' window.application_domain = 'https://1library.org'; window.cmapUrl = 'https://cdn-eu2.123doks.com/packages_v4/pdfjs/web/cmaps/'; window.confAds = {"type":"google","used":true,"prefix":"<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>","subfix":"<script>(adsbygoogle = window.adsbygoogle || []).push({});<\/script>","content":{"class":"adsbygoogle","style":"display:block","data-ad-client":"ca-pub-2979760623205174","data-ad-slot":"9160272902","data-ad-format":"auto","data-full-width-responsive":"true"},"defer":false}; window.zoom = false; </script> <script src="https://cdn-eu2.123doks.com/packages_v4/pdfjs/build/pdf.js?t=20240426134330"></script> <script src="https://cdn-eu2.123doks.com/assets_v4/assets/123dok_pdf_viewer-579bac84.js?t=20240426134330"></script> <script data-navigate-once="true">window.livewireScriptConfig = {"csrf":"Jg5mfm9MexT2I7es1S1kQaHL6Dr0WwgEjH1VMhFV","uri":"\/api\/livewire\/update","progressBar":"","nonce":""};</script> <!-- Client IP 3.135.190.232 --> <div wire:snapshot="{"data":{"activeComponent":null,"components":[[],{"s":"arr"}]},"memo":{"id":"D65bCeoXsxFVERpOkEdI","name":"livewire-ui-modal","path":"gr\/docs\/visual-telemetry-transmission-marine-environment-robot-operating-platform.334367","method":"GET","children":[],"scripts":[],"assets":[],"errors":[],"locale":"pt-BR"},"checksum":"3eff692b1bb3b4827b8706c55e0649eaff4987e6241256730d73548241592753"}" wire:effects="{"listeners":["openModal","destroyComponent"]}" wire:id="D65bCeoXsxFVERpOkEdI"> <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> <div x-data="LivewireUIModal()" x-on:close.stop="setShowPropertyTo(false)" x-on:keydown.escape.window="closeModalOnEscape()" x-show="show" class="fixed inset-0 overflow-y-auto z-[99]" style="display: none;" > <div class="flex min-h-screen items-center justify-center px-2 pt-4 pb-10 text-center lg:p-0"> <div x-show="show" x-on:click="closeModalOnClickAway()" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 transition-all transform" > <div class="absolute inset-0 bg-gray-500 opacity-75"></div> </div> <div x-show="show && showActiveComponent" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100" x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" x-bind:class="modalWidth" class="inline-block w-full align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:w-full" id="modal-container" x-trap.noscroll.inert="show && showActiveComponent" aria-modal="true" > <!--[if BLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> </div> </div> </div> </div> <div x-cloak x-data="tallstackui_toastBase()" x-on:tallstackui:toast.window="add($event)" class="pointer-events-none fixed inset-0 flex flex-col items-end justify-end gap-y-2 px-4 py-4 md:justify-start z-100"> <template x-for="toast in toasts" :key="toast.id"> <div x-data="tallstackui_toastLoop(toast, JSON.parse('{\u0022ok\u0022:\u0022OK\u0022,\u0022confirm\u0022:\u0022Confirm\u0022,\u0022cancel\u0022:\u0022Cancel\u0022}'))" x-show="show" x-ref="toast" x-transition:enter="transform ease-out duration-300 transition" x-transition:enter-start="translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2 " x-transition:enter-end="translate-y-0 opacity-100 sm:translate-x-0" class="flex w-full flex-col items-center space-y-4 md:items-end"> <div class="dark:bg-dark-700 pointer-events-auto w-full max-w-sm overflow-hidden rounded-xl bg-white shadow-lg ring-1 ring-black ring-opacity-5"> <div class="flex p-4"> <div class="flex-shrink-0"> <div x-show="toast.type === 'success'"> <svg class="h-6 w-6 text-green-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> </svg> </div> <div x-show="toast.type === 'error'"> <svg class="h-6 w-6 text-red-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> </svg> </div> <div x-show="toast.type === 'info'"> <svg class="h-6 w-6 text-blue-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"/> </svg> </div> <div x-show="toast.type === 'warning'"> <svg class="h-6 w-6 text-yellow-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"/> </svg> </div> <div x-show="toast.type === 'question'"> <svg class="h-6 w-6 text-secondary-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"/> </svg> </div> </div> <div class="ml-3 w-0 flex-1 pt-0.5"> <p class="dark:text-dark-300 text-sm font-medium text-gray-800" x-bind:class="{ 'font-medium' : !toast.confirm, 'font-semibold' : toast.confirm }" x-text="toast.title"></p> <p class="dark:text-dark-400 mt-1 text-sm text-gray-700" x-text="toast.description?.substring(0, 30) + '...'" x-show="toast.description && toast.expandable"></p> <p class="dark:text-dark-400 mt-1 text-sm text-gray-700" x-text="toast.description" x-show="!toast.expandable"></p> <template x-if="toast.type === 'question'"> <div class="mt-3 flex gap-x-3"> <button dusk="tallstackui_toast_confirmation" class="text-primary-600 dark:text-dark-200 text-sm font-medium focus:outline-none" x-on:click="accept(toast)" x-text="toast.options.confirm.text"></button> <div x-show="toast.options.cancel?.method"> <button dusk="tallstackui_toast_rejection" class="text-red-700 dark:text-red-500 text-sm font-medium focus:outline-none" x-on:click="reject(toast)" x-text="toast.options.cancel?.text"></button> </div> </div> </template> </div> <div class="ml-4 flex min-h-full flex-col justify-between"> <div class="ml-4 flex flex-shrink-0"> <button x-on:click="hide()" type="button" class="inline-flex text-gray-400 focus:outline-none focus:ring-0"> <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z" clip-rule="evenodd"/> </svg> </button> </div> <div x-show="toast.expandable && toast.description" class="ml-4 flex flex-shrink-0"> <button dusk="tallstackui_toast_expandable" x-on:click="toast.expandable = !toast.expandable" type="button" class="inline-flex text-gray-400 focus:outline-none focus:ring-0"> <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M12.53 16.28a.75.75 0 01-1.06 0l-7.5-7.5a.75.75 0 011.06-1.06L12 14.69l6.97-6.97a.75.75 0 111.06 1.06l-7.5 7.5z" clip-rule="evenodd"/> </svg> </button> </div> </div> </div> <div class="dark:bg-dark-600 relative h-1 w-full rounded-full bg-neutral-100"> <span x-ref="progress" x-bind:style="`animation-duration:${toast.timeout * 1000}ms`" class="animate-progress bg-primary-500 dark:bg-dark-400 absolute h-full w-24 duration-300 ease-linear" x-cloak></span> </div> </div> </div> </template> </div> </body> </html>