1. I downloaded ArduPilotMega_1_0_1.zip and GPS_IMU.zip to use
#include <GPS_IMU.h> // ArduPilot IMU/XPLANE GPS Library
and
#define GPS_PROTOCOL 3
The compile was successful.
2. I downloaded Flightgear 1.9.1b, and copy xml protocol file into
C:\Program Files\FlightGear\data\Protocol
and I made BAT file to easy execution as follows.
"C:\Program Files\FlightGear\bin\Win32\fgfs" --fg-root="C:\Program Files\FlightGear\data" --generic=socket,out,50,127.0.0.1,49005,udp,ardupilot --generic=socket,in,50,127.0.0.1,49000,tcp,ardupilot --in-air --altitude=3 --vc=90 --heading=300 --timeofday=noon
3. Starting Flightgear, after that I started Ardupilotsim.
However problems are...
1. Which flightmode is recommended to perform HILS? If I choose manual mode when ardupilot turned on, ardupilot performs ground initialization process which costs lots of time.
2. Rudder isn't controllable. See GCS_Xplane.pde file. There is no rudder packet!
void output_Xplane(void)
{
// output real-time sensor data
Serial.print("AAA"); // Message preamble
output_int((int)(servo_out[CH_ROLL]*100)); // 0 bytes 0,1
output_int((int)(servo_out[CH_PITCH]*100)); // 1 bytes 2,3
output_int((int)(servo_out[CH_THROTTLE]/1.25)); // 2 bytes 4,5
output_int((int)wp_distance); // 3 bytes 6,7
output_int((int)bearing_error); // 4 bytes 8,9
output_int((int)loiter_sum); // 5 bytes 10,11
output_int((int)loiter_total); // 6 bytes 12,13
output_byte(wp_index); // 7 bytes 14
output_byte(control_mode); // 8 bytes 15
// print out the buffer and checksum
// ---------------------------------
print_buffer();
}
3. Finally, I couldn't perform simulation experiment with this document (http://code.google.com/p/ardupilot-mega/wiki/FlightGear)
More information is needed.
4. I couldn't do anything with Xplane. GUI in (http://code.google.com/p/ardupilot-mega/wiki/Xplane) is different from current version of Xplane.
Replies
Ardupilot mega's page should be updated.
void output_Xplane(void)
{
// output real-time sensor data
Serial.print("AAA"); // Message preamble
output_int((int)(servo_out[CH_ROLL]*100)); // 0 bytes 0,1
output_int((int)(servo_out[CH_PITCH]*100)); // 1 bytes 2,3
output_int((int)(servo_out[CH_THROTTLE]/1.25)); // 2 bytes 4,5
#if CH4_RUDDER == 1
output_int((int)(servo_out[CH_RUDDER]*100)); // 3 bytes 6,7
#else
output_int(0); // 3 bytes 6,7
#endif
output_int((int)wp_distance); // 4 bytes 8,9
output_int((int)bearing_error); // 5 bytes 10,11
output_int((int)altitude_error); // 6 bytes 12,13
output_int((int)energy_error); // 7 bytes 14,15
output_byte(wp_index); // 8 bytes 16
output_byte(control_mode); // 9 bytes 17
// print out the buffer and checksum
// ---------------------------------
print_buffer();
}