GPS integration
Re: GPS integration
Okay,
To test out UBlox Vs MTK I've ordered a NEO-6M module from RCTimer and AT328 I2C board to test in place of my MTK based Navigatron, do I need to re-flash the UBlox?
Is there a guide to which firmware / settings we need, obviously I understand that I2c is on hold ATM while 2.1 is finished, but will the I2C sketch need much modification to work with the binary protocol?
http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=763&productname=
http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=762&productname=
To test out UBlox Vs MTK I've ordered a NEO-6M module from RCTimer and AT328 I2C board to test in place of my MTK based Navigatron, do I need to re-flash the UBlox?
Is there a guide to which firmware / settings we need, obviously I understand that I2c is on hold ATM while 2.1 is finished, but will the I2C sketch need much modification to work with the binary protocol?
http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=763&productname=
http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=762&productname=
Re: uBlox binary protocol....
EOSBandi wrote:So I had a very little time for test it, because a quite heavy storm hit my flying place. BUT i had some results.
First, here is a small video....
http://www.youtube.com/watch?v=Uo_v6tBXqNU
....
Very Cool !
Re: GPS integration
Ublox neo modules are not reflashable, but they not need it at all....
You need the u-center software to config the u-blox module.
Here is a settings file for NMEA. You can download it to your module with the tools->GPS configuration menu...
Once the binary protocol parser is committed to Multiwii i'll update the i2c sw too.
One more issue : I found that the onboard battery of these ebay ublox modules are hardly last more than a couple of days... and since the neo-6M does not have flash onboard, then it forgets the settings. So it's worth do buy an i2c EEPROM chip (about .5usd a piece) (Microchip 24AA32A, or ST MC24C32-R) and connect it to the i2c port of the gps (some boards already has i2c port connection, or you can solder it directly to the module). (I'll update the GPS docs about ublox, including the external i2c storage).
I there is interest, i'll make breakout boards with i2c eeprom chips.
You need the u-center software to config the u-blox module.
Here is a settings file for NMEA. You can download it to your module with the tools->GPS configuration menu...
Once the binary protocol parser is committed to Multiwii i'll update the i2c sw too.
One more issue : I found that the onboard battery of these ebay ublox modules are hardly last more than a couple of days... and since the neo-6M does not have flash onboard, then it forgets the settings. So it's worth do buy an i2c EEPROM chip (about .5usd a piece) (Microchip 24AA32A, or ST MC24C32-R) and connect it to the i2c port of the gps (some boards already has i2c port connection, or you can solder it directly to the module). (I'll update the GPS docs about ublox, including the external i2c storage).
I there is interest, i'll make breakout boards with i2c eeprom chips.
- Attachments
-
- u-blox-config.nmea.zip
- U-blox neo-6 config for NMEA (115200 baud, 10Hz, European SBAS)
- (859 Bytes) Downloaded 694 times
Re: GPS integration
Excellent EOS
Also you shoudl take a snapshot of 1:03 - has to be one of the best Tricopter pictures ever!
Also you shoudl take a snapshot of 1:03 - has to be one of the best Tricopter pictures ever!
Re: GPS integration
shikra wrote:Excellent EOS
Also you shoudl take a snapshot of 1:03 - has to be one of the best Tricopter pictures ever!
Already did that
BUT GUYS !!! I'v been chasing storms for photograpy in the last 15 years, I checked the doppler radar info and lightning tracking on the field continously....
Please do not try this unless you know your location and the distance of the storm. Beeing on the field in a storm easily could be lethal !!!!
Re: GPS integration
EOSBandi wrote:Ublox neo modules are not reflashable, but they not need it at all....
You need the u-center software to config the u-blox module.
Here is a settings file for NMEA. You can download it to your module with the tools->GPS configuration menu...
Once the binary protocol parser is committed to Multiwii i'll update the i2c sw too.
One more issue : I found that the onboard battery of these ebay ublox modules are hardly last more than a couple of days... and since the neo-6M does not have flash onboard, then it forgets the settings. So it's worth do buy an i2c EEPROM chip (about .5usd a piece) (Microchip 24AA32A, or ST MC24C32-R) and connect it to the i2c port of the gps (some boards already has i2c port connection, or you can solder it directly to the module). (I'll update the GPS docs about ublox, including the external i2c storage).
I there is interest, i'll make breakout boards with i2c eeprom chips.
Thanks Eos,
Just thinking though, If you are using an I2C AT328 adapter board, can't you store the Ublox settings on that or force the settings at start up somehow?
-
- Posts: 4
- Joined: Sat Jun 23, 2012 9:05 pm
Re: GPS integration
brettwal wrote:EOSBandi wrote:brettwal wrote:I am a bit confused on something, perhaps someone can assist.
I have a Crius SE with a Serial GPS module and it is working fine. I purchased a Crius V1.0 (with the I2C pins) and the I2C GPS Navigation module from RCTimer. (http://rctimer.com/index.php?gOo=goods_ ... oductname=). Do I have to load a sketch on to the AT328 on the module? or is this not necessary? I think YES but, find it odd that there are no pins for FTDI on RCTimer board.
Take a closer look. The place for pins is there, even labeled as FTDI, just solder in some pins....
I added pins. Am using Arduino 1.01. When I replace twi.h and twi.c with the patched files, I get compile errors.
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\utility/twi.h: In member function 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint8_t)':
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\utility/twi.h:43: error: too many arguments to function 'uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t)'
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\Wire.cpp:85: error: at this point in file
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\utility/twi.h: In member function 'uint8_t TwoWire::endTransmission(uint8_t)':
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\utility/twi.h:44: error: too many arguments to function 'uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t)'
C:\Users\bwalker\Desktop\MWC Quad\arduino-1.0.1\libraries\Wire\Wire.cpp:140: error: at this point in file
NEVERMIND, Found the note in an old post about using Arduino 1.0
I had same problems! Can you show me how did you compile?
Thanks in advance!
- jevermeister
- Posts: 708
- Joined: Wed Jul 20, 2011 8:56 am
- Contact:
Re: GPS integration
Andras,
as stated by you and as experienced by me:
If you hold the copter while it tries to return home it will become more and more aggressive because it wants to speed up.
Because of the bad thunderstorms tonight I haven't got the time to test (thanks for your PM - I suspected the mag too.)
Imagenina the following situation:
The copter is returning home and there is a tree or a wall or something and I will do a stick input to save the day-
Will the copter fight this input the same way it fights me holding it?
If so, we should consider pausing RTH while stick input is done (same way Alex suspends Baro and MAG)
Nils
as stated by you and as experienced by me:
If you hold the copter while it tries to return home it will become more and more aggressive because it wants to speed up.
Because of the bad thunderstorms tonight I haven't got the time to test (thanks for your PM - I suspected the mag too.)
Imagenina the following situation:
The copter is returning home and there is a tree or a wall or something and I will do a stick input to save the day-
Will the copter fight this input the same way it fights me holding it?
If so, we should consider pausing RTH while stick input is done (same way Alex suspends Baro and MAG)
Nils
Re: GPS integration
EOSBandi wrote:One more issue : I found that the onboard battery of these ebay ublox modules are hardly last more than a couple of days... and since the neo-6M does not have flash onboard, then it forgets the settings.
I've read that you have to charge the onboard battery for about 24 hours. I did so by applying 5 volts to the module via the FTDI connected to my computer. Not sure how long it will keep the settings but it's been two days an counting.
- mOuchadino
- Posts: 15
- Joined: Sat Jul 07, 2012 3:51 am
Re: GPS integration
asked permission to read around .....
Re: GPS integration
Hi EOSbandi,
I see the more accurate GPS position should be used bigger external ceramic GPS and using additional DIY antenna like this :
http://autoquad.org/wiki/wiki/autoquad- ... oundplane/
Also
Do we need to do this kind of calibration to get more accurate magnetometer ?
http://autoquad.org/wiki/wiki/autoquad- ... libration/
Have you tried this ?
I hope with the latest firmware and above process will have very accurate GPS position like this :
http://diydrones.com/profiles/blogs/aut ... 6#comments
Thanks,
John
I see the more accurate GPS position should be used bigger external ceramic GPS and using additional DIY antenna like this :
http://autoquad.org/wiki/wiki/autoquad- ... oundplane/
Also
Do we need to do this kind of calibration to get more accurate magnetometer ?
http://autoquad.org/wiki/wiki/autoquad- ... libration/
Have you tried this ?
I hope with the latest firmware and above process will have very accurate GPS position like this :
http://diydrones.com/profiles/blogs/aut ... 6#comments
Thanks,
John
Re: GPS integration
Use Arduino 1.0 w/ patches, not 1.01
NEVERMIND, Found the note in an old post about using Arduino 1.0[/quote]
I had same problems! Can you show me how did you compile?
Thanks in advance![/quote]
NEVERMIND, Found the note in an old post about using Arduino 1.0[/quote]
I had same problems! Can you show me how did you compile?
Thanks in advance![/quote]
Re: GPS integration
flyrobot wrote:Hi EOSbandi,
I see the more accurate GPS position should be used bigger external ceramic GPS and using additional DIY antenna like this :
http://autoquad.org/wiki/wiki/autoquad- ... oundplane/
Yes, I already wrote this earlier, it is recommended to have at least a 25mmx25mm patch antenna. (You can easily get it from a cheap external gps antenna)
flyrobot wrote:Do we need to do this kind of calibration to get more accurate magnetometer ?
http://autoquad.org/wiki/wiki/autoquad- ... libration/
Have you tried this ?
I think this is overkill. the standard dance with noise pointing north and down to 45deg is adequate.
flyrobot wrote:I hope with the latest firmware and above process will have very accurate GPS position like this :
http://diydrones.com/profiles/blogs/aut ... 6#comments
Nope,
Autoquad LEA-6T module to record RAW GPS data and anaylise it after the flight on the ground station. Doing RTK on the fly will requires a Linux based extremly powerfull flight controller
What is expected is someting 2x2m or a little more better....
Re: GPS integration
jevermeister wrote:Andras,
as stated by you and as experienced by me:
If you hold the copter while it tries to return home it will become more and more aggressive because it wants to speed up.
Because of the bad thunderstorms tonight I haven't got the time to test (thanks for your PM - I suspected the mag too.)
Imagenina the following situation:
The copter is returning home and there is a tree or a wall or something and I will do a stick input to save the day-
Will the copter fight this input the same way it fights me holding it?
If so, we should consider pausing RTH while stick input is done (same way Alex suspends Baro and MAG)
Nils
Yes, it is on the list but I think it will be after 2.1 since it's not a simple change and needs significant amount of testing....
Re: GPS integration
I just had an idea for the RESET of home position.
Why not using the same switch as the switch for RTH activation but only when motors are not armed :
Why not using the same switch as the switch for RTH activation but only when motors are not armed :
Code: Select all
if (rcOptions[BOXGPSHOME]) && !armed)
{
GPS_reset_home_position();
}
- jevermeister
- Posts: 708
- Joined: Wed Jul 20, 2011 8:56 am
- Contact:
Re: GPS integration
Bledi wrote:I just had an idea for the RESET of home position.
Why not using the same switch as the switch for RTH activation but only when motors are not armed :Code: Select all
if (rcOptions[BOXGPSHOME]) && !armed)
{
GPS_reset_home_position();
}
I think the gyro init is good enough.and it is a trigger not a switch.
Re: GPS integration
the problem is not to be good enough, but it's not natural to make a gyro init to reset home position, isn't it ?
Re: GPS integration
I allways calibrate gyros on launchPoint after connecting the battery.
Because i dont like to fly with gyros who is not correct init..
I have tested it and its not healty...
Because i dont like to fly with gyros who is not correct init..
I have tested it and its not healty...
Re: GPS integration
EOSBandi wrote:Nope,
Autoquad LEA-6T module to record RAW GPS data and anaylise it after the flight on the ground station. Doing RTK on the fly will requires a Linux based extremly powerfull flight controller
What is expected is someting 2x2m or a little more better....
Thanks for the explanation. Im going to try using my spare MKGPS 2.1 using GPS shield (i have to DIY it), its using LEA 6S.
Will it work ? I will try to compare it with my FMP04.
Re: GPS integration
EOSBandi wrote:flyrobot wrote:Hi EOSbandi,
I see the more accurate GPS position should be used bigger external ceramic GPS and using additional DIY antenna like this :
http://autoquad.org/wiki/wiki/autoquad- ... oundplane/
Yes, I already wrote this earlier, it is recommended to have at least a 25mmx25mm patch antenna. (You can easily get it from a cheap external gps antenna)
I know you have mentioned it, What i meant is GPS shield. Made from plain PCB and it was soldered around the external ceramic gps. Its recommend by MK to use GPS shield to increase GPS signal reception.
Anyone have try it? How was the result?
Re: GPS integration
EosBandi ,
News about the UBX Parser ?
cant wait to test it
News about the UBX Parser ?
cant wait to test it
Re: GPS integration
LuFa wrote:EosBandi ,
News about the UBX Parser ?
cant wait to test it
Stay tuned, i'll flight test it again tomorrow morning... (testing during the day is impossible due the 40+ degree heat...
Menawhile also coded parser for the MTK 1.6 Binary protocol (ala ArduCopter)....
Re: GPS integration
flyrobot wrote:EOSBandi wrote:flyrobot wrote:Hi EOSbandi,
I see the more accurate GPS position should be used bigger external ceramic GPS and using additional DIY antenna like this :
http://autoquad.org/wiki/wiki/autoquad- ... oundplane/
Yes, I already wrote this earlier, it is recommended to have at least a 25mmx25mm patch antenna. (You can easily get it from a cheap external gps antenna)
I know you have mentioned it, What i meant is GPS shield. Made from plain PCB and it was soldered around the external ceramic gps. Its recommend by MK to use GPS shield to increase GPS signal reception.
Anyone have try it? How was the result?
Well it's not a shiled but rather an enlarged ground plane...
Theoretically a bigger ground plane means bigger gain for the antenna. However, increasing the size of the ground plane will shift the center frequency of the GPS antenna. And a smaller patch antenna has a smaller bandwith which means that a shifted center frequency puts the 1.5754Ghz GPS frequency outside of the usable reception range of the antenna.
Bigger patches (25x25 or 35x35) has bigger bandwith so you can use bigger ground planes... for a small patch antenna a bigger ground plane is worst than a no groundplane.
-
- Posts: 9
- Joined: Sat Mar 19, 2011 2:05 pm
Re: GPS integration
EOSbandi,
I made an I2C GPS BOB and have a problem attaching to a MiniWii with BMA180, it works on another MiniWii with MPU6050. The GPS feature is working but the ACCEL is locked and does not work as long as the I2C GPS is attached with the BMA180 unit.
I tried modifying the GPS_NAV code, #define I2C_NAV_FLAG_LOW_SPEED_D_FILTER 0x40 register to 0x42, but it did not make a difference. I believe the BMA180 address is set to 0x40 as default.
Any ideas where else to try to make a change?
I made an I2C GPS BOB and have a problem attaching to a MiniWii with BMA180, it works on another MiniWii with MPU6050. The GPS feature is working but the ACCEL is locked and does not work as long as the I2C GPS is attached with the BMA180 unit.
I tried modifying the GPS_NAV code, #define I2C_NAV_FLAG_LOW_SPEED_D_FILTER 0x40 register to 0x42, but it did not make a difference. I believe the BMA180 address is set to 0x40 as default.
Any ideas where else to try to make a change?
Re: GPS integration
EOSBandi wrote:Well it's not a shiled but rather an enlarged ground plane...
Theoretically a bigger ground plane means bigger gain for the antenna. However, increasing the size of the ground plane will shift the center frequency of the GPS antenna. And a smaller patch antenna has a smaller bandwith which means that a shifted center frequency puts the 1.5754Ghz GPS frequency outside of the usable reception range of the antenna.
Bigger patches (25x25 or 35x35) has bigger bandwith so you can use bigger ground planes... for a small patch antenna a bigger ground plane is worst than a no groundplane.
Hi EOSBandi,
Thank you, its very usefull information. Make me understand. Now i know what GPS HW to use.
John
-
- Posts: 506
- Joined: Thu May 05, 2011 8:13 am
- Location: Slovenia
Re: GPS integration
Hello
I'm trying to get GLB's Rabbit GPS module to work (http://www.goodluckbuy.com/rabbit-gps-r ... oller.html).
But it always resets its settings to 9600 and 1Hz, in less than a minute after disconnecting it from power source. I have charged the battery for 24h (as somebody suggested couple posts back) and no change.
So will it be possible to send init string from flight controller to set those parameters or is there any other solution?
Andrej
Edit: Maybe I'm doing something wrong, because the battery shows 2.38V after charging and 2.4V while charging... and GPS forgets its settings in an instant?!
I'm trying to get GLB's Rabbit GPS module to work (http://www.goodluckbuy.com/rabbit-gps-r ... oller.html).
But it always resets its settings to 9600 and 1Hz, in less than a minute after disconnecting it from power source. I have charged the battery for 24h (as somebody suggested couple posts back) and no change.
So will it be possible to send init string from flight controller to set those parameters or is there any other solution?
Andrej
Edit: Maybe I'm doing something wrong, because the battery shows 2.38V after charging and 2.4V while charging... and GPS forgets its settings in an instant?!
Re: GPS integration
I set in I2C_GPS_NAV.ino for MediaTek:
I do not know whether this is really true, but this works OK.
Sorry for my bad english...
Code: Select all
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup
//
void setup() {
uint8_t i;
// GPS setup
Serial.begin(9600);
delay(2000);
Serial.println("$PMTK251,115200*1F"); //speed 115200
delay(1000);
Serial.begin(115200);
Serial.println("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"); // CGA, RMC, GSA
Serial.println("$PMTK220,100*2F"); // 10 Hz
I do not know whether this is really true, but this works OK.
Sorry for my bad english...
-
- Posts: 4
- Joined: Sat Jun 23, 2012 9:05 pm
Re: GPS integration
Hello
i have problems while i am trying to compile r33 code.I am not familiar with arduino coding.I've made the extra steps needed to get the code compiled in the arduino IDE. I have copied the libraries that are in the Arduino-PID-libs folder (PI and PID controllers)and pasted them into the libraries folder in arduino folder.
I'm planning to use i2c_gps(MTK3339 from Adafruit). So i copied twi.c and twi.h from the Arduino-twi-lib-patch and pasted them to the libraries\wire\utilities folder(i didn't erase the existing twi.c and twi.h files). Then i tried to compile the code, but i had many errors.What have i done wrong?
Guys i NEED YOUR HELP!!!
Thanks in advance!
i have problems while i am trying to compile r33 code.I am not familiar with arduino coding.I've made the extra steps needed to get the code compiled in the arduino IDE. I have copied the libraries that are in the Arduino-PID-libs folder (PI and PID controllers)and pasted them into the libraries folder in arduino folder.
I'm planning to use i2c_gps(MTK3339 from Adafruit). So i copied twi.c and twi.h from the Arduino-twi-lib-patch and pasted them to the libraries\wire\utilities folder(i didn't erase the existing twi.c and twi.h files). Then i tried to compile the code, but i had many errors.What have i done wrong?
Guys i NEED YOUR HELP!!!
Thanks in advance!
-
- Posts: 9
- Joined: Sat Mar 19, 2011 2:05 pm
Re: GPS integration
tsoumelman wrote:Hello
i have problems while i am trying to compile r33 code.I am not familiar with arduino coding.I've made the extra steps needed to get the code compiled in the arduino IDE. I have copied the libraries that are in the Arduino-PID-libs folder (PI and PID controllers)and pasted them into the libraries folder in arduino folder.
I'm planning to use i2c_gps(MTK3339 from Adafruit). So i copied twi.c and twi.h from the Arduino-twi-lib-patch and pasted them to the libraries\wire\utilities folder(i didn't erase the existing twi.c and twi.h files). Then i tried to compile the code, but i had many errors.What have i done wrong?
Guys i NEED YOUR HELP!!!
Thanks in advance!
I had to remove the original twi code from the wire library, renaming did not work, only removing them would allow it to compile.
Re: GPS integration
USE Arduino 1.0 not 1.0.1
Re: GPS integration
ReM wrote:I set in I2C_GPS_NAV.ino for MediaTek:Code: Select all
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup
//
void setup() {
uint8_t i;
// GPS setup
Serial.begin(9600);
delay(2000);
Serial.println("$PMTK251,115200*1F"); //speed 115200
delay(1000);
Serial.begin(115200);
Serial.println("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"); // CGA, RMC, GSA
Serial.println("$PMTK220,100*2F"); // 10 Hz
I do not know whether this is really true, but this works OK.
Sorry for my bad english...
Battery is done for, replace it.
UBLOX parser
Hi folks,
Here is the Ublox binary parser, I flown a couple of packs with it, and seems to work. BUT since Mw2.1 is feature freezed and the sram footprint is not tested, i'm not commiting it to the current _shared trunk, but keep it for post 2.1. You can easily add it to the current code for testing, just add it to the begining of the gps.ino after the #if defined(GPS_SERIAL)..... define
and change the
to
I also attached the settings file got u-blox to binary mode.
Here is the Ublox binary parser, I flown a couple of packs with it, and seems to work. BUT since Mw2.1 is feature freezed and the sram footprint is not tested, i'm not commiting it to the current _shared trunk, but keep it for post 2.1. You can easily add it to the current code for testing, just add it to the begining of the gps.ino after the #if defined(GPS_SERIAL)..... define
and change the
Code: Select all
if (GPS_newFrame(SerialRead(GPS_SERIAL))) {
to
Code: Select all
if (UBLOX_GPS_newFrame((uint8_t)SerialRead(GPS_SERIAL))) {
I also attached the settings file got u-blox to binary mode.
Code: Select all
#if defined(UBLOX)
struct ubx_header {
uint8_t preamble1;
uint8_t preamble2;
uint8_t msg_class;
uint8_t msg_id;
uint16_t length;
};
struct ubx_nav_posllh {
uint32_t time; // GPS msToW
int32_t longitude;
int32_t latitude;
int32_t altitude_ellipsoid;
int32_t altitude_msl;
uint32_t horizontal_accuracy;
uint32_t vertical_accuracy;
};
struct ubx_nav_status {
uint32_t time; // GPS msToW
uint8_t fix_type;
uint8_t fix_status;
uint8_t differential_status;
uint8_t res;
uint32_t time_to_first_fix;
uint32_t uptime; // milliseconds
};
struct ubx_nav_solution {
uint32_t time;
int32_t time_nsec;
int16_t week;
uint8_t fix_type;
uint8_t fix_status;
int32_t ecef_x;
int32_t ecef_y;
int32_t ecef_z;
uint32_t position_accuracy_3d;
int32_t ecef_x_velocity;
int32_t ecef_y_velocity;
int32_t ecef_z_velocity;
uint32_t speed_accuracy;
uint16_t position_DOP;
uint8_t res;
uint8_t satellites;
uint32_t res2;
};
struct ubx_nav_velned {
uint32_t time; // GPS msToW
int32_t ned_north;
int32_t ned_east;
int32_t ned_down;
uint32_t speed_3d;
uint32_t speed_2d;
int32_t heading_2d;
uint32_t speed_accuracy;
uint32_t heading_accuracy;
};
enum ubs_protocol_bytes {
PREAMBLE1 = 0xb5,
PREAMBLE2 = 0x62,
CLASS_NAV = 0x01,
CLASS_ACK = 0x05,
CLASS_CFG = 0x06,
MSG_ACK_NACK = 0x00,
MSG_ACK_ACK = 0x01,
MSG_POSLLH = 0x2,
MSG_STATUS = 0x3,
MSG_SOL = 0x6,
MSG_VELNED = 0x12,
MSG_CFG_PRT = 0x00,
MSG_CFG_RATE = 0x08,
MSG_CFG_SET_RATE = 0x01,
MSG_CFG_NAV_SETTINGS = 0x24
};
enum ubs_nav_fix_type {
FIX_NONE = 0,
FIX_DEAD_RECKONING = 1,
FIX_2D = 2,
FIX_3D = 3,
FIX_GPS_DEAD_RECKONING = 4,
FIX_TIME = 5
};
enum ubx_nav_status_bits {
NAV_STATUS_FIX_VALID = 1
};
// Packet checksum accumulators
static uint8_t _ck_a;
static uint8_t _ck_b;
// State machine state
static uint8_t _step;
static uint8_t _msg_id;
static uint16_t _payload_length;
static uint16_t _payload_counter;
static bool next_fix;
static uint8_t _class;
// do we have new position information?
static bool _new_position;
// do we have new speed information?
static bool _new_speed;
static uint8_t _disable_counter;
// Receive buffer
static union {
ubx_nav_posllh posllh;
ubx_nav_status status;
ubx_nav_solution solution;
ubx_nav_velned velned;
uint8_t bytes[];
} _buffer;
void _update_checksum(uint8_t *data, uint8_t len, uint8_t &ck_a, uint8_t &ck_b)
{
while (len--) {
ck_a += *data;
ck_b += ck_a;
data++;
}
}
bool UBLOX_GPS_newFrame(uint8_t data)
{
bool parsed = false;
switch(_step) {
case 1:
if (PREAMBLE2 == data) {
_step++;
break;
}
_step = 0;
case 0:
if(PREAMBLE1 == data) _step++;
break;
case 2:
_step++;
_class = data;
_ck_b = _ck_a = data; // reset the checksum accumulators
break;
case 3:
_step++;
_ck_b += (_ck_a += data); // checksum byte
_msg_id = data;
break;
case 4:
_step++;
_ck_b += (_ck_a += data); // checksum byte
_payload_length = data; // payload length low byte
break;
case 5:
_step++;
_ck_b += (_ck_a += data); // checksum byte
_payload_length += (uint16_t)(data<<8);
if (_payload_length > 512) {
_payload_length = 0;
_step = 0;
}
_payload_counter = 0; // prepare to receive payload
break;
case 6:
_ck_b += (_ck_a += data); // checksum byte
if (_payload_counter < sizeof(_buffer)) {
_buffer.bytes[_payload_counter] = data;
}
if (++_payload_counter == _payload_length)
_step++;
break;
case 7:
_step++;
if (_ck_a != data) _step = 0; // bad checksum
break;
case 8:
_step = 0;
if (_ck_b != data) break; // bad checksum
if (UBLOX_parse_gps()) { parsed = true; GPS_Present = 1; }
} //end switch
return parsed;
}
bool UBLOX_parse_gps(void)
{
switch (_msg_id) {
case MSG_POSLLH:
//GPS_time = _buffer.posllh.time;
GPS_coord[LON] = _buffer.posllh.longitude;
GPS_coord[LAT] = _buffer.posllh.latitude;
GPS_altitude = _buffer.posllh.altitude_msl / 10/100; //alt in m
f.GPS_FIX = next_fix;
_new_position = true;
break;
case MSG_STATUS:
next_fix = (_buffer.status.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.status.fix_type == FIX_3D);
if (!next_fix) f.GPS_FIX = false;
break;
case MSG_SOL:
next_fix = (_buffer.solution.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.solution.fix_type == FIX_3D);
if (!next_fix) f.GPS_FIX = false;
GPS_numSat = _buffer.solution.satellites;
//GPS_hdop = _buffer.solution.position_DOP;
//debug[3] = GPS_hdop;
break;
case MSG_VELNED:
//speed_3d = _buffer.velned.speed_3d; // cm/s
GPS_speed = _buffer.velned.speed_2d; // cm/s
GPS_ground_course = (uint16_t)(_buffer.velned.heading_2d / 10000); // Heading 2D deg * 100000 rescaled to deg * 10
_new_speed = true;
break;
default:
return false;
}
// we only return true when we get new position and speed data
// this ensures we don't use stale data
if (_new_position && _new_speed) {
_new_speed = _new_position = false;
return true;
}
return false;
}
#endif //UBLOX
- Attachments
-
- u-blox-config.ublox.zip
- (868 Bytes) Downloaded 257 times
Re: GPS integration
Hi EosBandi ,
Great ! can you tell us how to add it into the I2C Code ?
thanks so mutch
Great ! can you tell us how to add it into the I2C Code ?
thanks so mutch
Re: GPS integration
LuFa wrote:Hi EosBandi ,
Great ! can you tell us how to add it into the I2C Code ?
thanks so mutch
I'll integrate it into the i2c code during the upcoming week.
MTK Binary parser
And here is the Binary parser for MTK based modules with DIYDrones custom firmware (AXN1.30_2389_3329_384.1151100.1_v16.bin)
Replace the
with
Also have to switch the gps module to binary mode since the diydrones firmware start at 38400baud and 1Hz update, so you have to change the speed and the baudrate too.
Replace the
Code: Select all
if (GPS_newFrame(SerialRead(GPS_SERIAL))) {
with
Code: Select all
if (MTK_GPS_newFrame((uint8_t)SerialRead(GPS_SERIAL))) {
Also have to switch the gps module to binary mode since the diydrones firmware start at 38400baud and 1Hz update, so you have to change the speed and the baudrate too.
Code: Select all
SerialOpen(GPS_SERIAL,38400);
SerialPrint(GPS_SERIAL,"$PMTK220,200*2C\r\n");
delay(400);
SerialPrint(GPS_SERIAL,"$PMTK251,115200*1F\r\n")
SerialPrint(GPS_SERIAL,"$PGCMD,16,0,0,0,0,0*6A\r\n");
delay(500);
SerialEnd(GPS_SERIAL);
Code: Select all
#if defined(MTK)
struct diyd_mtk_msg {
int32_t latitude;
int32_t longitude;
int32_t altitude;
int32_t ground_speed;
int32_t ground_course;
uint8_t satellites;
uint8_t fix_type;
uint32_t utc_date;
uint32_t utc_time;
uint16_t hdop;
};
// #pragma pack(pop)
enum diyd_mtk_fix_type {
FIX_NONE = 1,
FIX_2D = 2,
FIX_3D = 3
};
enum diyd_mtk_protocol_bytes {
PREAMBLE1 = 0xd0,
PREAMBLE2 = 0xdd,
};
// Packet checksum accumulators
uint8_t _ck_a;
uint8_t _ck_b;
// State machine state
uint8_t _step;
uint8_t _payload_counter;
// Time from UNIX Epoch offset
long _time_offset;
bool _offset_calculated;
// Receive buffer
union {
diyd_mtk_msg msg;
uint8_t bytes[];
} _buffer;
inline long _swapl(const void *bytes)
{
const uint8_t *b = (const uint8_t *)bytes;
union {
long v;
uint8_t b[4];
} u;
u.b[0] = b[3];
u.b[1] = b[2];
u.b[2] = b[1];
u.b[3] = b[0];
return(u.v);
}
bool MTK_GPS_newFrame(uint8_t data)
{
bool parsed = false;
restart:
switch(_step) {
// Message preamble, class, ID detection
//
// If we fail to match any of the expected bytes, we
// reset the state machine and re-consider the failed
// byte as the first byte of the preamble. This
// improves our chances of recovering from a mismatch
// and makes it less likely that we will be fooled by
// the preamble appearing as data in some other message.
//
case 0:
if(PREAMBLE1 == data)
_step++;
break;
case 1:
if (PREAMBLE2 == data) {
_step++;
break;
}
_step = 0;
goto restart;
case 2:
if (sizeof(_buffer) == data) {
_step++;
_ck_b = _ck_a = data; // reset the checksum accumulators
_payload_counter = 0;
} else {
_step = 0; // reset and wait for a message of the right class
goto restart;
}
break;
// Receive message data
//
case 3:
_buffer.bytes[_payload_counter++] = data;
_ck_b += (_ck_a += data);
if (_payload_counter == sizeof(_buffer))
_step++;
break;
// Checksum and message processing
//
case 4:
_step++;
if (_ck_a != data) {
_step = 0;
}
break;
case 5:
_step = 0;
if (_ck_b != data) {
break;
}
f.GPS_FIX = _buffer.msg.fix_type == FIX_3D;
GPS_coord[LAT] = _buffer.msg.latitude * 10;
GPS_coord[LON] = _buffer.msg.longitude * 10;
GPS_altitude = _buffer.msg.altitude;
GPS_speed = _buffer.msg.ground_speed;
GPS_ground_course = _buffer.msg.ground_course;
GPS_numSat = _buffer.msg.satellites;
//GPS_hdop = _buffer.msg.hdop;
parsed = true;
GPS_Present = 1;
}
return parsed;
}
#endif //MTK
Re: GPS integration
did you have change the PID Parameter for the Ublox Parser ?
Re: GPS integration
LuFa wrote:did you have change the PID Parameter for the Ublox Parser ?
No, But I tested some more pid's Currently i fly with these settings :
PosHold 0.14 0.00
PosHoldRate 2.8 0.10 0.055
Your mileage may be different....
- jevermeister
- Posts: 708
- Joined: Wed Jul 20, 2011 8:56 am
- Contact:
Re: GPS integration
Andras,
can you sum up the parameters for GPS`? The thread is quit long.
We should update the FAQ ASAP, I will contact Alex for this.
Nils
can you sum up the parameters for GPS`? The thread is quit long.
We should update the FAQ ASAP, I will contact Alex for this.
Nils
Re: GPS integration
brettwal wrote:ReM wrote:I set in I2C_GPS_NAV.ino for MediaTek:Code: Select all
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup
//
void setup() {
uint8_t i;
// GPS setup
Serial.begin(9600);
delay(2000);
Serial.println("$PMTK251,115200*1F"); //speed 115200
delay(1000);
Serial.begin(115200);
Serial.println("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"); // CGA, RMC, GSA
Serial.println("$PMTK220,100*2F"); // 10 Hz
I do not know whether this is really true, but this works OK.
Sorry for my bad english...
Battery is done for, replace it.
No, my GPS module without battery...
Re: GPS integration
jevermeister wrote:Andras,
can you sum up the parameters for GPS`? The thread is quit long.
We should update the FAQ ASAP, I will contact Alex for this.
Nils
It covers most part... will be updatet along with 2.1 release
http://code.google.com/p/i2c-gps-nav/do ... tation.pdf
-
- Posts: 4
- Joined: Sat Jun 23, 2012 9:05 pm
Re: GPS integration
BrokenRotor wrote:tsoumelman wrote:Hello
i have problems while i am trying to compile r33 code.I am not familiar with arduino coding.I've made the extra steps needed to get the code compiled in the arduino IDE. I have copied the libraries that are in the Arduino-PID-libs folder (PI and PID controllers)and pasted them into the libraries folder in arduino folder.
I'm planning to use i2c_gps(MTK3339 from Adafruit). So i copied twi.c and twi.h from the Arduino-twi-lib-patch and pasted them to the libraries\wire\utilities folder(i didn't erase the existing twi.c and twi.h files). Then i tried to compile the code, but i had many errors.What have i done wrong?
Guys i NEED YOUR HELP!!!
Thanks in advance!
I had to remove the original twi code from the wire library, renaming did not work, only removing them would allow it to compile.
Thanks a lot!
And thanks EOS too!
Re: GPS integration
I connect a Gstar (3329) serial gps unit into my mega board port 2, i do get the gps data and number of satetille fixed, however the comm baud is only 9600, any higher i changed will not get any gps data on my mega/gui.
How can i find out if my gps is 10 hz or not ? How to increase the comm baud rate?
All others functions is ok as my quad is flying well with the mega board now. Gps dont seems to work, i m on multiwii 2.1_964 currently.
Thanks
How can i find out if my gps is 10 hz or not ? How to increase the comm baud rate?
All others functions is ok as my quad is flying well with the mega board now. Gps dont seems to work, i m on multiwii 2.1_964 currently.
Thanks
- fr3d
- Posts: 97
- Joined: Sun Feb 06, 2011 11:21 am
- Location: Cappelle la grande near the ch'ti village
- Contact:
Re: GPS integration
is it a bug ??
arduino 2560, flyduino megaboard
fmp04 10hz,115200 flyduino gpsbob
on gui with r964 when you unplug (by accident) the gps serial wire, informations still appear on gui...
can we guess those informations will also stay in mwc during flight ?
if it does it can crash your copter no ?
I'm not sure about it but it should be also safe to 'reset' gps data when you reset home position no ?
something like this maybe...
and maybee to add a counter of good or "always same" GGA & RMC frames
like it is in the failsafe dectection procedure...
arduino 2560, flyduino megaboard
fmp04 10hz,115200 flyduino gpsbob
on gui with r964 when you unplug (by accident) the gps serial wire, informations still appear on gui...
can we guess those informations will also stay in mwc during flight ?
if it does it can crash your copter no ?
I'm not sure about it but it should be also safe to 'reset' gps data when you reset home position no ?
something like this maybe...
Code: Select all
if (rcData[YAW] < MINCHECK && rcData[PITCH] < MINCHECK && !f.ARMED) {
if (rcDelayCommand == 20) {
calibratingG=400;
#if GPS
GPS_reset_home_position(); //fr3d
f.GPS_FIX = 0;
GPS_numSat = 0;
GPS_coord[LAT] = 0;
GPS_coord[LON] = 0;
GPS_altitude = 0;
GPS_speed = 0;
#endif
}
and maybee to add a counter of good or "always same" GGA & RMC frames
like it is in the failsafe dectection procedure...
Re: GPS integration
Nervously tested RTH on a big twitchy hexa yesterday. It's very overpowered and is climbing on less than 20% throttle so wasn't sure how it would work.
All default untuned. Only magdec calibrated - worked very well except a little circling at home
Engaged RTH 2m above the ground. Tracked back very well at nice speed. +/-1m on height
Windy day
It flies it better than me.....
Nice Job EOS and the AP crew
All default untuned. Only magdec calibrated - worked very well except a little circling at home
Engaged RTH 2m above the ground. Tracked back very well at nice speed. +/-1m on height
Windy day
It flies it better than me.....
Nice Job EOS and the AP crew
Re: GPS integration
fr3d wrote:is it a bug ??
arduino 2560, flyduino megaboard
fmp04 10hz,115200 flyduino gpsbob
on gui with r964 when you unplug (by accident) the gps serial wire, informations still appear on gui...
can we guess those informations will also stay in mwc during flight ?
if it does it can crash your copter no ?
I'm not sure about it but it should be also safe to 'reset' gps data when you reset home position no ?
something like this maybe...Code: Select all
if (rcData[YAW] < MINCHECK && rcData[PITCH] < MINCHECK && !f.ARMED) {
if (rcDelayCommand == 20) {
calibratingG=400;
#if GPS
GPS_reset_home_position(); //fr3d
f.GPS_FIX = 0;
GPS_numSat = 0;
GPS_coord[LAT] = 0;
GPS_coord[LON] = 0;
GPS_altitude = 0;
GPS_speed = 0;
#endif
}
and maybee to add a counter of good or "always same" GGA & RMC frames
like it is in the failsafe dectection procedure...
Resetting gps data on home position reset is meaningless, since you have to have good gps data for setting home position...a failsame timer is a good idea, now if you disconnect the serial GPS, the last pos and fix data remained stalled.... we a simple timer could reset the f.GPS_FIX to zero... all other gps functions are based on the f.GPS fix flag......
- jevermeister
- Posts: 708
- Joined: Wed Jul 20, 2011 8:56 am
- Contact:
Re: GPS integration
Isn't there a heartbeat signal present?
You could definetly include that into I2C GPS
Nils
You could definetly include that into I2C GPS
Nils
Re: GPS integration
jevermeister wrote:Isn't there a heartbeat signal present?
You could definetly include that into I2C GPS
Nils
I2c gps has this feature, when no GPS signal is detected for 1 sec, then it will ouput NO fix... so I just have to port this to MW serial GPS code....
- jevermeister
- Posts: 708
- Joined: Wed Jul 20, 2011 8:56 am
- Contact:
Re: GPS integration
EOSBandi wrote:jevermeister wrote:Isn't there a heartbeat signal present?
You could definetly include that into I2C GPS
Nils
I2c gps has this feature, when no GPS signal is detected for 1 sec, then it will ouput NO fix... so I just have to port this to MW serial GPS code....
OK - Nice to know you are alway prepared Andras .
I had the weirdest issue today. I tested Coming home again today and hat slight wind from west.
Walking test were okay and plausible - I thought I had a mag issue.
If I switched RTH while the copter was in the west everything was okay.
If I switched it on while it has to fight the wind to rth it was twitchy as hell and flying circles and tries to run away.
I checked again in gui and noticed that, when I tilt the copter the mag goes crazy - so I rechecked the amg orientation, compared it to other boards etc. everything was set up correctly. When I reflasehd MWC2.0 everything was fine. So I thought it was an issue with 2.1pre.
After reflashing MWC2.1pre the issue was gone.
Dafuq? What does that mean?? Is there something wrong with the eeprom and the mag data?
I did some code tests the last days so flashed and reflashed 2.1pre over and over again...
Nils
ps.: Andras, do you need some Buzzercodes for GPS? I have coded a new coded buzzerpattern. Have a lock
-
- Posts: 506
- Joined: Thu May 05, 2011 8:13 am
- Location: Slovenia
Re: GPS integration
jevermeister wrote:I had the weirdest issue today. I tested Coming home again today and hat slight wind from west.
...
f I switched it on while it has to fight the wind to rth it was twitchy as hell and flying circles and tries to run away.
Sounds very much like: viewtopic.php?f=8&t=649&start=1030#p17821
In my case also mag (by itself) works as expected only GPS functions (especialy RTH) in wind are strange.