Giter VIP home page Giter VIP logo

pymavswarm's People

Contributors

evan-palmer avatar grantphllps avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pymavswarm's Issues

Integrate Support for Live HRL into HRL Plugin

This issue is directly linked to the following Swarm Planner Issue: https://github.com/unl-nimbus-lab/SwarmPlanner/issues/74

Describe the solution you'd like
As of now the HRL manager has a single button that toggles between:
"start path execution" (and sends "0" over the debug int message) and
"stop path execution" (and sends "1" over the debug int message).

In order to support "Live HRL" would like this to be 3 buttons like
"Deploy Start" (and sends "0" over the debug int message)
"Preplanned Point" (and sends "1" over the debug int message)
"Live HRL" (and sends "2" over the debug int message)

Additional context
Adding a new flight mode to the agents and need to be able to set it from the GCS

Integrate Software-In-The-Loop Configuration

Is your feature request related to a problem? Please describe.
Users are currently required to have a full hardware setup to be able to test their algorithms and implementation. This can make it difficult to evaluate their software when the environment is not suitable for testing (e.g., winter) or when Users don't have access to hardware platforms for testing.

Describe the solution you'd like
Implement support for SITL

Add Method to Validate Message Types on Message Construction

Is your feature request related to a problem? Please describe.
There isn't any validation that ensures that a message type provided to construct a message is valid. This reduces the usability of the system and makes Users more prone to accidentally introducing bugs in their code.

Describe the solution you'd like
Add a method to validate that the message type provided to a message on construction is valid

Describe alternatives you've considered
Rather than using a collection of messages encapsulated by one message type, break all messages up into individual classes.

Integrate support to send state messages to the HRL ROS node

Is your feature request related to a problem? Please describe.
There is currently no support to enable sending commands to the HRL ROS node. Consequently, the system does not know when to start, stop, or restart.

Describe the solution you'd like
Integrate support to send the expected HRL commands

Integrate Support to Follow a Target

Is your feature request related to a problem? Please describe.
There is currently no support for Users to configure a target agent that the other agents should follow. This is a feature that many multi-agent systems integrate.

Describe the solution you'd like
Add support for the MAV_CMD_DO_FOLLOW command

Integrate file logging into pymavswarm

Is your feature request related to a problem? Please describe.
The project is currently being provided a large amount of data from the agents; however, this data is not being logged. This could make reviewing mission performance and errors challenging.

Describe the solution you'd like
It would be valuable to better support Users of mavswarm by integrating support for MAVLink command logging to a csv file

Installation of `pymavswarm` fails on M1 Chip

Describe the bug
When attempting to install pymavswarm on a Mac that uses the latest M1 chip, the installation fails when attempting to install pymavlink

To Reproduce
Steps to reproduce the behavior:

  1. pip install .

Expected behavior
Successful installation

Desktop (please complete the following information):

  • OS: MacOS (with M1 chip)

Update Message Map to Use Mavlink Consistent Naming

Is your feature request related to a problem? Please describe.
The message senders respond to custom names. This can make it confusing for new developers when learning the codebase or for Users when trying to identify how the system sends a particular message.

Describe the solution you'd like
Update the message sending decorators to use the same/consistent names that are assigned in the Mavlink documentation

Add Optional Support for State Change Verification

Is your feature request related to a problem? Please describe.
Verification of message reception only exists through message acknowledgement. However, there is no verification that the agent responded to the message.

Describe the solution you'd like
Add an optional flag to indicate that the message sender should also validate message reception according to a state change within the provided agent.

Add a method to acknowledge HRL commands

Is your feature request related to a problem? Please describe.
The provided debug MAVLink messages don't provide an acknowledgement bit upon reception. Therefore, it is not possible in the current state to acknowledge that an agent has successfully performed an HRL command.

Describe the solution you'd like
Implement a method to evaluate whether a state change occurred in the system as a method of acknowledgement.

Add User documentation

Is your feature request related to a problem? Please describe.
There is no documentation discussing how to use pymavswarm and its interface.

Describe the solution you'd like
Add User documentation with examples demonstrating library usage

[BUG]: `goto` example doesn't command agents to location

Describe the bug

Agent's fail to respond to the goto command when issued. This has been demonstrated through failed message sending (failed acknowledgments) and through field tests.

To Reproduce

Steps to reproduce the behavior:

  1. Command any number of agents using the MavSwarm goto command

Expected behavior

Agents should fly to the target location

Screenshots

N/A

Project Version

This issue affects v0.1.0

