FXIMU Sensor for ROS - Open Source Project

Greetings;

We made an open source imu sensor for ros, that utilizes FXOS8700 and FXAS21002 sensors from NXP semiconductors, coupled with a Texas Instruments TM4C123GH6PM Arm Cortex based MCU.

The set of sensors from the NXP semiconductors is said to have 100 times better noise characteristics, then what is available on the market.

We have ported ROS’s imu_complementary_filter code to run on the TM4C123GH6PM platform, to achieve:

  • Up to 400Hz read of acceletometer, magnetometer and gyro sensors
  • Up to 400Hz update of the complementary filter
  • Output is published at /imu/data and /imu/mag as sensor_msgs/Imu and sensor_msg/MagneticField message types, and output rate is determined by output_rate_divider parameter
  • Hard iron and soft iron correction
  • Everything is configurable by rosparams, from hard iron soft iron calibration to sensor_read rate, output_rate_divider, to gyro and accel sensor parameters, and all the parameters in imu_complementary_filter. (with the exception of tf) See: fximu_params.yaml
  • Green led is on when at steady state
  • It requires no serial driver, and uses no serial ftdi, but rather emulates a virtual serial port as a usb hid device, provided with the TM4C123
  • It has an expansion port that can be used as serial, or analog input, or gpio. PA0 to PA7 on TM4C123GH6PM
  • It costs 20USD to build in components, and is open source.

Since the complementary filter is running at an embedded level, there is nearly no latency. It attaches directly and powered by USB port.

Calibration is done by putting the unit in calibration mode using the params file, and running a set of scripts provided, the ros publisher is turned into normal serial data forwareded to another virtual serial port using the program socat. So once the values are forwarded to virtual serial port in ASCII format, one can use off the shelf calibration utilities, such as Paul Stoffregen’s MotionCal. Basically you can calibrate your sensor, without taking it off from the robot, or updating firmware,

We are working on a V2 of the board, that includes cosmetic and ergonomic changes, and the addition of a i2c port.

It runs extremely well, and has more space for development. I built it for a robot I was building, then noticed it could be useful to others, so decided to develop this as a seperate project. Because the filter is fed at 400hz after being read from i2c, it offers nearly zero latency.

I have worked with various IMUs (I will not name them here.), including ones that include on-board digital motion processors, and the results we are getting are much better than what is available on the market that is the same class of device.

Souirce code available at https://github.com/altineller/fximu2

Prior version source code available at https://github.com/altineller/fximu and https://github.com/altineller/fximu_client

All are welcome to parrallel develop this project, and I provide circuit boards for people who can solder SMD components, along with montage diagrams and BOM. Right now github does not contain schematics nor gerbers, but just because I am building a new version with slight improvements.

We are also asking for the help of ROS community to further develop and maybe fund this project so we can have them produced in SeedStudio or allike manufacturing house.

People who like to replicate results are also welcome and will be helped.

Best Regards,
Can Altineller

3 Likes

Hello Can,

I follow your IMU project on different platforms. I would be happy to learn more, especially how to get to such a board or how to create one.
You say that there are no schematics and gerber-files on Git, because you are working on a new design …

Is it possible to get the “old” design? I would then check to see if I can etch myself a pcb.

Best regards,
Thomas

This is fantastic. Just to clarify this IMU supports ROS 1, ROS 2, both? It isn’t immediately apparent in the read me?

I am really curious about what sort of help you would need to produce these boards and what sort of quantity you would like to produce them at? Is the $20 price a retail price or production price at low quantity? Do you plan to make the boards open hardware, not just open source?

This is currently ROS1, but I would love to port it to ROS2 as well, with the help of the community.

20$ is just for parts, at low quantity, i.e. 1 by 1. If produced by the 1000’s, I would say it would cost 12-15USD.

I plan to make everything opensource, both hardware and software, and I plan to make and sell the boards myself, and looking for collaborators to maybe pay for production costs at a pcb production house.

But of course, first some other people need to verify my work and see if it is actually useful.

Best regards,
Can

Hello @derkaputte

Per your request, I am posting them right now.

Best regards,
Can

the hardware files are at https://github.com/altineller/fximu_hardware/

1 Like

This is outstanding. How does it compare to the BNO085?

Indeed, the BNO055 is very robust against magnetic interference. I wonder if anyone knows the algorithm behind that.

I tested a BNO055 once. It has drift problem, fximu does not. precision is higher for the chipset I am using.

Also you can not modify the digital motion processing on the BNO055.

mpu9150 and bno055 was two chipsets that I was disappointed with the DMP, my original plan was to use a bno055, and dont do a lot of processing in my main loop - the bno055 did not work out for me, so I developed a board with a seperate processor, which I could do the filtering myself.

In this filter, roll and pitch are not affected by magnetic interference, and it has magnetic interference rejection according to video in http://wiki.ros.org/imu_complementary_filter?distro=melodic

I however tested this and found out it is not exactly the same as the video in the original code.

Setting the mag gain low, protects againist magnetic interference, but not we have the filter code opensourced, we can maybe work on this all together, and make the magnetic interference rejection better.