Giter VIP home page Giter VIP logo

kr_mav_control's Introduction

kr_mav_control

ROS packages for quadrotor control

Build Status

Stack includes:

  • kr_mav_manager: A manager for the kr_mav_control stack
  • rqt_mav_manager: GUI interface for common kr_mav_manager functions
  • interfaces: Translates kr_mav_msgs/SO3Command to corresponding robots interface.
  • kr_quadrotor_simulator: Simple quadrotor dynamics simulator
  • kr_mav_msgs: Common msgs used across packages
  • kr_mav_controllers: Position controllers
  • trackers: Different trackers under kr_trackers, and kr_trackers_manager

Example use cases:

The multi robot examples uses following packages.

Running single robot with the included simple simulator

Running multiple robots with the included simple simulator

MATLAB interface with simple simulator

Python interface with simple simulator

Running with Gazebo

Running multiple robots with Gazebo

This code has been tested with ROS Noetic on Ubuntu 20.04.

Block Diagram

The following block diagram shows how the packages in the repo fit together. Block Diagram

Further detailed breakdown of the blocks can be found in the PPT

kr_mav_control's People

Contributors

aarow1 avatar anuragmakineni avatar cathias avatar fcladera avatar gareth-cross avatar jessweakly avatar jonfink avatar jsvacha avatar justinthomas avatar kartikmohta avatar loiannog avatar mwatterson avatar philipdames avatar pranavpshah avatar sikang avatar sytang avatar tdinesh avatar tyuezhan avatar versatran01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kr_mav_control's Issues

In MAV_Manager, there should be an idle motors method

Right now, there is a "motors" method which arms/disarms the motors, but does not turn them on or off. There should be another method that actually turns the motors on and off so that when taking off, the robot doesn't have issues with the startup rates of different motors.

On-the-fly changing of integral gains in so3_control

It would be handy to be change integral gains on the fly in so3_control, but I'm not sure which approach would be most preferred. The way I see it, there are three options:

  1. Include the integral gains in PositionCommand
  2. Create a separate subscriber specifically for integral gains
  3. Have a separate subscriber for position gains, one for attitude gains, and remove gains from PositionCommand entirely.

Thoughts?

[mav_manager] - have recent odom

When mav_manager computes the time between odom packets, it currently uses the timestamp from the header of the incoming message. This leads to issues when odom is being published by an offboard computer (ex vicon) and clocks aren't synchronized well.

It's probably better to use the ros::Time::now() in the odom callback instead of copying the header timestamp.

Major restructuring, Public release?

Address the following before restructuring

  • controllers
    • so3_control
    • pid_control
  • doc
  • quadrotor_msgs
  • quadrotor_simulator
  • trackers
    • trackers_msgs
    • std_trackers
    • trackers_manager
  • interfaces
    • xyz_interface
    • ...
    • astec_interface
    • astec_firmware
    • quad_encode/decode_msg
    • quad_serial_comm
  • #128 + use modern cmake style for setting compiler flags
  • Update namespace names to follow code style
  • Change kr_trackers_manager to kr_tracker_manager

Finally a public release
- Delete all stale branches. Make people fork and maintain their own branches

  • Proper documentation

Have config file for the robot parameters in the simulator

Currently all the properties of the robot (like inertia, mass, arm_length etc.) are hard-coded in the src/dynamics/Quadrotor.cpp file (with params for the hummingbird). This needs to be changed if you want to simulate any other robot. It would be very convenient if we can just have these in a config file instead of hard-coding them.

Modernize Cmake

bump CMake version to at least 3.10 and use target-based CMake functions.
pretty please? ๐Ÿ”ฎ

Move common trackers into one node

Common trackers such as line_tracker_yaw, velocity_tracker, etc. should be in a single node. They should also be renamed to trackers instead of controllers.

Add install targets

Right now we just run the packages from the devel space so it is not an issue, but it would be good to have proper install targets for the packages.

Add option to specify yaw at waypoints in the trajectory tracker

Currently the trajectory tracker does not touch the yaw, it maintains the initial yaw. The yaw should be allowed to change along the trajectory by specifying the yaw at the waypoints. This would require taking the time to yaw into account when computing the segment times.

