A place to document your own projects. IMU

Postby tinito » Tue Sep 13, 2011 1:00 pm

Hi all,

this is a project in early stage, I've just finished the board design, it still needs to be manufactured, but I wanted to share it from the beginning to learn how to work in an open source community and to collect feedbacks and suggestion to improve the project.

Eagle files are published at github:

This board is an IMU module supposed to work in a open source framework, built on a CAN bus network, to simplify and speed up robot prototyping. Other "smart" modules (a motor controller board with speed and position feedback, a smart camera, a sonar board, a mice sensor based odometry board, a generic analog/digital I/O board, and so on) will developed. They are "smart" meaning that they are supposed to make the most computation onboard (e.g., sensor filtering to get pose and heading) publishing ready-to-use data on the CAN bus network by a real-time enabled protocol (under heavy development).

The IMU is supposed to be high-end, implementing state-of-the-art data filtering, best low-cost MEMS sensors available and many features to compete with commercial IMUs used in robotics at a fraction of the price - and with the advantages introduced by the framework.

The modules can also used outside our framework, as it can interface by a TTL UART interface too.

As said, the project is in a very early stage, as well has this board. Please give any feedback/comment/suggestion, from hardware and design hints to language correction, they are all welcome!


Post Scriptum:
- will be the place where the overall framework will be published, open source from the middleware and firmware code to hardware design, but up to now it is only a placeholder - in some months I hope it will be online.
- this is my PhD thesis, so delays and interruption due to other activities (teaching, side projects, deadline pursuing...) are alternated with high-productivity periods ;)
- here I attach the markdown README that is shown on github with some (little) details about the board, ask whatever you want to know!


This is an IMU module featuring a MEMS gyro, a MEMS accelerometer and an optional magnetometer sensor.
The IMU module is supposed to work together with other smart modules, publishing data on CAN bus using a publish/subscriber QoS enabled middleware (in development).
The overall system should provide the devices and functionalities commonly used in robot prototyping, speeding up the development process and reducing the engeenering time, leaving more time to research activities. The system is supposed also to enable students and amateurs to easily build robots without advanced hardware knowledge.

### Hardware

The IMU module is run by a STM32 ARM Cortex-M3 microcontroller, that takes care of reading sensors data, filtering them to extract accurate pose and attitude measurements, and then publishing the needed data on a CAN bus network and, optionally, on a TTL UART interface.

Inertial data in gathered from three sensors:
- a ST LIS3DH 16-bit digital accelerometer
- a ST L3G4200D 16-bit digital gyroscope
- an optional LSM303DLHC 16 bit accelerometer and magnetometer

The magnetometer sensor is in "preview" status at the time of writing, thus we decided to include its footprint on the board to exploit it when it will available.

The accelerometer and the gyroscope communicates with the microcontroller by SPI, while the accelerometer and magnetometer sensor relies on I2C bus.

Modules are connected together by a single cable, that transports CAN signals as while as 5V power. Each module as two ports, enabling chain connections.

A double connector footprint (RJ45 + pin header) is provided, so the user can choose which cabling fits better his needs:
- RJ45 has been chosen as it provides shielded twisted wires for 1Mbit CAN networking in harsh environments and cables are easy to find.
- pin header has been chosen to give also an space saving and simple connection when modules are closed placed and RJ45 jack/plug pairing space is a problem. This header also enables using the IMU module outside our framework, interfacing with it through a simple TTL UART interface.

The four status LEDs are placed under RJ45 plug light pipes entrance, so it is only needed to solder the preferred connector without other layout changes.

The left connector has the option to connect to the CAN bus or to expose the TTL UART interface by a solder jumper placed on the bottom of the board.

### Firmware

...under development
User avatar
Posts: 34
Joined: Mon Feb 07, 2011 9:13 am


Postby ian » Wed Sep 21, 2011 10:30 pm

Very nice. I want to see the final board, that's a lot of SMD parts :) How do you plan to assemble it?
User avatar
Posts: 10803
Joined: Mon Jul 06, 2009 6:14 am


Postby tinito » Thu Sep 22, 2011 3:03 am

Hi Ian,

at this stage, we assemble it by solder paste and hot air (I have a cheap chinese rework station), the difficult part is to place solder paste as we don't have stencils or good dispensers, but then it is really easy to get the whole thing assembled.

If I'll find a good camera I can plan to take a movie (or a stop motion movie) of the assemble process as you did before, I love that kind of documentation!

One day, I'd like to need much more of them, so I'm looking at Seeed's services.

I'm designing two other boards (a motor board - that is complete, I'll post it here) and a generic I/O board (analog inputs, DAC outputs, GPIO/SPI/I2C/PWM digital I/O) that can be used to interface with existing hardware making them accessible by the CAN network. It is a sort of networked bus pirate ;)

Then I'll send all of them to Itead, so I hope I'll have a picture of the assembled boards in one month!
User avatar
Posts: 34
Joined: Mon Feb 07, 2011 9:13 am

Return to Project logs