mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 11:43:25 +00:00
docs: enable markdownlint for Atena CopterHack-2023 article
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
<h1 align="center" style="display: block; font-size: 2.5em; font-weight: bold; margin-block-start: 1em; margin-block-end: 1em;">
|
||||
<!-- markdownlint-disable MD041 -->
|
||||
|
||||
<a name="logo" href="https://app.gitbook.com/s/C9O11TiXK1JPnlrpilLg/introduction/swarm-in-blocks"><img align="center" src="../assets/swarm_in_blocks_2/capa_swarm_23_banner.png" alt="Swarm in Blocks" style="width:100%;height:100%"/></a>
|
||||
<br /><br /><strong>Swarm in Blocks</strong>
|
||||
|
||||
<h1 align="center" style="display: block; font-size: 2.5em; margin-block-start: 1em; margin-block-end: 1em;">
|
||||
Swarm in Blocks
|
||||
</h1>
|
||||
|
||||
[CopterHack-2023](copterhack2023.md), team **Atena**.
|
||||
|
||||
<!-- markdownlint-disable -->
|
||||
## Project Status[](#project-status)
|
||||
|
||||
<table class="no-border">
|
||||
@@ -33,6 +35,7 @@
|
||||
- [Usage modes](#Usage-modes)
|
||||
- [New Swarm Features](#New-Swarm-Features)
|
||||
- [Conclusion](#Conclusion)
|
||||
|
||||
---
|
||||
|
||||
## Introduction[](#Introduction)
|
||||
@@ -49,8 +52,6 @@ In 2023, Swarm in Blocks has taken an even bigger step, looking to fulfill our b
|
||||
|
||||
### Swarm in Blocks 2022
|
||||
|
||||
|
||||
|
||||
Swarm in Blocks is a CopterHack 2022 project. It's a high-level interface based on the blocks language, which consists of fitting code parts, like a puzzle. Each script represents a functionality, for example, conditional structures, loops, or functions that receive parameters and return an instruction to the swarm.
|
||||
|
||||
<p align="center">
|
||||
@@ -61,15 +62,12 @@ Swarm in Blocks is a CopterHack 2022 project. It's a high-level interface based
|
||||
<img width="500" src="https://raw.githubusercontent.com/Grupo-SEMEAR-USP/swarm_in_blocks/master/assets/intro/ring.gif" />
|
||||
</p>
|
||||
|
||||
|
||||
For more information on our project from last year, see our final article in [Swarm in Blocks 2022](https://clover.coex.tech/en/swarm_in_blocks.html). In addition, we also recommend watching our final video from last year, [Swarm in Blocks 2022 - Final Video](https://www.youtube.com/watch?v=5C-1rRnyiE8).
|
||||
|
||||
Even with the huge facilities that the block platform offers, we realized that this was just the *tip of the iceberg* when it comes to deploying real swarms. Several other operational and conceptual problems in validating a real swarm still haunted the general public. With that, this year's project comes precisely with the purpose of **tackling the main problems in validating a Swarm in a simple and polished way**.
|
||||
|
||||
|
||||
### What's new
|
||||
|
||||
|
||||
As already mentioned, of the various problems that can increase the complexity of a real swarm, we decided to deal with the ones that most afflicted us and reintegrated our solutions into our central platform, building a single extremely complete and cohesive platform.
|
||||
|
||||
| Problem | Our Solution |
|
||||
@@ -84,9 +82,9 @@ As already mentioned, of the various problems that can increase the complexity o
|
||||
|
||||
And many other solutions are also featured on our platform, for more information please check the solutions described clearly and in detail throughout our **Gitbook**. We recommend reading in order to understand the fundamental precepts of our platform.
|
||||
|
||||
> 📖 **Access our [Gitbook](https://app.gitbook.com/s/C9O11TiXK1JPnlrpilLg/background-theory/system)!**
|
||||
📖 **Access our [Gitbook](https://app.gitbook.com/s/C9O11TiXK1JPnlrpilLg/background-theory/system)!**
|
||||
|
||||
> 💻 **Access our [Github](https://github.com/Grupo-SEMEAR-USP/swarm_in_blocks.git)!**
|
||||
💻 **Access our [GitHub](https://github.com/Grupo-SEMEAR-USP/swarm_in_blocks.git)!**
|
||||
|
||||
<div align="right">[ <a href="#table-of-contents">↑ to top ↑</a> ]</div>
|
||||
|
||||
@@ -94,11 +92,11 @@ And many other solutions are also featured on our platform, for more information
|
||||
|
||||
## Getting started[](#getting-started)
|
||||
|
||||
|
||||
|
||||
Our platform was made to be extremely intuitive and easy to use. To start (after completing the installation we suggested in our gitbook), you can run the command:
|
||||
|
||||
roslaunch swarm_in_blocks simulation.launch num:=2
|
||||
```bash
|
||||
roslaunch swarm_in_blocks simulation.launch num:=2
|
||||
```
|
||||
|
||||
After that, you can open your browser and access our homepage by typing `localhost` in the search bar.
|
||||
|
||||
@@ -108,10 +106,8 @@ After that, you can open your browser and access our homepage by typing `localho
|
||||
|
||||
## Usage modes[](#Usage-modes)
|
||||
|
||||
|
||||
The Swarm in Blocks can be programmed either with the blocks interface or directly in Python and we developed three main launch modes, each one focused on a different application of the project, they are:
|
||||
|
||||
|
||||
- *Planning Mode:* Its main goal is to allow the user to check the drones' layout, save and load formations, before starting the simulator or using real clovers. In order to need less computational power and avoid possible errors during the simulation.
|
||||
- *Simulation Mode:* In this mode happens the simulation indeed, starting the Gazebo, the necessary ROS nodes and some other tools. It allows applying the developed features, which will be explained ahead and see how they would behave in real life.
|
||||
- *Navigation Mode:* The last mode will support executing everything developed in real clovers so that it's possible to control a swarm with block programming. The biggest obstacle yet is the practical testing of this mode, due to the financial difficulty of acquiring a Clover swarm.
|
||||
@@ -122,7 +118,6 @@ The Swarm in Blocks can be programmed either with the blocks interface or direct
|
||||
|
||||
## New Swarm Features[](#New-Swarm-Features)
|
||||
|
||||
|
||||
With our vision of solving the problems that most plague the deployment of a real swarm, we have developed several features (and even integrated platforms), below we will list our main developments:
|
||||
|
||||
### Homepage
|
||||
@@ -135,7 +130,6 @@ Like last year, we really wanted to make it easier for the user to go through ou
|
||||
|
||||
### Swarm Station
|
||||
|
||||
|
||||
The main feature from our platform is the *Swarm Station*, which is a **3d Web Visualizer** that shows in real time all the necessary information regarding the drones state, such as real time positioning and visualization, which clover is connected, the topics available and a lot more. Also, you can define a safe area to ensure each drones safety, forcing them to land in case they cross the forbidden area. The front end runs completely on the web browser, saving processing and installation resources. It also comes with a web terminal, allowing the user to open several instances of a terminal emulation in just one click.
|
||||
|
||||
<p align="center">
|
||||
@@ -148,64 +142,64 @@ To run it, we recommend using **Firefox** browser to assure stability. But feel
|
||||
|
||||
If you launched our `simulation.launch` from the `swarm_in_blocks` package, then you just have to run
|
||||
|
||||
roslaunch swarm_station swarm_station.launch
|
||||
```bash
|
||||
roslaunch swarm_station swarm_station.launch
|
||||
```
|
||||
|
||||
Otherwise, you have to make sure that the `rosbridge_websocket` is running on port `9090`:
|
||||
|
||||
roslaunch rosbridge_server rosbridge_websocket.launch port:=9090
|
||||
```bash
|
||||
roslaunch rosbridge_server rosbridge_websocket.launch port:=9090
|
||||
```
|
||||
|
||||
For more detailed instructions on how to use each single feature from the Swarm Station, check our [Gitbook page about the station](https://swarm-in-blocks.gitbook.io/swarm-in-blocks/).
|
||||
|
||||
|
||||
### Swarm Collision Avoidance
|
||||
|
||||
|
||||
When many drones move close to each other, collisions are very likely to occur. To avoid this problem, an algorithm was developed to avoid collisions between drones. When analyzing a collision, 3 types of scenario are possible, the case where one clover is stationary and the other in motion, the case where both are in motion and with parallel trajectories, and finally the case where both are in motion and with non-parallel trajectory.
|
||||
|
||||
To turn on the collision avoidance, it is necessary to run:
|
||||
|
||||
rosrun swarm_collision_avoidance swarm_collision_avoidance_node.py
|
||||
```bash
|
||||
rosrun swarm_collision_avoidance swarm_collision_avoidance_node.py
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
<img width="600" src="https://raw.githubusercontent.com/Grupo-SEMEAR-USP/swarm_in_blocks/master/assets/collision.gif" />
|
||||
</p>
|
||||
|
||||
|
||||
### Rasp Package
|
||||
|
||||
|
||||
The Raspberry package was developed to instantiate a node that will be responsible for collecting essential processing, memory and temperature information from the raspberry and send it to the Swarm Station. It's the package that should be put on the `catkin_ws/src/` directory of each Raspberry Pi, because it also contains the `realClover.launch` needed to launch the swarm on real life.
|
||||
|
||||
### Swarm FPV
|
||||
|
||||
|
||||
This package is a reformulation of one of the CopterHack 2022 implementations, the **Swarm First Person Viewer**. This year, we decided to restart its structure, making it run also completely on the web to integrate with the Swarm Station. It also depends on the `rosbridge_websocket` running on the port `9090` (default).
|
||||
|
||||
<p align="center">
|
||||
<img width="600" src="https://raw.githubusercontent.com/Grupo-SEMEAR-USP/swarm_in_blocks/master/assets/fpv_2023.gif"/>
|
||||
</p>
|
||||
|
||||
|
||||
### Real Swarm
|
||||
|
||||
In order to fly a real swarm using clover, we decided to take an approach of putting every clover on the same ROS network / environment so that the master could talk to each one of them.
|
||||
|
||||
We did this by separating each drone topics / nodes / services with namespaces. The goal is to achieve the same effect as the simulation that we've done in **CopterHACK 2022**, so each drone would have its own `/cloverID` namespace, and the ID is the identifier for each drone.
|
||||
We did this by separating each drone topics / nodes / services with namespaces. The goal is to achieve the same effect as the simulation that we've done in [**CopterHack-2022**](copterhack2022.md), so each drone would have its own `/cloverID` namespace, and the ID is the identifier for each drone.
|
||||
|
||||
In other words, instead of just `simple_offboard` node for a single drone, we'd now have `/clover0/simple_offboard`, `/clover1/simple_offboard` and so on.
|
||||
|
||||
To launch it, you need to first stop clover's default daemon, and then connect all Raspberries to the same network. After that, you should connect all their `roscore` to the same IP address (the master's), and then launch the `realClover.launch` file passing the `ID` argument as a parameter. Again, for more detailed information on how this works, please check out our [gitbook](https://swarm-in-blocks.gitbook.io/swarm-in-blocks/):
|
||||
|
||||
sudo systemctl stop clover
|
||||
roslaunch rasp_pkg realClover.launch ID:=0
|
||||
|
||||
```bash
|
||||
sudo systemctl stop clover
|
||||
roslaunch rasp_pkg realClover.launch ID:=0
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
<img width="500" src="https://raw.githubusercontent.com/Grupo-SEMEAR-USP/swarm_in_blocks/master/assets/swarm_real/swarm.gif"/>
|
||||
</p>
|
||||
|
||||
> **Note:** We are aware that in the video the calibration of the drone control is not ideal, however, the objective of this test was really to validate the operation of the swarm in a real environment (which was actually done).
|
||||
|
||||
> **Note** We are aware that in the video the calibration of the drone control is not ideal, however, the objective of this test was really to validate the operation of the swarm in a real environment (which was actually done).
|
||||
|
||||
<div align="right">[ <a href="#table-of-contents">↑ to top ↑</a> ]</div>
|
||||
|
||||
@@ -213,7 +207,6 @@ To launch it, you need to first stop clover's default daemon, and then connect a
|
||||
|
||||
## Conclusion[](#Conclusion)
|
||||
|
||||
|
||||
Engineering and robotics challenges have always been the main driver of Team Athena, from which we seek to impact society through innovation. Last year, during CopterHack 2022, there was no lack of challenges of this type, and in them we grew and exceeded our limits, all to deliver the best possible project: **Swarm in Blocks**. All the motivation to facilitate a task as complex as the manipulation of swarms of drones, even through block programming, delighted us a lot and we hope that it delights all our users.
|
||||
|
||||
With that came the Swarm in Blocks 2.0, which brought with it innovations that optimized the clover's flight control and that could allow for greater emotions in the handling of the drone, in addition to focusing on greater flight safety.
|
||||
@@ -230,13 +223,13 @@ Finally, we thank the entire COEX team that made CopterHack 2023 possible and al
|
||||
|
||||
Atena Team 2023 (Swarm in Blocks 2.0):
|
||||
|
||||
- Agnes Bressan de Almeida : [Github](https://github.com/AgnesBressan), [LinkedIn](https://www.linkedin.com/in/agnes-bressan-148615262/)
|
||||
- Felipe Tommaselli: [Github](https://github.com/Felipe-Tommaselli), [LinkedIn](https://www.linkedin.com/in/felipe-tommaselli-385a9b1a4/)
|
||||
- Gabriel Ribeiro Rodrigues Dessotti : [Github](https://github.com/dessotti1), [LinkedIn](https://www.linkedin.com/in/gabriel-ribeiro-rodrigues-dessotti-8884a3216)
|
||||
- José Carlos Andrade do Nascimento: [Github](https://github.com/joseCarlosAndrade), [LinkedIn](https://www.linkedin.com/in/jos%C3%A9-carlos-andrade-do-nascimento-71186421a)
|
||||
- Lucas Sales Duarte : [Github](https://github.com/LucasDuarte026), [LinkedIn](https://www.linkedin.com/in/lucas-sales-duarte-a963071a1)
|
||||
- Matheus Della Rocca Martins : [Github](https://github.com/MatheusDrm), [LinkedIn](https://www.linkedin.com/in/matheus-martins-9aba09212/)
|
||||
- Nathan Fernandes Vilas Boas : [Github](https://github.com/uspnathan), [LinkedIn](https://www.linkedin.com/mwlite/in/nathan-fernandes-vilas-boas-047616262)
|
||||
- Agnes Bressan de Almeida : [GitHub](https://github.com/AgnesBressan), [LinkedIn](https://www.linkedin.com/in/agnes-bressan-148615262/)
|
||||
- Felipe Tommaselli: [GitHub](https://github.com/Felipe-Tommaselli), [LinkedIn](https://www.linkedin.com/in/felipe-tommaselli-385a9b1a4/)
|
||||
- Gabriel Ribeiro Rodrigues Dessotti : [GitHub](https://github.com/dessotti1), [LinkedIn](https://www.linkedin.com/in/gabriel-ribeiro-rodrigues-dessotti-8884a3216)
|
||||
- José Carlos Andrade do Nascimento: [GitHub](https://github.com/joseCarlosAndrade), [LinkedIn](https://www.linkedin.com/in/jos%C3%A9-carlos-andrade-do-nascimento-71186421a)
|
||||
- Lucas Sales Duarte : [GitHub](https://github.com/LucasDuarte026), [LinkedIn](https://www.linkedin.com/in/lucas-sales-duarte-a963071a1)
|
||||
- Matheus Della Rocca Martins : [GitHub](https://github.com/MatheusDrm), [LinkedIn](https://www.linkedin.com/in/matheus-martins-9aba09212/)
|
||||
- Nathan Fernandes Vilas Boas : [GitHub](https://github.com/uspnathan), [LinkedIn](https://www.linkedin.com/mwlite/in/nathan-fernandes-vilas-boas-047616262)
|
||||
|
||||
<p align="center">
|
||||
<img width="500" src="https://raw.githubusercontent.com/Grupo-SEMEAR-USP/swarm_in_blocks/master/assets/atena_team.JPG"/>
|
||||
@@ -244,11 +237,11 @@ Atena Team 2023 (Swarm in Blocks 2.0):
|
||||
|
||||
In honor of Atena Team 2022:
|
||||
|
||||
- Guilherme Soares Silvestre : [Github](https://github.com/guisoares9), [LinkedIn](https://www.linkedin.com/in/guilherme-soares-silvestre-76570118b/)
|
||||
- Eduardo Morelli Fares: [Github](https://github.com/faresedu), [LinkedIn](https://www.linkedin.com/in/eduardo-fares-a271561a0/)
|
||||
- Felipe Tommaselli: [Github](https://github.com/Felipe-Tommaselli), [LinkedIn](https://www.linkedin.com/in/felipe-tommaselli-385a9b1a4/)
|
||||
- João Aires C. F. Marsicano: [Github](https://github.com/Playergeek181), [LinkedIn](https://www.linkedin.com/in/joao-aires-correa-fernandes-marciano-53b426195/)
|
||||
- José Carlos Andrade do Nascimento: [Github](https://github.com/joseCarlosAndrade), [LinkedIn](https://www.linkedin.com/in/jos%C3%A9-carlos-andrade-do-nascimento-71186421a)
|
||||
- Rafael Saud C. Ferro: [Github](https://github.com/Rafael-Saud), [LinkedIn](https://www.linkedin.com/in/rafael-saud/)
|
||||
- Guilherme Soares Silvestre : [GitHub](https://github.com/guisoares9), [LinkedIn](https://www.linkedin.com/in/guilherme-soares-silvestre-76570118b/)
|
||||
- Eduardo Morelli Fares: [GitHub](https://github.com/faresedu), [LinkedIn](https://www.linkedin.com/in/eduardo-fares-a271561a0/)
|
||||
- Felipe Tommaselli: [GitHub](https://github.com/Felipe-Tommaselli), [LinkedIn](https://www.linkedin.com/in/felipe-tommaselli-385a9b1a4/)
|
||||
- João Aires C. F. Marsicano: [GitHub](https://github.com/Playergeek181), [LinkedIn](https://www.linkedin.com/in/joao-aires-correa-fernandes-marciano-53b426195/)
|
||||
- José Carlos Andrade do Nascimento: [GitHub](https://github.com/joseCarlosAndrade), [LinkedIn](https://www.linkedin.com/in/jos%C3%A9-carlos-andrade-do-nascimento-71186421a)
|
||||
- Rafael Saud C. Ferro: [GitHub](https://github.com/Rafael-Saud), [LinkedIn](https://www.linkedin.com/in/rafael-saud/)
|
||||
|
||||
<div align="right">[ <a href="#table-of-contents">↑ to top ↑</a> ]</div>
|
||||
|
||||
Reference in New Issue
Block a user