Implementing the option to have yaw be tangential to the trajectory at every point is a bit hard in a simple tracker like this, so that is a task for another time ๐Ÿ™‚

MAV_MANAGER: EStop on the Pixhawk

The "estop" service when used on the pixhawk should continue to send packets at least every 0.5s in order to prevent the pixhawk from entering manual mode.

Error running mav_manager/demo.launch

After running the launch file and enabling motors, I called /quadrotor/hover service and it attempted to go to {nan, nan, nan, 0.00} and crashed. Not sure what the problem is, but Justin says this should not be happening (even though I am supposed to call takeoff prior to hover).

mavros interface for trajectory tracker

Hi,
I want to pass the SO3 command to the FCU via mavros, I checked the AttitudeTarget message, but that message only supports normlised thrust in z-axis, but SO3Command has forces in x, y and z axis. how can I convert SO3Command to Attitude target message @kartikmohta

thanks

Remove unused packages

Like kquad_interface or astec_firmware. Nobody on earth evah will evah use these packages evah. Both companies are acquired anyways.

mav_manager service names should include package name

Services in sample.cpp in mav_manager/src should be listed as /quadrotor/mav_manager/command_name. For example, if I want to specify a target position for the quadrotor, instead of calling the service /quadrotor/goTo, I should call the service /quadrotor/mav_manager/goTo.

Safety Checks

Manager: The Motors can be turned off while in-flight. There has to be checks to make sure this is done only when landed. Other safety checks need to be considered

IMU dependency in mav_manager

There should be a flag to set whether or not the system depends on IMU feedback. If so, the feedback should be monitored so a safety catch can be triggered if feedback is dropped.

Edge Case in Traj_Gen for waypoints

In testing with waypoints, I seem to have found an edge case that causes quadrotors to crash (in sim and reality). The problem is related to the computation of A_inv_M in traj_gen.cpp that produces nan values.

The issue seems to originate when a set of waypoints with motion purely in the z-direction is run when the robot is already exactly coincident with waypoint_1. Other waypoints I have tried seems to run fine regardless of robot starting position. Additionally, a slight perturbation of the robot location via a goto command allows this set of waypoints to run.

This zip file contains a bag file containing an example of this along with a text file describing the waypoints enclosed and the conditions which result in failure.
waypoints_bug.zip

This is probably not a very urgent issue, but I wanted to provide documentation in case it comes up again for someone else!

Question about the Thrust Models in Mavros Interface

Hi @tdinesh

Thanks for the great work!

I saw different thrust models in the mavros interface here

I would like to ask if there is any document/paper that explains the math behind this implementation. Also, which one works better in your experience , the implementation in the master branch or the one I linked above in the fla_mavros_interface branch?

Thank you.

How to tune the so3_control gains?

Hi.

I would like to know if there is a systematic method of tuning the so3_control gains, especially for actual drones.

How to choose an initial set of values, and how to tune them?

Thank you.

Potential bugs with usage of Eigen

I noticed there are some issues with how Eigen is used in some parts of this repo.
For example

https://github.com/KumarRobotics/quadrotor_control/blob/master/mav_manager/include/mav_manager/manager.h

https://github.com/KumarRobotics/quadrotor_control/blob/fd9812b1d563de07c3248cb6c5ebe0934c51deab/mav_manager/include/mav_manager/manager.h#L76

Passing Eigen objects by value is discouraged.
https://eigen.tuxfamily.org/dox/group__TopicPassingByValue.html

This will not have a problem if the user doesn't compile with -march=native, but I suggest we follow eigen's guidelines on this.

Manager

I'm opening up this issue to propose a "MAV Manager" of sorts. My current thoughts are that it will be a class that makes interfacing with quadrotor_control simpler. For example, the following commands might initiate a takeoff to 1m above the current position and have the robot go to {1,1,3}, and then hover in place.

MAVManager robot("QuadrotorAlpha");
robot.takeoff(1);
robot.goTo(1,1,3);
robot.hover();

This concept is still very early in development, so I'd appreciate feedback.

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.