Skip to content
Snippets Groups Projects
Commit e1fcf575 authored by dawehr's avatar dawehr
Browse files

Added documentation for quad.

parent b2306ec6
No related branches found
No related tags found
No related merge requests found
......@@ -60,12 +60,29 @@ hardware interface.
Look in `xsdk_workspace/real_quad/src/hw_impl_zybo_tests.c` for instructions.
Ideally, you would run these tests from the XSDK IDE.
### XSDK FYIs
## XSDK FYIs
Definitely first read the [Xilinx How-To](doc/how_to_use_xilinx_tools.pdf).
The XIlinx SDK has a few quirks that are important to watch out for:
1. From the [documentation](https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/SDK_Doc/tasks/sdk_t_tcf_limitations_faq.htm), if you abort program execution while at a breakpoint inside an interrupt handler, when re-running the program, interrupts don’t fire. You have to do a hard reset of the board (cycle power) to have interrupts work again.
2. After doing a `git pull`, refresh the files by right-clicking on the project in the sidebar and clicking "Refresh"
3. The project does not detect changes in header files, so if you modify a `.h` file, you should do a clean before building, otherwise you may experience unexpected behavior.
2. After doing a `git pull` or `git checkout`, refresh the files by right-clicking on the project in the sidebar and clicking "Refresh"
3. The project does not detect changes in header files, so if you modify a `.h` file, you should do a clean before re-building, otherwise you may experience unexpected behavior. We got into the habit of always doing a clean before a build whenever creating code that will be put on the quadcopter.
## Controller Network (Control algorithm)
First read the [documentation for the computation graph library](computation_graph/README.md) to understand how the graph computes functions from a directed graph.
To visualize the default control network, from the quad folder, run `make diagram` with graphviz installed, and an image of the control network will show up as `network.png` in the _src/gen\_diagram_ folder. To see the autonomous controller, you can change the call at the bottom of `control_algorithm_init` from `connect_manual()` to `connect_autonomous()` before running `make diagram`. Just be sure to change it back to `connect_manual()` before the final build. Below is a simplified version of the autonomous controller that shows the control network for autonomous flight using VRPN data. (Unused blocks relating to manual flight and optical flow have been removed, as well as Ts\_IMU and Ts\_VRPN, which are blocks that keep track of the sampling period)
![Control network](src/gen_diagram/team_17-16_demo-simple_network.png)
One potential confusing point to take note of is the difference between "(X/Y) Vel PID" and "(X/Y) Vel" blocks. "(X/Y) Vel" is just a PID controller that has Kd=-1, which results in calculating the derivative of position to provide velocity. For clarity, it would be a good idea to create an actual differentiation block.
* Note our use of derivative on value, not error
## Optical Flow
The current (end of may17-16) state of optical flow is that it can be used autonomously be uncommenting all four defines at the top of `control_algorithm.c`. It is relatively stable, but drifts over time. Setpoints do work, but yaw needs fixing (See issue #23).
### Quad Stats
Optical flow sensor is offset by 35.64 degrees.
We are using the PX4Flow optical flow sensor. Read more about it [here](https://pixhawk.org/modules/px4flow) and [here](https://pixhawk.org/dev/px4flow). The source code for the firmware can be found on [Github](https://github.com/PX4/Flow).
### Improvements to be made
* Compensate for rotation of sensor. The PX4Flow has the ability to enable gyroscope compensation (The firmware must be re-flashed for changes to persist), but when we tried it, the output was much worse. We then implemented our own gyroscope correction, using the complementary-filtered pitch and roll, since they will not drift over time (Using raw gyro would result in drift in position because of gyrosope angle drift). The actual data didn't look much worse, and for large, slow movements, the gyroscope compensation seemed to help prevent incorrect measurements, but it always made flight worse, probably beause of high-frequency noise. Using the complementary filter might be the cause, since it essentially high-passes the accelerometer readings, which are very noisy. We then also tried putting a low-pass filter on phi_dot and theta\_dot, but it didn't help flight. Possibly the delay added by the filter caused the correction to not align with the actual movements.
* Possibly just switch to a better optical flow sensor. This one has not had any developments in the past couple years, is hard to buy, and is poorly documented. The best documentation is to actually look in the source code, because we have found multiple discrepancies in the documentation.
\ No newline at end of file
# Computation Graph
* What is a computation graph
* NaNs
* How to configure: Configuration is complicated - suggest solutions
* Reset propogataion
* graph_blocks library - suggest decoupling
* Suggest future ideas - pre-parsing computation order
* Arbitrary IDs are supported for the ground station, but is not really a true implementation. Need an actual hashmap
The gen_diagram project can create an image of the controller network.
To make a new diagram, from the top-level quad directory, run "make gen_diagram".
To generate an image, you need the graphviz application installed. You can get this from your package manager (Tested so far on apt and yum). After installing, you should be have access to the `dot` command from your terminal.
To make a new diagram, from the top-level quad directory (`MicroCART/quad`), run `make diagram`.
The new network.png file show up in this folder.
\ No newline at end of file
quad/src/gen_diagram/network.png

640 KiB | W: | H:

quad/src/gen_diagram/network.png

617 KiB | W: | H:

quad/src/gen_diagram/network.png
quad/src/gen_diagram/network.png
quad/src/gen_diagram/network.png
quad/src/gen_diagram/network.png
  • 2-up
  • Swipe
  • Onion skin
quad/src/gen_diagram/team_17-16_demo-simple_network.png

395 KiB

......@@ -17,7 +17,7 @@
//#define USE_LIDAR
//#define USE_OF
//#define USE_GYRO_YAW
//#define NO_VRPN
//#define NO_VRPN // This #define is to remove the requirement that
//10 degrees
#define ANGLE_CLAMP (0.1745)
......@@ -375,7 +375,7 @@ int control_algorithm_init(parameter_t * ps)
graph_set_param_val(graph, ps->pos_time, CONST_SET, 0.04);
graph_set_param_val(graph, ps->angle_time, CONST_SET, 0.005);
// Set initial mode
connect_manual(ps);
connect_autonomous(ps);
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment