Skip to content

Commit

Permalink
Update README to include waypoint-handler edits
Browse files Browse the repository at this point in the history
  • Loading branch information
ajshank authored Jan 11, 2021
1 parent 17afdb3 commit 19920cb
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ High-level flight stack for precise multirotor control, designed and used extens
Freyja bundles ROS packages that implement fast and accurate state estimators, an optimal feedback controller (LQR/LQG), and generalized interfaces for common autopilots that make it suitable for several precise and aggressive flight manuevers. The implementation uses standard control-systems style and terminology, and follows a conventional ROS architecture, thereby making it easy to substitute custom controllers, observers and communication interfaces. Freyja can remain oblivious to the specific _type_ of multirotor as long as the onboard autopilot can stabilize its attitude accurately, and can exploit differentially-flat trajectory planning methods to support feed-forward elements in the controller. Agile and precise flights can be performed _outdoors,_ even under high wind conditions, when bias compensation and RTK GPS integration is enabled.

## Overview
Freyja is a collection of four primary ROS packages:
Freyja is a collection of **three** primary ROS packages:
- `state_manager` : interfaces several input data sources (motion capture, gps, camera estimate) to produce one `state_vector` [denoted **x** in typical control schemes]. Some parts of state_vector are calculated (such as velocity), and some are merged from different callbacks. Also implements a collection of commonly used filters (Gaussian, LWMA, Median ..)
- `lqg_control` : the core controller node that takes **x** from `state_manager`, a reference state **x<sub>r</sub>**, and calculates the optimal control required to regulate **x** to **x<sub>r</sub>**. Implements a standard LQR controller and a full state observer (Kalman) to function as a Linear Quadratic Gaussian (LQG) controller.
- `autopilot_handler` : contains communication interfaces to autopilots. Currently supported autopilots are Pixhawk (with ArduCopter stack, px4 experimental) and Ascending Technologies.
- `freyja_trajectory_provider` : an example trajectory provider node that produces **x<sub>r</sub>**. In common use, this node is typically suppressed (using a launch argument), and users will write their own custom trajectory node that represents their particular flight objectives. It is possible for **x<sub>r</sub>** to be simple discrete waypoints, piecewise continuous paths, or the product of an advanced trajectory planner that incorporates spatial and temporal shapes of trajectories. Path derivatives up to the 2nd order are supported.

The trajectory reference, **x<sub>r</sub>**, can be smooth parametric curves, piecewise continuous paths, or be produced by more advanced trajectory planners.
The optional `waypoint_manager` node provides a convenience handler for providing discrete waypoints to the system, which are automatically converted to smooth trajectory references (using linear or time-optimal paths). It is possible to directly publish discrete **x<sub>r</sub>** references; however, the behavior then is not guaranteed to be smooth.

## Build
Clone the repository into the `src/` directory of your ROS workspace. Other packages in your project (such as camera processing, machine learning, trajectory generators) will sit adjacent to `Freyja/`. A recommended directory structure would look like so:
Expand Down Expand Up @@ -39,15 +41,16 @@ For bigger projects that involve more packages, prepare your own launch file, an
<arg name="total_mass" value="1.2" />
<arg name="vicon_topic" value="/vicon/FLH1/FLH1" />
<arg name="start_rosbag" value="false" />
<arg name="use_external_trajectory" value="true" />
<arg name="thrust_scaler" value="100" />
<arg name="use_waypoint_handler" value="true" />
</include>

<node name="my_traj" pkg="my_trajectory_provider" type="my_glamorous_trajectory" />
:
:
</launch>
```
In the example above, the launch argument `use_external_trajectory` is set to true since you are expected to provide your own custom trajectory source (and not use Freyja's built-in examples).
In the example above, the launch argument `use_waypoint_handler` is set to `true` for providing discrete waypoints (and not reference states).

## Wiki
Check out [Freyja's wiki](https://github.com/unl-nimbus-lab/Freyja/wiki) to get more details on everything, from a basic multirotor build, to advanced configuration and set up, all the way to how trajectories can be written.
Expand Down

0 comments on commit 19920cb

Please sign in to comment.