Pages: 1 ... 22 23 [24] 25 26 ... 37   Go Down
Author Topic: Guide to gyro and accelerometer with Arduino including Kalman filtering  (Read 304527 times)
0 Members and 2 Guests are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Lauszus

Thanks for the reply!

And offcourse for the samples.

I''ll be using some pretty strong servos which i'll be using inside brackets to hold the force and weight.

Thanks,

Niels
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, Sparkfun doesn't sell https://www.sparkfun.com/products/10010? any more.
it's been replaced by https://www.sparkfun.com/products/10121?.

is your code compatible with the new product ? if yes what modifications should I make .
Thank you
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Take a look at this code: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter/tree/master/IMU6DOF/ITG3205_ADXL345, it's for a ITG3205 and a ADXL345. I know the gyro is a bit different, but it should work just fine with your as well.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Lauszus, Thanks so much for this great blog. I need ur help with something. I'm using itg 3200 and bma 180, I applied your code and it works fine but when rotating around roll for exaple with 90 degrees, the output reading is 70 and the same for pitch although before that, i was applying a comp filter (explained by starlino) and it was giving an output of 90 when rotating with 90 degrees. Do you have any idea what might be causing that?
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@totyforever
Try this code I wrote: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter/blob/master/IMU6DOF/ITG3205_ADXL345/ITG3205_ADXL345.ino and tell me if that works.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Man, you are great smiley , the problem was in this function:-
 R = sqrt(pow(accXval,2)+pow(accYval,2)+pow(accZval,2));
 accXangle = acos(accXval/R)*RAD_TO_DEG-90;
 accYangle = acos(accYval/R)*RAD_TO_DEG-90;

I think it's not accurate or something as I was applying it in my old code and instead of (accXval/R), it was (Rxest/R) where Rxest is calculated using both acc and gyro readings. However, after I changed it with the one u sent me in the previous post, it worked so fine. Thank you so much.
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@totyforever
Nice. You welcome smiley
atan2 will also give you 360 degrees resolution!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yup I noticed that smiley, but shouldn't I use the acc sensitivity in this function and for the Y angle as well :
double getXangle() {
 double accXval = Accx-zeroValue[0];
 double accZval = Accz-zeroValue[2];
 double angle = (atan2(accXval,accZval))*RAD_TO_DEG;
 return angle;

I mean would be like this: (4095 = sens in 2g range)

double getXangle() {
  double accXval = (Accx-zeroValue[0])/4095;
  double accZval = (Accz-zeroValue[2])/4095;
  double angle = (atan2(accXval,accZval))*RAD_TO_DEG;
  return angle;
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

It does not make any difference.

For instance take a look at this picture: http://upload.wikimedia.org/wikipedia/commons/7/7e/Trigonometry_triangle.svg
You can get the angle using atan(a/b).

For instance if a=100 and b=500, then the angle would be:
atan(100/500)=11.31deg
Then if you divide both of them with the same constant (this could be the sensitivity) lets say it's 100. Then a=100/100=1 and b=500/100=5, so:
atan(1/5)=11.31deg

atan2 is used to get 360 resolution and is dealt within the function. See this wiki page: http://en.wikipedia.org/wiki/Atan2#Definition
« Last Edit: October 24, 2012, 12:15:53 pm by Lauszus » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yes got it smiley Thanks Lauszus a lot for ur efforts, wish u all the best
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@totyforever
Your welcome and you too smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi mate, I've seen you videos on Youtube and thats how I've got here!

I need a 2 axis gyro and 2 axis accelerometer for what I need, wich board do you suggest?

Thanks!
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@lparisi

One of the most popular at the moment is the MPU-6050 from InvenSense: http://www.invensense.com/mems/gyro/mpu6050.html. I got a one as well and the performance is pretty good and you can also do a lot of advances stuff with it.
There is a breakout board available form Sparkfun: https://www.sparkfun.com/products/11028 and a lot of other places like ebay.

Here is a basic example sketch I wrote: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter/tree/master/IMU6DOF/MPU6050

If you need to work with the onboard DMP, I recommend the following library: https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050




Logged

Memphis, TN
Offline Offline
Newbie
*
Karma: 0
Posts: 38
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

What is the Arduino that you used for this project and do you think that there would any problems with coding the gyro/accelerometer module that you used for a Nano v3.0?
Logged

Denmark
Offline Offline
Sr. Member
****
Karma: 10
Posts: 287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Swoop132
I originally used a Duemilanove, but I have since used the same code for Arduino Uno, Mega etc.
You can use it with a Nano just fine.
Logged

Pages: 1 ... 22 23 [24] 25 26 ... 37   Go Up
Jump to: