View Single Post
Old Apr 25, 2010, 02:11 PM
HappyKillmore is offline
Find More Posts by HappyKillmore
Suspended Account
Brunswick, OH
Joined Nov 2005
5,547 Posts
Step 5 - Getting the Remzibi OSD to work with the ArduPilot, ArduShield, ArduIMU and Remzibi GPS unit.
Alright, it's time to make sure you've got a comfortable chair and all the tools you will need for this lengthy step.

What you need for Step #5
Hardware:
ArduPilot
ArduShield (optional)
ArduIMU
Remzibi NMEA GPS (or uBlox or EM406)
Remzibi OSD

Tools:
Servo Tester (or RX and powered up radio)
2S or 3S Lipo
.1" header crimpers (http://hansenhobbies.com/products/co...ools/crimp_ec/)
About 30 .1" Female Gold Terminals (http://hansenhobbies.com/products/co...1inconnectors/)
An assortment of .1" housings from 1x1 to 1x5 (http://hansenhobbies.com/products/co...1inconnectors/)
Some multicolored ribbon cable (http://www.futurlec.com/Cable.shtml)
Wire stripping tool (http://hansenhobbies.com/products/co...trip_20-30awg/)
EasyCAP
5V BEC (optional) http://www.hobbycity.com/hobbyking/s...idProduct=4319

Cables:
Remzibi USB to serial cable
FTDI cable
A video RCA cable with one end chopped off and a JST or 1x2 .1" header installed (for video out on OSD)

Overview of Cabling Requirements
Note: The color of the wires in the photos below do NOT follow any coloring convention. Red is NOT always 5V and black is NOT always ground. Please pay CLOSE attention! Wiring up your system incorrectly CAN cause you to FRY components!!!!

Note: There are several ways to wire everything together. The ArduShield, ArduIMU and ArduPilot each have multiple TX/RX connections so this is not the only way to do it. One thing to keep in mind with the ArduIMU is that it has a "mux" onboard which enables or disables the different TX pins from inside the software. The lines pinMode(2,OUTPUT) in void setup() on the main arduimu.pde tab is where you can enable or disable the ports as needed.













Programming your hardware
I was hoping I wouldn't have to do this, but I've made so many changes to both the ArduIMU 1.7 and ArduPilot 2.6 source code (and I'm not done yet) that I might as well just post my entire folder.
Download ArduPilot 2.6 and ArduIMU 1.7
You'll also need to download the latest GPS Emulator and ArduIMU Test app again (still a work in progress) as I'm adding ArduIMU binary protocol support.
I guess you'll need the Remzibi Config Tool too to setup your OSD.

Once you've got everything downloaded again, you'll want to connect your FTDI cable to your ArduIMU and write the new firmware. One nice thing about the ArduIMU is that you don't have to disconnect anything during the software update process. It has that build-in MUX that disables the other ports so you're not trying to write stuff to your GPS instead of your ArduIMU.

Next, connect your FTDI cable to your ArduPilot and write the new firmware. You'll want to make sure you have set the parameter #define GPS_PROTOCOL 3 in the ap_2_6_header.h tab. I keep posting updates to the source code and sometimes I'm working on the ArduIMU binary protocol and sometimes I'm not...so I've forgotten to change this a few times....so check it to make sure. Another thing to watch out for is there is a variable called #define GCS_PROTOCOL which is not the parameter you want to change. GPS not GCS. I've made that mistake a few times....

Note: I'm going to tell you this, but you'll forget just like I did... when writing the firmware to the ArduPilot you MUST disconnect the ArduShield and the cable to the ArduIMU but you can leave the servo tester connected. If you don't disconnect this wire you'll get an error message during the write process. Something like:
Code:
avrdude: stk500_getsync(): not in sync: resp=0x10
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10
Now wire everything together





Displaying the ArduPilot Mode on Remzibi's OSD
If you've got a Remzibi OSD, then I'm assuming you've got the config tool and know how to use it So get that thing fired up and setup your layout.

A few things to note. My edits to the ArduPilot firmware will pass all of the NMEA data that gets shown on the Remzibi OSD... only if you're using a NMEA GPS. If you're using uBlox, then GPS Date and Time will not work and I haven't changed anything for Sirf to identify the number of satellites (so it will never auto-set home or show number of satellites).

The OSD uses a custom output message ($M) that's included in the GPGGA and GPRMC message sentences sent from the ArduPilot to the OSD. To edit the location, wording and custom graphics, you'll need to edit the tab called "remzibi" in the ArduPilot 2.6 source code in the section called "print_remzibi."
You can have more than one of these messages. The messages use the format below:

Code:
$MCCRRFFLLMessage<CR><LF>
$M = Header
CC = Column (Hex), add 80h for "small fonts"
RR = Row (Hex)
FF = First Character ID (Hex) - Symbol in front of message
LL = Last Character ID (Hex) - Symbol at end of message
Message = Any text - Max length is 85 characters 

Example 1: $M8102A900Hello World<CR><LF> = Column 1 with small fonts, Row 2, character from font file A9 at beginning, nothing at end
Example 2: $M0102A900Hello World<CR><LF> = Column 1 with large fonts, Row 2, character from font file A9 at beginning, nothing at end
If you're using an EasyCAP, then launch AmCap to view the output from the OSD. I've found it's easiest to use a 5V BEC to power everything and I connect it to the ArduIMU. Alternatively, you can connect a 2S to 3S LiPo to the Remzibi OSD and use it's onboard voltage converter....but things on the OSD get HOT quick and I prefer to keep everything cool during testing.



Another solution is to use the !!!*** status messages from the ArduPilot (OSD firmware Ardu1.3 or older) or the new $A status messages in OSD firmware Ardu 1.4 or newer. The downside to this method is the OSD does not set a home location and give you any directional way home or distance from home. It also will still require the $M messages to show the current mode the ArduPilot is in. The upside to using this firmware is you get a series of horizontal lines that show an artificial horizon based on feedback from the IMU. You do not need to connect anything to the ADC inputs on the OSD to make this information appear. All of the data streams in on the serial port.

To make life easier, I have added a variable to ap_2_6_header.h in the ArduPilot source called #define REMZIBI_MODE. Change this to the mode you'd like to use:
REMZIBI_NONE - No Remzibi Output messages
REMZIBI_M_COMMANDS - Used with the standard Remzibi firmware, includes GPGGA, GPRMC and $M commands
REMZIBI_ARDU_FIRMWARE_13 - Used with the Ardu1.3 and older firmware for the OSD
REMZIBI_ARDU_FIRMWARE_14 - Used with the Ardu1.4 and newer firmware for the OSD ($A commands)

See this post for more information on the OSD firmware Ardu 1.3 and older (talks about which variables it looks for).

Please NOTE! There is a big block in the center of the screen where the pitch and roll dashes are shown. If you put any objects in this area they will blink because the firmware is either writing a dash or a blank in all of those spaces.

The area in red is where the dashes are shown


HappyKillmore is offline Find More Posts by HappyKillmore
Last edited by HappyKillmore; May 16, 2010 at 09:23 AM.
Reply With Quote  (Disabled)