- $ is message start character
- RC2 and RC3 are message identifiers
- time stamp is not used (empty). (for blended GPS support this should be a GPS synchronized realtime timestamp in NMEA 0183 format).
- count is an overflowing line counter 0-65535. Can be left empty if GPS timestamp is provided.
- acc fields: -1.000 = -1G, 1.000 = +1G
- gyro fields: degrees per second, -1.000 = -1 deg/s, 1.000 = +1 deg/s
- dx are digital channel fields, range -2000000.000 - 2000000.000
- ax are analog channel fields, range -2000000.000 - 2000000.000
- * is message separator character
- NMEA 0183 type checksum, with two uppercase hexadecimal digits (one byte)
- each line is terminated with CR plus LF
So pretty much same as $RC1, but with 3 more analog channels, one added digital channel (other being RPM field), and lost gyro channels (which were never used by RaceChrono on the $RC1 format either...).
Notice: steady update rate is needed for this format due to the algorithm that RaceChrono uses to synchronize with GPS time. So pick update rate that is close as possible to 1/5/10/20/30/40/50/100 Hz. If you have to skip an update, make sure you add the 'count' field even for the skipped updates.
Updated 4.3.2014 with some new information about v2.60 and update rate
Updated 24.7.2016 with $RC3 format with gyro channels and more analog channels
@aol I am doing some updates to my data logger for my track bike and thought I would start to populate the count attribute in my RC3 lines just for future proofing in case I move to different data paths (BT & Wifi) or decide to use a different external GPS receiver etc.
I see above that the value is an unsigned int (65535). Currently I am sending RC3 records at 50/s. I know I can slow my rate down but currently I get to the max value after about 20min
So should I restart at 0 if I wrap? Is there an option to use a long (or unsigned long)? Lots of record bandwidth with that counter size.
BTW, sending 50/s mostly 'because I can' though at top speed 260kph I am doing about 72m/s and since I am working to add suspension sensors thought 50 records per second was about right to see my suspension every 1-1.5 metres at high speed.
After 65535 comes 0 and the code is tested to do that. 50 Hz should be no problem for RC. On some phones 50 Hz graphs may be sluggish, but I plan to optimise this further in future.
Does the checksum have to be uppercase? Will the program work with lowercase checksum? I have a program that calculates the checksum but it seems to produce a lowercase checksum even if this is the code: checksum = String (checkSum(buffer), HEX), buffer being the string of data. Am I doing something wrong with the code?
I checked the string you gave me and the site and my program calculates the correct checksum. (34 for you string)
Here are some of my strings: $RC2,,5,,,,0,0,83,30,,,,,,*32 $RC2,,6,,,,0,0,83,30,,,,,,*31 $RC2,,7,,,,0,0,83,30,,,,,,*30 $RC2,,8,,,,0,0,83,30,,,,,,*3f $RC2,,9,,,,0,0,83,30,,,,,,*3e
@lzzl551 It is a hall effect sensor mounted on the lead to the spark plug. Because it is very high current, the hall will latch and you can count the number of sparks/unit of time and get a RPM value.
@aol I was wondering if it is possible to place somewhere in the $RC sentence a number that tells the time it took to do a lap (taken from a interrupt pin from an Arduino when a hall sensor passes over the magnetic strip in the track, instead of the GPS)?
Basically, can I display laptime using a DIY sensor (without or alongside the GPS laptime)?
RaceChrono is very precise, but I am just curious if I can get this to work when the sky is cloudy or maybe on an indoor track.
I don't get very good cellular service at the track where I ride mostly (Calabogie Onatrio Canada) but even on a rainy miserable day I get GPS just fine.
I believe (Aol can confirm) RaceChrono uses the GPS lock to signal that things are working and you won't get much out of using RaceChrono without GPS.
What I get out of RaceChrono is the timing but also that I can see when I am on/off throttle for a particular corner. If you want to know the data per corner etc you need the GPS to determine where you are on the track.
You are correct Jeff. I just had an extra pin on My Arduino and I thought that I could use it like this. I am not planing to use RachChrono without GPS. This is just a curiosity of mine. Do you know if a hall sensor mounted on the floor of the kart will pick up the magnetic strip of the track?
guzu, just count the time between interrupts, and send the value continously in one channel to racechrono, and display the gauge in digital format. That should do the trick?
Currently there's no magnetic strip support, but it is an interesting idea and I've given it some thought earlier, but haven't been able to come up with anything useful yet.
I would not put a lap time to $RC sentences, I'd just output 1 when it's trigged and 0 when not trigged, or something similar. You'd be able to see the physical start/finish location vs. GPS location and time, for every lap in the analysis.
If you really want the time (for live display purposes for example), then just output decimal seconds. 1:22.43 would be displayed as 82.43, not too hard to interpret with quick glance.
Comments
$RC2,[time],[count],[xacc],[yacc],[zacc],[rpm/d1],[d2],[a1],[a2],[a3],[a4],[a5],[a6],[a7],[a8]*checksum
$RC3,[time],[count],[xacc],[yacc],[zacc],[gyrox],[gyroy],[gyroz],[rpm/d1],[d2],[a1],[a2],[a3],[a4],[a5],[a6],[a7],[a8],[a9],[a10],[a11],[a12],[a13],[a14],[a15]*checksum
- $ is message start character
- RC2 and RC3 are message identifiers
- time stamp is not used (empty). (for blended GPS support this should be a GPS synchronized realtime timestamp in NMEA 0183 format).
- count is an overflowing line counter 0-65535. Can be left empty if GPS timestamp is provided.
- acc fields: -1.000 = -1G, 1.000 = +1G
- gyro fields: degrees per second, -1.000 = -1 deg/s, 1.000 = +1 deg/s
- dx are digital channel fields, range -2000000.000 - 2000000.000
- ax are analog channel fields, range -2000000.000 - 2000000.000
- * is message separator character
- NMEA 0183 type checksum, with two uppercase hexadecimal digits (one byte)
- each line is terminated with CR plus LF
So pretty much same as $RC1, but with 3 more analog channels, one added digital channel (other being RPM field), and lost gyro channels (which were never used by RaceChrono on the $RC1 format either...).
Notice: steady update rate is needed for this format due to the algorithm that RaceChrono uses to synchronize with GPS time. So pick update rate that is close as possible to 1/5/10/20/30/40/50/100 Hz. If you have to skip an update, make sure you add the 'count' field even for the skipped updates.
Updated 4.3.2014 with some new information about v2.60 and update rate
Updated 24.7.2016 with $RC3 format with gyro channels and more analog channels
http://www.racechrono.com/forum/#/discussion/1379/rc-format-sequencing-etc
http://www.racechrono.com/forum/#/discussion/1378/rc-and-nmea-mixed-input-questions
I see above that the value is an unsigned int (65535). Currently I am sending RC3 records at 50/s. I know I can slow my rate down but currently I get to the max value after about 20min
So should I restart at 0 if I wrap?
Is there an option to use a long (or unsigned long)? Lots of record bandwidth with that counter size.
Thanks, Jeff
Jeff
I have a program that calculates the checksum but it seems to produce a lowercase checksum even if this is the code: checksum = String (checkSum(buffer), HEX), buffer being the string of data.
Am I doing something wrong with the code?
Thanks.
Maybe you're just calculating it incorrectly.
Example:
$RC1,,15893,-1,0,,,,,13300,516,517,518,516,0*34
Verify:
http://siliconsparrow.com/demos/nmeachecksum.php => 34 (paste without *34)
Here are some of my strings:
$RC2,,5,,,,0,0,83,30,,,,,,*32
$RC2,,6,,,,0,0,83,30,,,,,,*31
$RC2,,7,,,,0,0,83,30,,,,,,*30
$RC2,,8,,,,0,0,83,30,,,,,,*3f
$RC2,,9,,,,0,0,83,30,,,,,,*3e
Thanks.
Basically, can I display laptime using a DIY sensor (without or alongside the GPS laptime)?
RaceChrono is very precise, but I am just curious if I can get this to work when the sky is cloudy or maybe on an indoor track.
Thanks.
I believe (Aol can confirm) RaceChrono uses the GPS lock to signal that things are working and you won't get much out of using RaceChrono without GPS.
If you are going to do the work to get a sensor in the track etc then why use RaceChrono at all? Just put a LCD on the microcontroller and show the time. Like this project: http://teambarnato.blogspot.ca/2016/02/ir-laptimer-using-arduino.html?m=0
What I get out of RaceChrono is the timing but also that I can see when I am on/off throttle for a particular corner. If you want to know the data per corner etc you need the GPS to determine where you are on the track.
Just my $0.02
Jeff
I just had an extra pin on My Arduino and I thought that I could use it like this.
I am not planing to use RachChrono without GPS. This is just a curiosity of mine.
Do you know if a hall sensor mounted on the floor of the kart will pick up the magnetic strip of the track?
Thanks.
I would not put a lap time to $RC sentences, I'd just output 1 when it's trigged and 0 when not trigged, or something similar. You'd be able to see the physical start/finish location vs. GPS location and time, for every lap in the analysis.
If you really want the time (for live display purposes for example), then just output decimal seconds. 1:22.43 would be displayed as 82.43, not too hard to interpret with quick glance.
Simple ideea with the decimal seconds