Posted by Jordi Muñoz on September 11, 2009 at 1:00pm
I have to be honest; i tried to kept this project as a little secret to void people waiting for it, so i have plenty of time to prototype. Not to mention that everything was running very slow because the school and we were moving the business to another location.I would like to give special thanks to Chris Anderson, Nathan Seidle (from SparkFun) and specially to William Premerlani, we've spent a great time together trying to adapt the code into Arduino Environment, a great experience for me (absolutely). Thank you Bill!The ArduIMU V2 is intended to be used for learning and general robotics, also will set the starting point for next incoming IMU based ArduPilot's (at the end of this year) and lot more! The code is based on the very well known Arduino Environment and is Open Source (of course!).The hardware consists on 3 axis accelerometers/gyroscopes, dual power regulator (3.3v and 5v), GPS port, an Atmega328@16mhz and a lot of status LED's.The code uses Direction Cosine Matrix code (By Bill Premerlani) and some other stuff extracted from ArduPilot (developed by me). You can read more about DCM here.The mass production is not clear yet, but the sensors can be purchased now from SparkFun or from our store. For now i will assemble just a few boards (ready to use) and sell them the next week (controller board with sensors) for around 100 bucks, sorry... For around $99 dlls. =) But being honest i will have to increase tiny bit the price to keep the DIYdrones store alive! Moving the business was kinda expensive.About the boards color, i will kindly ask Nate to change the color to blue because I'm unable to match his red (mine is more like orange). All the incoming boards from us will be blue anyway. =)The code will be released next week with the hardware. Please be patient. Thank you!Here is a demo video:
Hey Isobot!! I didn't know who you are!!
How are you?!?! Was a pleasure meeting you too! Well i still have one of your NES buttons, i gave the other one to Nathan (from SparkFun).
First of all, congratulations on a fantastic project.
I have ported the code to my own application (SparkFun 6DOF IMU, Arduino Mega) and its seems to work fantastically. The results are much more pleasing than the crude Kalman filter I was previously using to fuse the gyro and accelerometer data.
During experimentation, I noticed that large longitudinal accelerations affect the pitch angle (the same is true for lateral accelerations and the roll angle). Since the accelerometers are only used to bound the gyro drift, is this normal?
Hi Jordi,
Is it possible to use your ArduIMU just for XY stabilization of camera platform? I mean, just to add two continuous servos (or fast brushless motors) to the ArduIMU and let it stabilize itself? Is ArduIMU enough fast to do that? Can somebody post some video, where we could see how fast servo respond to the mooving of ArduIMU board is?
A silly question, if I do not connect the GPS; will the current firmware still send the data ? . I would like to use the IMU for an inverted pendulum; hence just need Gyro and accelerometer. I worked with ATmegas in C , and never used Arduino, but this is an excellent excuse to play with it. I imagine that it may not be difficult to modify the code to get the GPS out of the picture.
if not you found a good way for a DIY head tracker !!
i guess i'm gonna buy two of those (maybe more) when i'm back home in few month
to do a head tracking device one would just have to generate a 9ch PPM frame to be plugged on the trainer port of your radio
i had a similar project with accelerometers that worked with a PIC16f876 it only worked for pab and tilt but not yaw
i wasn't able to dedrift enaught a Gyro to use it reliablely so i gave up
jordi :..Sorry for the wait, i still have some problems with labview and the conversation between DCM to Euler angles is not working perfectly. I will solve it in the next days!"
I took a quick look through LabView code, but couldn't really test it since I don have IMU board....
or as :
Theta = acos(rmat[8] )
Psi = asin( rmat[5] / sin (Theta))
Phi = asin( rmat[6] / sin (Theta))
where notation of same fields are
Bill P. Jordi
rmat[8] = (2,2)
rmat[5] = (1,2)
rmat[6] = (2,0)
Since I don't have the IMU board I don't know exactly how data is outputted, but rotating cube through 0-180 degrees works fine ( tried in with LV code with simulated input - will be glad to share it if needed) . For more then 180 deg you have to take into account that
Phi goes from -pi to pi
Theta 0 to pi
Psi -pi to pi
(in standard Cartesian coord. system)
(or DCM code might account for it so there is no need to for this...).
Also, you might be doing double negative on theta but I am not sure if that was your intend or not...
I don't think that you need to make copies (local variable) for matrix elements / angles used to rotate cube, as you can run "wire" from original calculations
Comments
How are you?!?! Was a pleasure meeting you too! Well i still have one of your NES buttons, i gave the other one to Nathan (from SparkFun).
I have ordered mine yesterday.
Do I need to purchase FTDI Basic to connect this module to my PC ?
Thanks
Clt.
First of all, congratulations on a fantastic project.
I have ported the code to my own application (SparkFun 6DOF IMU, Arduino Mega) and its seems to work fantastically. The results are much more pleasing than the crude Kalman filter I was previously using to fuse the gyro and accelerometer data.
During experimentation, I noticed that large longitudinal accelerations affect the pitch angle (the same is true for lateral accelerations and the roll angle). Since the accelerometers are only used to bound the gyro drift, is this normal?
Thanks
Dan
dan.wilson00@gmail.com
Is it possible to use your ArduIMU just for XY stabilization of camera platform? I mean, just to add two continuous servos (or fast brushless motors) to the ArduIMU and let it stabilize itself? Is ArduIMU enough fast to do that? Can somebody post some video, where we could see how fast servo respond to the mooving of ArduIMU board is?
Thank you
Stanley
guzak@azet.sk
A silly question, if I do not connect the GPS; will the current firmware still send the data ? . I would like to use the IMU for an inverted pendulum; hence just need Gyro and accelerometer. I worked with ATmegas in C , and never used Arduino, but this is an excellent excuse to play with it. I imagine that it may not be difficult to modify the code to get the GPS out of the picture.
Thanks in advance,
Jose
is there any drift at all?
if not you found a good way for a DIY head tracker !!
i guess i'm gonna buy two of those (maybe more) when i'm back home in few month
to do a head tracking device one would just have to generate a 9ch PPM frame to be plugged on the trainer port of your radio
i had a similar project with accelerometers that worked with a PIC16f876 it only worked for pab and tilt but not yaw
i wasn't able to dedrift enaught a Gyro to use it reliablely so i gave up
your IMU is the real solution !!
good job
I took a quick look through LabView code, but couldn't really test it since I don have IMU board....
looks like there is something funny with conversion to Euler angles. Try calculating them as Luis (?) pointed out in this thread:
http://diydrones.com/forum/topics/robust-estimator-of-the?id=705844...
or as :
Theta = acos(rmat[8] )
Psi = asin( rmat[5] / sin (Theta))
Phi = asin( rmat[6] / sin (Theta))
where notation of same fields are
Bill P. Jordi
rmat[8] = (2,2)
rmat[5] = (1,2)
rmat[6] = (2,0)
Since I don't have the IMU board I don't know exactly how data is outputted, but rotating cube through 0-180 degrees works fine ( tried in with LV code with simulated input - will be glad to share it if needed) . For more then 180 deg you have to take into account that
Phi goes from -pi to pi
Theta 0 to pi
Psi -pi to pi
(in standard Cartesian coord. system)
(or DCM code might account for it so there is no need to for this...).
Also, you might be doing double negative on theta but I am not sure if that was your intend or not...
I don't think that you need to make copies (local variable) for matrix elements / angles used to rotate cube, as you can run "wire" from original calculations