An interesting observation - the IMU acceleration values are quite small with the LIDAR not spinning. When the LIDAR is running, my readIMU program reports the bot has moved - and it is definitely “moving”, just not going anywhere. Having the LIDAR on the third level is “rocking the bo[a]t”.
Ugh. I was worried about that (even moreso with Finmark because the IMU is closer). Definite downsides to having something so compact. When I go back to the IMU I may also need to fiddle with a mount. The current friction mount is convenient, but I had to fiddle a bit to get the board level so that I wasn’t getting acceleration in the X and Y directions when the robot was at rest. No doubt vibration will disturb that - so I may work on something more fixed (and adjustable).
/K
Really? I was assuming that was from lsb flopping in the math.
(I have seen the 9.8m/s of gravity appear as 10.0-10.1 without the LIDAR spinning)
I’m pretty sure ROS will be averaging all accelerations. In one person’s code for a 9250 IMU I saw filtered_value = (95% of the average value + new_value)/2 being used.
$ ./startIMU
Start DI IMU (BNO055 chip)
Using mutex-protected, exception-tolerant SW I2C
on GoPiGo3 port AD1 in NDOF mode
IMU READING AFTER RESET:
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: 0.0 0.0 0.1 | Mag XYZ: -22.1 9.0 -24.9 | Gyro XYZ: 0.0 0.1 0.1 | Accel XYZ: -0.2 -0.1 10.0 | Temp: 23.0C
Exiting startIMU
pi@ROSbot:~/rosbot-on-gopigo3/imu4gopigo3ros$ ./readIMU
Reading the Dexter Industries IMU Sensor
Using mutex-protected, exception-tolerant SW I2C on GoPiGo3 port AD1
Expand the window till this line fits
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
SafeIMUSensor INSTANTIATING ON PORT AD1 OR BUS GPG3_AD1 WITH MUTEX True INIT False (no mode change)
InertialMeasurementUnit INSTANTIATING ON BUS GPG3_AD1 INIT False (no mode change)
BNO055 Instantiating on BUS GPG3_AD1 with ADDRESS 40 using UNITS 0 HW INIT False
Set _mode to: 12
BNO055 Instantiation Complete
InertialMeasurementUnit Instantiation Complete
SafeIMUSensor Instantiation Complete
2021-09-19 13:29:05.916174: Exception Count: 0
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: -0.0 0.0 0.2 | Mag XYZ: -21.4 10.5 -24.6 | Gyro XYZ: -0.2 -0.1 -0.1 | Accel XYZ: -0.2 -0.0 9.9 | Temp: 24.0C
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: -0.0 0.0 0.2 | Mag XYZ: -20.2 10.1 -24.6 | Gyro XYZ: 0.1 0.1 0.0 | Accel XYZ: -0.2 -0.1 10.0 | Temp: 24.0C
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: -0.0 0.0 0.2 | Mag XYZ: -21.0 9.8 -25.4 | Gyro XYZ: 0.1 -0.1 0.1 | Accel XYZ: -0.2 -0.1 10.1 | Temp: 24.0C
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: -0.0 0.0 0.2 | Mag XYZ: -21.4 9.1 -25.4 | Gyro XYZ: 0.0 -0.2 0.1 | Accel XYZ: -0.2 -0.1 10.0 | Temp: 24.0C
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: 0.0 0.0 0.2 | Mag XYZ: -21.0 9.8 -25.0 | Gyro XYZ: 0.0 0.0 -0.1 | Accel XYZ: -0.2 -0.1 9.8 | Temp: 25.0C
and without mags (IMUPLUS mode)
$ ./startIMU -i
Start DI IMU (BNO055 chip)
Using mutex-protected, exception-tolerant SW I2C
on GoPiGo3 port AD1 in IMUPLUS mode
IMU READING AFTER RESET:
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: 0.0 -0.0 0.3 | Mag XYZ: 0.0 0.0 0.0 | Gyro XYZ: 0.1 0.2 0.0 | Accel XYZ: -0.2 -0.1 10.1 | Temp: 25.0C
Exiting startIMU
pi@ROSbot:~/rosbot-on-gopigo3/imu4gopigo3ros$ ./readIMU -h
Reading the Dexter Industries IMU Sensor
Using mutex-protected, exception-tolerant SW I2C on GoPiGo3 port AD1
Expand the window till this line fits
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
SafeIMUSensor INSTANTIATING ON PORT AD1 OR BUS GPG3_AD1 WITH MUTEX True INIT False (no mode change)
InertialMeasurementUnit INSTANTIATING ON BUS GPG3_AD1 INIT False (no mode change)
BNO055 Instantiating on BUS GPG3_AD1 with ADDRESS 40 using UNITS 0 HW INIT False
Set _mode to: 8
BNO055 Instantiation Complete
InertialMeasurementUnit Instantiation Complete
SafeIMUSensor Instantiation Complete
2021-09-19 13:36:50.627147: Exception Count: 0
Euler Heading: 359.9 Roll: -1.3 Pitch: -0.4 | Linear Acc XYZ: 0.0 -0.0 0.3 | Mag XYZ: 0.0 0.0 0.0 | Gyro XYZ: 0.1 0.1 0.0 | Accel XYZ: -0.2 -0.1 10.1 | Temp: 25.0C
X and Y linear accelerations seem to be stable - but I don’t actually think ROS uses them. That Z acceleration makes it look like Dave is constantly climbing the walls (or maybe he is surfing the gravity waves).
Correct me if I am wrong, but isn’t something like 90% of your problem because Dave is too tall?
A 'bot that tall with respect to its wheel-base would scare me.
At the very grave risk of insulting both you and your robot paradigm, I would seriously consider a “scaled down” version of the 'bot without the handles, character, and anything else that is not absolutely necessary for a working robot. Especially things that raise the center of gravity.
Once you get the 'bot working, you can then worry about all the bells, whistles, flashing lights and dancing bears. (At least that’s how I see it, IMHO.)
I would also consider placing the LIDAR on the bottom layer since the lever moment of the LIDAR’s weight and vibration will be mimized the lower you place it.
Things like the Pi itself, the GoPiGo board and associated sensors can be placed on top of that.
What say ye?
Just thought of something.
You’ll probably need to extend the GoPiGo motor wires. Of course, for an old hand at surface mount rework like you, that should be a cinch!
I didn’t think a handle was that necessary either, but Carl has nearly ripped his scalp off from me lifting him by his safety goggle over the last three years.
I use Dave’s handle several times a day turning him around, putting him up on my desk so I can get at his “guts”, and posing him for the selfies he seems to want every time he gets a new toy.
And the character, well that is necessary … I’m sure - I’m just old enough to have forgotten why.