IMU on board?

I did see some information in the library reference about an IMU module on the board. But I do not see it in the hardware description.
So is there an IMU available on the board?

No, not on the current systems. However, we will have new cameras soon that make the IMU standard.

That is interesting.
What is soon?

There should be multiple boards coming out this year with an IMU onboard. We plan to make it a standard feature mounted behind the camera. I don’t have a timeline when each board will hit.

Is there a shield available with this IMU? I do not see it in the product list, but maybe you know of a third party one?
If not, we could make our own (for instance using the prototype shield). Is it the LSM6DS3 IMU that will be used?
I see IMU functions in the SDK. Does that mean when adding our own LSM6DS3, it is already supported in the SDK? If not, can it be made available?

Hi, there’s an IMU driver and shield sold by SingTown:

Then the driver is already compiled into our flash:

That driver is not built-in by default for all boards, you’ll need to copy the module to the SD card or flash storage.

What’s the latest on the imu and the imu drivers? I want an Imu. I can buy an external one if these are obsolete.

We’re designing a Pro board with an IMU onboard along with other features.

Will this onboard IMU use magnetometers, gyros and accels? Is there a filter to blend them into a good solution? Which IMU part number are you adding under the camera?

I bought a BNO055 that performs the Kalman filter with all 9 axes. I tried to read it with the H7 R1 but I am having issues

attempt 1:

from machine import I2C
from bno055 import BNO055, AXIS_P7
i2c = I2C(4)
imu = BNO055(i2c)

#This attempt reset my UART connection to the OpenMV IDE

attempt2:

from lsm9ds1 import LSM9DS1
from machine import Pin, I2C
lsm = LSM9DS1(I2C(4, scl=Pin(7), sda=Pin(8)))
# this attempt does not work.

Attempt 3:

imu_interface = rpc.rpc_i2c_slave(slave_addr=0x12)

#this attempt forces me to use I2C2 (not 4 which I am using)

Do you have any suggestions?

Use I2C(2).

As for the IMU, it’s just going to be an st lsm6d type.

How can we integrate the lsm6d states if our camera frame rate is at 12 fps? We will need to have at least 100Hz worth of sensor data to integrate the states. Even if we create a new thread, the one core processor will struggle to serve each thread. What do you see us using this lsm6d sensor for? I guess we could use the accel to see which way is up.

The frame capture is now in an interrupt thread. Use a timer interrupt to do I2C bus actions to interrupt the main thread. Use the micropython schedule method.

I.e. Interrupt on Timer → Micropython Schedule → I2C for IMU data.

This happens while your main thread runs on camera data.

If I connect a LSM6DS3 to i2c (or spi?) on an openmv rt1062, can I use this api imu — imu sensor — MicroPython 1.25 documentation to read it? Thank you

No, that’s for the internal IMU on boards. It’s not been enabled yet but will be enabled for the AE3 and N6.

For an external IMU there are plenty of pure python drivers you can use.

2 Likes

thank you for replying