From 78780ef94c185fbb46fb9f6a1abe210374a6b9cf Mon Sep 17 00:00:00 2001 From: Christoph Schneeberger Date: Wed, 1 May 2019 13:23:00 +0200 Subject: [PATCH] more fixing --- docs/WittyBalancingRobot.md | 7 +++---- docs/images/sensor-noise.png | Bin 6579 -> 19623 bytes 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/WittyBalancingRobot.md b/docs/WittyBalancingRobot.md index a9c54e7..a742643 100644 --- a/docs/WittyBalancingRobot.md +++ b/docs/WittyBalancingRobot.md @@ -102,16 +102,15 @@ itgr += v8; ``` ## Test Environment and useful Functions +![witty](images/xyz1.png?raw=true "XYZ") +The AcZ component is horizontal and will play the main role in the algorithm.
The GyX value can be integrated to give the angle or directly used as a derivative of the acceleration. It is very parasitized and it is necessary to use a suitable filter.
Name of the main variables: -| | | -| --- | --- | -| ![witty](images/xyz1.png?raw=true "XYZ") | The AcZ component is horizontal and will play the main role in the algorithm. The GyX value can be integrated to give the angle or directly used as a derivative of the acceleration. It is very parasitized and it is necessary to use a suitable filter. Name of the main variables: ```int16_t AcZ; // read on the sensor int16_t mAcZ; // moving average int16_t corAcZ; // mAcZ- AcZini int16_t dAcZ // integrated value int8_t pfmL pfmR // pfm of the 2 motorrs -``` | +``` We simplify the problem if we consider only AcZ. At reset, the robot is stationary in the desired position and the initial values ​​after filtering are stored. The same pfm value is given for both engines. The consequence is that Pegase will slowly turn on itself. It will involve GyY, but without compass, there will always be drift. diff --git a/docs/images/sensor-noise.png b/docs/images/sensor-noise.png index f1ebf76b2ec4288debee805f1ace28fe2a45a8ec..072c50d88cbe0378e4cebfb8ba988a578b974465 100644 GIT binary patch literal 19623 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 St&oI6AmpW0qzX}H0sjx(I#cxk literal 6579 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