Desktop

This issue was observed when running the command from GCS. The GCS utilizes Ubuntu 20.04. The agents utilize ArduCopter with the Pixhawk Blue Cube as the FMU.

Additional context

N/A

Remove `Start ROS` and `Stop ROS` commands

Is your feature request related to a problem? Please describe.
The start_ros and stop_ros commands are no longer being used

Describe the solution you'd like
Remove the respective commands

Add an All-In-One Takeoff Command

Is your feature request related to a problem? Please describe.
Users currently need to send a command to switch to arm, then guided, then takeoff. This can be difficult to accomplish quickly and in a usable way.

Describe the solution you'd like
Add support for a command that performs all of these steps in a single command.

Integrate a Software-In-The-Loop Feature

Is your feature request related to a problem? Please describe.
Currently Users must have access to at least one agent to be able to test their implementation. This can slow down development time and make it difficult for Users to test their systems.

Describe the solution you'd like
Integrate a software-in-the-loop (SITL) feature that enables Users to simulate interaction with swarms.

Increase processing speed to better support applications

Is your feature request related to a problem? Please describe.
pymavswarm uses a significant amount of processing when operating. Much of which can be decreased to better support the development of applications on top of the project.

Describe the solution you'd like
Redesign the architecture of the system to better support application development and improve performance speed.

Describe alternatives you've considered
Another alternative could be to re-implement the project using C++ to take advantage of real multi-threading; however, this would require development of a new pymavlink-type interface for C++.

Add the ability to create named sub-swarms

Is your feature request related to a problem? Please describe.
pymavswarm currently identifies all agents as a swarm; however, it may be useful to provide support for creating sub-groups of swarms from a network and sending commands to a respective group

Describe the solution you'd like
Add the ability to create subgroups in a swarm and the functionality to send commands to a subgroup

Add Callback Decorator For Events

Is your feature request related to a problem? Please describe.
There currently is no way for tools that utilize the pymavswarm interface to be informed of events. Consequently, it can make errors hard to catch and recover from. Furthermore, it becomes difficult to verify that a message was successfully verified or delivered.

Describe the solution you'd like
Implement a decorator for external software to use for enabling callback functionality.

Describe alternatives you've considered
Implement this as a method.

Refactor Message Senders/Handlers into Distinct Classes

Is your feature request related to a problem? Please describe.
The Connection class holds all of the message senders and receivers. This has resulted in the Connection class holding functionality outside of its scope. This has also resulted in the Connection class growing so large that it is difficult to read for newcomers.

Describe the solution you'd like
Determine a way to refactor the message senders and receivers into their own respective classes

Add Support to Set Home Location for Agents

Is your feature request related to a problem? Please describe.
User's currently have no method to reset the home location for an agent after the agent boots. This can make it painful to deploy a swarm.

Describe the solution you'd like
Add support to reset an agent's home location.

Integrate a takeoff command

Is your feature request related to a problem? Please describe.
There currently is no support for sending takeoff commands

Describe the solution you'd like
Enable setting a desired waypoint to takeoff to and add a command to takeoff

Add developer documentation

Is your feature request related to a problem? Please describe.
There is no documentation discussing the design and implementation of the library. This makes it hard for newcomers to contribute toward the project

Describe the solution you'd like
Add developer documentation

Integrate Event-Driven Support into Swarm Planner

Is your feature request related to a problem? Please describe.
Swarm Planner currently maintains multiple threads that are responsible for polling the system. Rather than polling the system, it would be helpful to utilize the pymavswarm event-driven behavior to improve system performance.

Describe the solution you'd like
Integrate support for event-driven behavior in Swarm Planner and update pymavswarm as changes are needed.

[FEATURE]: Implement flocking algorithm example

Is your feature request related to a problem? Please describe

pymavswarm advertises the ability to be used for implementing decentralized swarm algorithms; however, there are no examples demonstrating how this could be implemented.

Describe the solution you'd like

Implement an example that can be executed on the companion computer of swarm agents that demonstrates a decentralized flocking behavior.

Describe alternatives you've considered

Alternatives could include a centralized swarm algorithm. In the future, both may be desirable.

Implementation Ideas

Implement a flocking algorithm as an example available in the examples/ directory. The example should be executable from an agent's companion computer (e.g., a Raspberry Pi 4), and demonstrate the ability to command multiple agents to flock to a location.

Additional context

Potential related works include the following:

Improve PX4 Support

