wiki/content/project/citizen/index.md

82 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

+++
date = 2014-11-02T00:00:00+00:00
title = "Citizen"
2017-03-12 22:04:30 +01:00
summary = "A balancing robot written in Go and running on ARM Linux."
tags = ["machines"]
+++
2017-03-12 22:04:30 +01:00
A balancing robot written in Go and running on ARM Linux.
## Mod list
Changes to make:
- Move the gyro down between the wheels. Reduces the acceleration seen
due to falling.
## Other robots
There's a ton out there.
- lil-bot uses the same motors (MG-6-48) but with encoders. 7xAA so
8.4 V to 10.5 V. 100 Hz control loop. MPU-6050 with 2 %
complementary filter. Has a err\*\*2 term as well.
## v1
v1 can balance but poorly. The big differences were:
- Better pitch measurement through a complementary filter. Gives the
absolutes of the accelerometers and noise rejection of the gyros.
- Integral control to respond quicker to small offsets.
Things I also changed:
- PWM rate up to 10 kHz
- Control loop up to 100 Hz
- Gyro bias removal. The gyro had a 0.34 deg/s bias.
Things to check:
- The gyro scale might be wrong and might be over reporting the angle.
- The deadband on the motors is quite bad and is probably hurting the
small tilt response. I might be able to kick the motors to start
things turning then return to the demanded speed.
- Is the gyro saturating?
- I2C speed
- Add voltage compensation?
## v0
v0 is done but doesn't really work. Issues:
- The motors have a high deadband and are too high speed.
- The pitch is based off the accelerometers only and seems very noisy.
- The motors are independant, so at low drive sometimes one will start
and the other stay still.
Next steps:
- Measure the CPU load
- Measure the pitch while standing upright and steady
- Investigate complementry filters to combine the gyro and
accelerometers
- Investigate the IMUs advanced features to see if it already gives a
good pitch
- Profile the motors to see if I can lower the deadband (dither?)
- Check I2C rate is 100 kHz or higher.
Notes:
- The 20 ms timer fires at ~16 ms and ~24 ms. HZ is 128. Turn on TCB
as a clock source, switch to low latency, switch to tickless.
- IMU has:
- DLPF, a low pass filter. Use to filter accelerometers?
- Default accelerometer range is +-2G (as the default reading is
~16000)
-