Is your feature request related to a problem? Please describe.
The current version of pymavswarm is restricted to agents that deploy the Ardupilot firmware, and does not support agents that utilize PX4. To broaded the user-base that pymavswarm supports and to better support the scientific community, it would be valuable to integrate support for PX4.

Describe the solution you'd like
Add the ability to interact with agents that utilize the PX4 firmware.

Use Sphinx Markdown Formatting for Comments

Is your feature request related to a problem? Please describe.
There is currently no developer documentation and the existing comments cannot be parsed in the instance that readthedocs is used for the developer documentation

Describe the solution you'd like
Update the documentation to use Sphinx markdown to enable usage of readthedocs

Add Pipeline to Publish Package to PyPi

Is your feature request related to a problem? Please describe.
It can be difficult for new users to install pymavswarm if they are unfamiliar with manual installation of Python packages.

Describe the solution you'd like
Create an automatic pipeline that publishes pymavswarm to PyPi

[FEATURE]: Integrate CI/CD pipelines

Is your feature request related to a problem? Please describe

There are no checks that verify that contributions pass all system tests. Furthermore, there is not an interface that makes publishing pymavswarm to PyPi an easy endeavor.

Describe the solution you'd like

Implement a collection of Github Actions pipelines to handle the following situations:

  • Run tox.ini to verify that the project passes all linting tests and unit tests on several supported Python versions
  • Publish the package to PyPi on project version release (tagging)

Describe alternatives you've considered

There are multiple alternative CI/CD pipelines that could be utilized for this project such as TravisCI, Azure DevOps, and Amazon AWS; however, this requires an external configuration, and may also not be free (not ideal for this grad student effort)

Implementation Ideas

The implementation could utilize two Github Actions pipelines: one for executing the project tox, and another for publishing the package

Additional context

Helpful resources for the pipeline implementation is as follows:

Add Usage Examples

Is your feature request related to a problem? Please describe.
Users are currently restricted on the information regarding how pymavswarm may be used. To better support new Users of the project, it would be valuable to provide simple functioning examples regarding how to use the project.

Describe the solution you'd like
The desired examples include the following:

  • Example demonstrating how to arm and disarm an agent
  • Example demonstrating how to change the flight mode of an agent
  • Example demonstrating how to check the state of an agent. Properties to check may include: flight mode, arm state, location
  • Example demonstrating how to read and write the value of a parameter on an agent
  • Example demonstrating a how to control an agent and another agent from a companion computer (e.g., an onboard Rasberry Pi)

Add mission creation support

Is your feature request related to a problem? Please describe.
There is currently no support to create missions (series of waypoints) for agents

Describe the solution you'd like
Add an interface that allows Users to create missions

Record State Message Timestamp

Is your feature request related to a problem? Please describe.
There is currently no timestamp associated with the time that a state message was created and sent. This prevents integrating state estimation and safety verification.

Describe the solution you'd like
Record the timestamp provided by the GPS message to use for state estimation.

Describe alternatives you've considered
It may also be possible to explore recording the timestamp saved within the message signature.

System Fails to Reconnect After Disconnect

Describe the bug
After disconnecting from the network and attempting to reconnect, Users are unable to get the state information or send commands properly

To Reproduce
Steps to reproduce the behavior:

  1. Establish a connection
  2. Disconnect
  3. Reconnect
  4. Attempt to send commands/read state

Expected behavior
The system successfully reconnects and enables sending commands and reading state information

Integrate parameter setting and retrieval

Is your feature request related to a problem? Please describe.
There is no support to read or write parameters

Describe the solution you'd like
Implement a command to read a desired parameter and a command to set a desired parameter

Add Better Support for Wifi-Based Swarms

Is your feature request related to a problem? Please describe.
The existing implementation is geared primarily toward swarms that utilize multi-point radio networks as their means of communication. To better support swarms that utilize Wifi for communications, it would be valuable to evaluate the architecture and features to ensure that Users that integrate Wifi communications receive the same level of support as Users of multi-point radio networks.

Describe the solution you'd like
Update pymavswarm to better support Users of Wifi networks. Additional information will be added to this description as more exposure to Wifi networks and their tools is gained.

Add naming support for agents

Is your feature request related to a problem? Please describe.
Retrieving agent information according to their respective system ID and component ID is not very usable and can make it difficult to keep track of swarm agents.

Describe the solution you'd like
Add the ability to assign a name to an agent and to retrieve an agent according to a set name.

Add Home Location State

Is your feature request related to a problem? Please describe.
There currently is no support to validate whether or not the home position of an agent was reset after a home location reset was triggered.

Describe the solution you'd like
Add support to trigger a home location read and an agent state field to store the location.

Integrate Support For Plugins

Is your feature request related to a problem? Please describe.
For Users to integrate support for their own algorithms, they currently need to read through the implementation to determine how to add support for their messages or algorithms. This can be painful and prevent User acceptance.

Describe the solution you'd like
Integrate support for developers to add support for non-standard message types and behaviors in pymavswarm in the form of plugins.

Integrate Support for Message Preemption

Is your feature request related to a problem? Please describe.
There may be situations where a user needs to preempt messages that are currently being sent. For example, if a user sends a message package to all agents that results in an undesired behavior on an agent, it would be desirable to preempt each of those messages to stop the behavior on the particular agent with another message.

Describe the solution you'd like
Integrate support for priority and preemptive behavior in the message sending implementation

Add CONTRIBUTING.txt File

Is your feature request related to a problem? Please describe.
There is currently no documentation regarding the contribution standards and steps that new developers can refer to.

Describe the solution you'd like
Add a CONTRIBUTING.txt file that discusses the code conventions, standards, and contribution guidelines

Describe alternatives you've considered
N/A

Additional context
N/A

Integrate Error Codes for Callbacks

Is your feature request related to a problem? Please describe.
There is currently no way for Users to know the reason that a message failed when an event signals its listeners

Describe the solution you'd like
Integrate error code standards to indicate the reasoning behind failures or to indicate success. This will be especially valuable in the message verification.

Describe alternatives you've considered
This could be passed as solely a string, but may not be as usable or programatically useful.

Integrate Unit Testing and Testing Strategy

Is your feature request related to a problem? Please describe.
There currently is no documented testing strategy. Furthermore, there aren't any unit tests to ensure that the project functionality is correct.

Describe the solution you'd like
Integrate unit testing into the project and add documentation regarding the project testing strategy

Update README for v0.0.3

Is your feature request related to a problem? Please describe.
The README isn't updated for the next release.

Describe the solution you'd like
Update all documentation for the next release.

Add Container for Development Environment Setup

Is your feature request related to a problem? Please describe.
It may be difficult for new contributors to get onboarded due to development environment discrepancies or issues with installing development environments.

Describe the solution you'd like
Integrate a development container to provide new developers with an environment to use or instructions to replicate the environment.

Add support to set waypoints

Is your feature request related to a problem? Please describe.
There is currently no support to set desired waypoints for a particular agent

Describe the solution you'd like
Add implementation to enable setting waypoints for an agent and an easy-to-use interface to generate waypoints

Add Geofencing Support

Is your feature request related to a problem? Please describe.
Users currently don't have access to an interface that creates geofences for their agents and swarm. This can result in fly-aways or unintentionally flying into restricted airspace

Describe the solution you'd like
Add an interface that enables Users to set geofences for their agents

Modify Messages to Require Acknowledgement Instead of Send Message Function

Is your feature request related to a problem? Please describe.
It doesn't make sense from a usability standpoint to add message acknowledgement requirements to the message call rather than the message itself.

Describe the solution you'd like
Remove the require acknowledgement from the method and put that into the message.

Add a "Send All" Method for Commands

Is your feature request related to a problem? Please describe.
Users must currently specify the specific agents in the swarm that should receive a message. This can make it difficult to broadly send a command to all agents in the swarm.

Describe the solution you'd like
Add the option to the send commands/params to let users send a message to all agents in the swarm without prior specification of the receiving agents.

Refactor Message Sending to Support Message "Clusters"

Is your feature request related to a problem? Please describe.
pymavswarm currently handles message sending by appending each message sent by a user to a queue as an independent message. However, the prevents User's from knowing whether a "cluster" of messages that was be sent to all agents was successfully sent and acknowledge by each agent that in the list.

Describe the solution you'd like
Implement support for a data structure that supports the observer pattern and also enables verification of message cluster success.

Clean Up Usage of Public and Private Class Variables

Is your feature request related to a problem? Please describe.
There currently isn't a standard for public and private class variables. This can make it confusing for new developers to contribute toward the project.

Describe the solution you'd like
Clean up the usage of all public and private class variables to ensure consistency across the codebase.

Implement Examples

Is your feature request related to a problem? Please describe.
There are currently no examples for Users to explore to learn more about how to use the pymavswarm library. This can prevent adoption and make usage difficult.

Describe the solution you'd like
Implement a collection of examples that can referenced by new Users and also be publishable.

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.