Mission Planner 1.2.1

add enable/disable to mavlinkcheckbox
modify my button to curved
add delay to progress reporter dialog. to ensure correct parent
Fix Mount screen for AP
Fix Hardware screen Text
display roi difrently
modify HIL/Quad Hil
update dataflashlog format (thanks randy)
update mavcmd format for roi
This commit is contained in:
Michael Oborne 2012-07-30 07:23:42 +08:00
parent cc9712860b
commit 529e1bcc71
31 changed files with 2277 additions and 1619 deletions

View File

@ -177,14 +177,14 @@ namespace ArdupilotMega.Arduino
// all apm 1-1.4 use a ftdi on the imu board. // all apm 1-1.4 use a ftdi on the imu board.
obj2.Properties.ForEach(x => /* obj2.Properties.ForEach(x =>
{ {
try try
{ {
log.Info(((PropertyData)x).Name.ToString() + " = " + ((PropertyData)x).Value.ToString()); log.Info(((PropertyData)x).Name.ToString() + " = " + ((PropertyData)x).Value.ToString());
} }
catch { } catch { }
}); });*/
// check vid and pid // check vid and pid
if (obj2.Properties["PNPDeviceID"].Value.ToString().Contains(@"USB\VID_2341&PID_0010")) if (obj2.Properties["PNPDeviceID"].Value.ToString().Contains(@"USB\VID_2341&PID_0010"))

View File

@ -70,10 +70,10 @@
<UseVSHostingProcess>true</UseVSHostingProcess> <UseVSHostingProcess>true</UseVSHostingProcess>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Mavlink10)'=='true'"> <PropertyGroup Condition="'$(Mavlink10)'=='false'">
<DefineConstants>$(DefineConstants);MAVLINK10</DefineConstants> <DefineConstants>TRACE;DEBUG</DefineConstants>
<AssemblyName>ArdupilotMegaPlanner10</AssemblyName> <AssemblyName>ArdupilotMegaPlanner</AssemblyName>
<OutputPath>bin\Release10\</OutputPath> <OutputPath>bin\Release09\</OutputPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<StartupObject>ArdupilotMega.Program</StartupObject> <StartupObject>ArdupilotMega.Program</StartupObject>
@ -182,6 +182,10 @@
<Reference Include="OpenTK.GLControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL"> <Reference Include="OpenTK.GLControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
</Reference> </Reference>
<Reference Include="Sharp3D.Math, Version=1.1.3.0, Culture=neutral, PublicKeyToken=529e2e82fcc0ba71">
<SpecificVersion>False</SpecificVersion>
<HintPath>Lib\Sharp3D.Math.dll</HintPath>
</Reference>
<Reference Include="SharpKml, Version=1.1.0.0, Culture=neutral, PublicKeyToken=e608cd7d975805ad, processorArchitecture=MSIL"> <Reference Include="SharpKml, Version=1.1.0.0, Culture=neutral, PublicKeyToken=e608cd7d975805ad, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
</Reference> </Reference>
@ -279,6 +283,9 @@
<Compile Include="GCSViews\ConfigurationView\ConfigMount.designer.cs"> <Compile Include="GCSViews\ConfigurationView\ConfigMount.designer.cs">
<DependentUpon>ConfigMount.cs</DependentUpon> <DependentUpon>ConfigMount.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="HIL\FlashQuad.cs" />
<Compile Include="HIL\Matrix3.cs" />
<Compile Include="HIL\Vector3.cs" />
<Compile Include="Presenter\ConfigCameraStabPresenter.cs" /> <Compile Include="Presenter\ConfigCameraStabPresenter.cs" />
<Compile Include="Controls\HSI.cs"> <Compile Include="Controls\HSI.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>

View File

@ -1,4 +1,63 @@
* APM Planner 1.1.95 * Mission Planner 1.2
Enable Mount config screen
Add Quick View (double click to change)
fix mono updater issue
RFD900 transmit values Mod
new mavlink controls (wip)
* APM Planner 1.1.99
Convert to IActivate, IDeactivate scheme, thanks andrew
add support for rfcomm* interfaces on linux
fix guage off screen draw mono issue.
remove use of BackStageViewContentPanel
andrews spacer changes - not using dues to screen space issue
change configpanel constructor to load xml directly
remove IMavlink Interface
fix hsi off screen draw issue on mono
modify hud to use sprite fonts, instead of drawing via GDI+
modify progress reporter to use a 10hz timer to update screen, using invoke/begininvoke fails on mono at 50hz (over 100ms per call).
fix targetalt and target airspeed jumping issue.
lots of cleanup on tab switching, ie stoping timers/other
3dr radio status led update
update ardurover car icon
speedup georef image screen. tested on over 1000 images.
* APM Planner 1.1.98
Modify BackStage View - will change again soon
modify target alt calc
change order on param lists
remove old firmware selection dialog
add hil mod flag to hil connect
implement main switcher - will change again soon
change some invokes to async, to prevent other threads slowing.
fix mavlink log graphing error
modify help text
general mono for mac fixs - still combating https://bugzilla.xamarin.com/show_bug.cgi?id=3124
* APM Planner 1.1.97
add toy Mode
fix some mono issues
fix opengl hud issue
change config font size
modify mylabel for mono
modify default telem rates
add extra sonar option
remove 0 home alt check
fix terminal hang issue
remove application idle call, causes 100% cpu on mono
update gimbal icons
modify graph line thinkness
* APM Planner 1.1.96
Fix camera stab reverse boxs
add better param data duplicate handling
add rfd900a
tweak terminal settings
* APM Planner 1.1.95
fix config panel value change detection fix config panel value change detection
add loiter_ to AC config screen add loiter_ to AC config screen
Add praram name to Friendly param, and exception ignoring. Add praram name to Friendly param, and exception ignoring.

View File

@ -836,6 +836,7 @@ namespace ArdupilotMega
ArdupilotMega.Controls.MyButton buttonCancel = new ArdupilotMega.Controls.MyButton(); ArdupilotMega.Controls.MyButton buttonCancel = new ArdupilotMega.Controls.MyButton();
form.TopMost = true; form.TopMost = true;
form.TopLevel = true;
form.Text = title; form.Text = title;
label.Text = promptText; label.Text = promptText;

View File

@ -21,6 +21,8 @@ namespace ArdupilotMega.Controls
[System.ComponentModel.Browsable(true)] [System.ComponentModel.Browsable(true)]
public Hashtable param { get; set; } public Hashtable param { get; set; }
Control _control;
public MavlinkCheckBox() public MavlinkCheckBox()
{ {
OnValue = 1; OnValue = 1;
@ -29,7 +31,7 @@ namespace ArdupilotMega.Controls
this.Enabled = false; this.Enabled = false;
} }
public void setup(float OnValue, float OffValue, string paramname, Hashtable paramlist) public void setup(float OnValue, float OffValue, string paramname, Hashtable paramlist, Control enabledisable = null)
{ {
base.CheckedChanged -= MavlinkCheckBox_CheckedChanged; base.CheckedChanged -= MavlinkCheckBox_CheckedChanged;
@ -37,6 +39,7 @@ namespace ArdupilotMega.Controls
this.OffValue = OffValue; this.OffValue = OffValue;
this.ParamName = paramname; this.ParamName = paramname;
this.param = paramlist; this.param = paramlist;
this._control = enabledisable;
if (paramlist.ContainsKey(paramname)) if (paramlist.ContainsKey(paramname))
{ {
@ -45,24 +48,38 @@ namespace ArdupilotMega.Controls
if ((float)paramlist[paramname] == OnValue) if ((float)paramlist[paramname] == OnValue)
{ {
this.Checked = true; this.Checked = true;
enableControl(true);
} }
else if ((float)paramlist[paramname] == OffValue) else if ((float)paramlist[paramname] == OffValue)
{ {
this.Checked = false; this.Checked = false;
enableControl(false);
} }
else else
{ {
this.CheckState = System.Windows.Forms.CheckState.Indeterminate; this.CheckState = System.Windows.Forms.CheckState.Indeterminate;
enableControl(false);
} }
} }
else
{
this.Enabled = false;
}
base.CheckedChanged += new EventHandler(MavlinkCheckBox_CheckedChanged); base.CheckedChanged += new EventHandler(MavlinkCheckBox_CheckedChanged);
} }
void enableControl(bool enable)
{
if (_control != null)
_control.Enabled = enable;
}
void MavlinkCheckBox_CheckedChanged(object sender, EventArgs e) void MavlinkCheckBox_CheckedChanged(object sender, EventArgs e)
{ {
if (this.Checked) if (this.Checked)
{ {
enableControl(true);
if (!MainV2.comPort.setParam(ParamName, OnValue)) if (!MainV2.comPort.setParam(ParamName, OnValue))
{ {
CustomMessageBox.Show("Set "+ParamName + " Failed!"); CustomMessageBox.Show("Set "+ParamName + " Failed!");
@ -70,6 +87,7 @@ namespace ArdupilotMega.Controls
} }
else else
{ {
enableControl(false);
if (!MainV2.comPort.setParam(ParamName, OffValue)) if (!MainV2.comPort.setParam(ParamName, OffValue))
{ {
CustomMessageBox.Show("Set " + ParamName + " Failed!"); CustomMessageBox.Show("Set " + ParamName + " Failed!");

View File

@ -41,43 +41,46 @@ namespace ArdupilotMega.Controls
{ {
Graphics gr = pevent.Graphics; Graphics gr = pevent.Graphics;
// gr.SmoothingMode = SmoothingMode.AntiAlias; gr.Clear(this.BackColor);
gr.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle outside = new Rectangle(0, 0, this.Width, this.Height); Rectangle outside = new Rectangle(0, 0, this.Width, this.Height);
LinearGradientBrush linear = new LinearGradientBrush(outside, BGGradTop, BGGradBot, LinearGradientMode.Vertical); LinearGradientBrush linear = new LinearGradientBrush(outside, BGGradTop, BGGradBot, LinearGradientMode.Vertical);
Pen mypen = new Pen(Outline, 2); Pen mypen = new Pen(Outline, 1);
/*
gr.FillRectangle(new SolidBrush(Color.FromArgb(0x26, 0x27, 0x28)), outside); // gr.FillRectangle(new SolidBrush(Color.FromArgb(0x26, 0x27, 0x28)), outside);
GraphicsPath outline = new GraphicsPath(); GraphicsPath outline = new GraphicsPath();
float wid = this.Height / 5f; float wid = this.Height / 3f;
float widright = wid + 1;
int width = this.Width - 1;
int height = this.Height - 1;
// tl // tl
outline.AddArc(0, 0, wid, wid, 180, 90); outline.AddArc(0, 0, wid, wid, 180, 90);
// top line // top line
outline.AddLine(wid, 0, this.Width - widright, 0); outline.AddLine(wid, 0, width - wid, 0);
// tr // tr
outline.AddArc(this.Width - widright, 0, wid, wid, 270, 90); outline.AddArc(width - wid, 0, wid, wid, 270, 90);
// br // br
outline.AddArc(this.Width - widright, this.Height - widright, wid, wid, 0, 90); outline.AddArc(width - wid, height - wid, wid, wid, 0, 90);
// bottom line // bottom line
outline.AddLine(wid, this.Height - 1, this.Width - widright, this.Height - 1); outline.AddLine(wid, height, width - wid, height);
// bl // bl
outline.AddArc(0, this.Height - widright, wid, wid, 90, 90); outline.AddArc(0, height - wid, wid, wid, 90, 90);
gr.FillPath(linear, outline); gr.FillPath(linear, outline);
gr.DrawPath(mypen, outline); // gr.DrawPath(mypen, outline);
*/
gr.FillRectangle(linear, outside); // gr.FillRectangle(linear, outside);
gr.DrawRectangle(mypen, outside); // gr.DrawRectangle(mypen, outside);
SolidBrush mybrush = new SolidBrush(TextColor); SolidBrush mybrush = new SolidBrush(TextColor);
@ -86,20 +89,20 @@ namespace ArdupilotMega.Controls
{ {
SolidBrush brush = new SolidBrush(Color.FromArgb(73, 0x2b, 0x3a, 0x03)); SolidBrush brush = new SolidBrush(Color.FromArgb(73, 0x2b, 0x3a, 0x03));
gr.FillRectangle(brush, 0, 0, this.Width, this.Height); gr.FillPath(brush, outline);
} }
if (mousedown) if (mousedown)
{ {
SolidBrush brush = new SolidBrush(Color.FromArgb(73, 0x2b, 0x3a, 0x03)); SolidBrush brush = new SolidBrush(Color.FromArgb(73, 0x2b, 0x3a, 0x03));
gr.FillRectangle(brush, 0, 0, this.Width, this.Height); gr.FillPath(brush, outline);
} }
if (!this.Enabled) if (!this.Enabled)
{ {
SolidBrush brush = new SolidBrush(Color.FromArgb(150, 0x2b, 0x3a, 0x03)); SolidBrush brush = new SolidBrush(Color.FromArgb(150, 0x2b, 0x3a, 0x03));
gr.FillRectangle(brush, 0, 0, this.Width, this.Height); gr.FillPath(brush, outline);
} }

View File

@ -53,6 +53,13 @@ namespace ArdupilotMega.Controls
while (this.IsHandleCreated == false) while (this.IsHandleCreated == false)
System.Threading.Thread.Sleep(1); System.Threading.Thread.Sleep(1);
this.Invoke((MethodInvoker)delegate
{
// if this windows isnt the current active windows, popups inherit the wrong parent.
this.Focus();
Application.DoEvents();
});
try try
{ {
if (this.DoWork != null) this.DoWork(this, doWorkArgs); if (this.DoWork != null) this.DoWork(this, doWorkArgs);
@ -215,15 +222,22 @@ namespace ArdupilotMega.Controls
/// <param name="e"></param> /// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
// this value is being currupted - not thread safe
int pgv = _progress;
lblProgressMessage.Text = _status; lblProgressMessage.Text = _status;
if (_progress == -1) if (pgv == -1)
{ {
this.progressBar1.Style = ProgressBarStyle.Marquee; this.progressBar1.Style = ProgressBarStyle.Marquee;
} }
else else
{ {
this.progressBar1.Style = ProgressBarStyle.Continuous; this.progressBar1.Style = ProgressBarStyle.Continuous;
this.progressBar1.Value = _progress; try
{
this.progressBar1.Value = pgv;
}
catch { } // clean fail. and ignore, chances are we will hit this again in the next 100 ms
} }
} }

View File

@ -78,7 +78,7 @@ namespace ArdupilotMega
public float mz { get; set; } public float mz { get; set; }
public float magfield { get { return (float)Math.Sqrt(Math.Pow(mx, 2) + Math.Pow(my, 2) + Math.Pow(mz, 2)); } } public float magfield { get { return (float)Math.Sqrt(Math.Pow(mx, 2) + Math.Pow(my, 2) + Math.Pow(mz, 2)); } }
public float accelsq { get { return (float)Math.Sqrt(Math.Pow(ax, 2) + Math.Pow(ay, 2) + Math.Pow(az, 2)) / 980.665f; } } public float accelsq { get { return (float)Math.Sqrt(Math.Pow(ax, 2) + Math.Pow(ay, 2) + Math.Pow(az, 2)) / 1000.0f /*980.665f*/; } }
// calced turn rate // calced turn rate
public float turnrate { get { if (groundspeed <= 1) return 0; return (roll * 9.8f) / groundspeed; } } public float turnrate { get { if (groundspeed <= 1) return 0; return (roll * 9.8f) / groundspeed; } }
@ -324,6 +324,7 @@ namespace ArdupilotMega
// reference // reference
public DateTime datetime { get; set; } public DateTime datetime { get; set; }
private object locker = new object();
public CurrentState() public CurrentState()
{ {
@ -356,195 +357,199 @@ namespace ArdupilotMega
*/ */
public void UpdateCurrentSettings(System.Windows.Forms.BindingSource bs, bool updatenow, MAVLink mavinterface) public void UpdateCurrentSettings(System.Windows.Forms.BindingSource bs, bool updatenow, MAVLink mavinterface)
{ {
if (DateTime.Now > lastupdate.AddMilliseconds(19) || updatenow) // 50 hz lock (locker)
{ {
lastupdate = DateTime.Now; if (DateTime.Now > lastupdate.AddMilliseconds(19) || updatenow) // 50 hz
if (DateTime.Now.Second != lastwindcalc.Second)
{ {
lastwindcalc = DateTime.Now; lastupdate = DateTime.Now;
dowindcalc();
}
if (mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT] != null) // status text
{
string logdata = DateTime.Now + " " + Encoding.ASCII.GetString(mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT], 6, mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT].Length - 6);
int ind = logdata.IndexOf('\0'); if (DateTime.Now.Second != lastwindcalc.Second)
if (ind != -1)
logdata = logdata.Substring(0, ind);
try
{ {
while (messages.Count > 5) lastwindcalc = DateTime.Now;
{ dowindcalc();
messages.RemoveAt(0);
}
messages.Add(logdata + "\n");
} }
catch { }
mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT] = null;
}
byte[] bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_SCALED]; if (mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT] != null) // status text
{
if (bytearray != null) // hil mavlink 0.9 string logdata = DateTime.Now + " " + Encoding.ASCII.GetString(mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT], 6, mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT].Length - 6);
{
var hil = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_scaled_t>(6);
hilch1 = hil.chan1_scaled; int ind = logdata.IndexOf('\0');
hilch2 = hil.chan2_scaled; if (ind != -1)
hilch3 = hil.chan3_scaled; logdata = logdata.Substring(0, ind);
hilch4 = hil.chan4_scaled;
hilch5 = hil.chan5_scaled;
hilch6 = hil.chan6_scaled;
hilch7 = hil.chan7_scaled;
hilch8 = hil.chan8_scaled;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_SCALED] = null; try
} {
while (messages.Count > 5)
{
messages.RemoveAt(0);
}
messages.Add(logdata + "\n");
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HIL_CONTROLS]; }
catch { }
mavinterface.packets[MAVLink.MAVLINK_MSG_ID_STATUSTEXT] = null;
}
if (bytearray != null) // hil mavlink 0.9 and 1.0 byte[] bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_SCALED];
{
var hil = bytearray.ByteArrayToStructure<MAVLink.mavlink_hil_controls_t>(6);
hilch1 = (int)(hil.roll_ailerons * 10000); if (bytearray != null) // hil mavlink 0.9
hilch2 = (int)(hil.pitch_elevator * 10000); {
hilch3 = (int)(hil.throttle * 10000); var hil = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_scaled_t>(6);
hilch4 = (int)(hil.yaw_rudder * 10000);
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_HIL_CONTROLS] = null; hilch1 = hil.chan1_scaled;
} hilch2 = hil.chan2_scaled;
hilch3 = hil.chan3_scaled;
hilch4 = hil.chan4_scaled;
hilch5 = hil.chan5_scaled;
hilch6 = hil.chan6_scaled;
hilch7 = hil.chan7_scaled;
hilch8 = hil.chan8_scaled;
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HWSTATUS]; //MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_SCALED] = null;
}
if (bytearray != null) bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HIL_CONTROLS];
{
var hwstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_hwstatus_t>(6);
hwvoltage = hwstatus.Vcc; if (bytearray != null) // hil mavlink 0.9 and 1.0
i2cerrors = hwstatus.I2Cerr; {
var hil = bytearray.ByteArrayToStructure<MAVLink.mavlink_hil_controls_t>(6);
hilch1 = (int)(hil.roll_ailerons * 10000);
hilch2 = (int)(hil.pitch_elevator * 10000);
hilch3 = (int)(hil.throttle * 10000);
hilch4 = (int)(hil.yaw_rudder * 10000);
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_HIL_CONTROLS] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HWSTATUS];
if (bytearray != null)
{
var hwstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_hwstatus_t>(6);
hwvoltage = hwstatus.Vcc;
i2cerrors = hwstatus.I2Cerr;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_HWSTATUS] = null;
}
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_HWSTATUS] = null;
}
#if MAVLINK10 #if MAVLINK10
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HEARTBEAT];
if (bytearray != null)
{
var hb = bytearray.ByteArrayToStructure<MAVLink.mavlink_heartbeat_t>(6);
armed = (hb.base_mode & (byte)MAVLink.MAV_MODE_FLAG.SAFETY_ARMED) == (byte)MAVLink.MAV_MODE_FLAG.SAFETY_ARMED ? 4 : 3; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HEARTBEAT];
if (bytearray != null)
string oldmode = mode;
mode = "Unknown";
if ((hb.base_mode & (byte)MAVLink.MAV_MODE_FLAG.CUSTOM_MODE_ENABLED) != 0)
{ {
if (hb.type == (byte)MAVLink.MAV_TYPE.FIXED_WING) var hb = bytearray.ByteArrayToStructure<MAVLink.mavlink_heartbeat_t>(6);
armed = (hb.base_mode & (byte)MAVLink.MAV_MODE_FLAG.SAFETY_ARMED) == (byte)MAVLink.MAV_MODE_FLAG.SAFETY_ARMED ? 4 : 3;
string oldmode = mode;
mode = "Unknown";
if ((hb.base_mode & (byte)MAVLink.MAV_MODE_FLAG.CUSTOM_MODE_ENABLED) != 0)
{ {
switch (hb.custom_mode) if (hb.type == (byte)MAVLink.MAV_TYPE.FIXED_WING)
{ {
case (byte)(Common.apmmodes.MANUAL): switch (hb.custom_mode)
mode = "Manual"; {
break; case (byte)(Common.apmmodes.MANUAL):
case (byte)(Common.apmmodes.GUIDED): mode = "Manual";
mode = "Guided"; break;
break; case (byte)(Common.apmmodes.GUIDED):
case (byte)(Common.apmmodes.STABILIZE): mode = "Guided";
mode = "Stabilize"; break;
break; case (byte)(Common.apmmodes.STABILIZE):
case (byte)(Common.apmmodes.FLY_BY_WIRE_A): mode = "Stabilize";
mode = "FBW A"; break;
break; case (byte)(Common.apmmodes.FLY_BY_WIRE_A):
case (byte)(Common.apmmodes.FLY_BY_WIRE_B): mode = "FBW A";
mode = "FBW B"; break;
break; case (byte)(Common.apmmodes.FLY_BY_WIRE_B):
case (byte)(Common.apmmodes.AUTO): mode = "FBW B";
mode = "Auto"; break;
break; case (byte)(Common.apmmodes.AUTO):
case (byte)(Common.apmmodes.RTL): mode = "Auto";
mode = "RTL"; break;
break; case (byte)(Common.apmmodes.RTL):
case (byte)(Common.apmmodes.LOITER): mode = "RTL";
mode = "Loiter"; break;
break; case (byte)(Common.apmmodes.LOITER):
case (byte)(Common.apmmodes.CIRCLE): mode = "Loiter";
mode = "Circle"; break;
break; case (byte)(Common.apmmodes.CIRCLE):
case 16: mode = "Circle";
mode = "Initialising"; break;
break; case 16:
default: mode = "Initialising";
mode = "Unknown"; break;
break; default:
mode = "Unknown";
break;
}
}
else if (hb.type == (byte)MAVLink.MAV_TYPE.QUADROTOR)
{
switch (hb.custom_mode)
{
case (byte)(Common.ac2modes.STABILIZE):
mode = "Stabilize";
break;
case (byte)(Common.ac2modes.ACRO):
mode = "Acro";
break;
case (byte)(Common.ac2modes.ALT_HOLD):
mode = "Alt Hold";
break;
case (byte)(Common.ac2modes.AUTO):
mode = "Auto";
break;
case (byte)(Common.ac2modes.GUIDED):
mode = "Guided";
break;
case (byte)(Common.ac2modes.LOITER):
mode = "Loiter";
break;
case (byte)(Common.ac2modes.RTL):
mode = "RTL";
break;
case (byte)(Common.ac2modes.CIRCLE):
mode = "Circle";
break;
case (byte)(Common.ac2modes.LAND):
mode = "Land";
break;
default:
mode = "Unknown";
break;
}
} }
} }
else if (hb.type == (byte)MAVLink.MAV_TYPE.QUADROTOR)
if (oldmode != mode && MainV2.speechEnable && MainV2.getConfig("speechmodeenabled") == "True")
{ {
switch (hb.custom_mode) MainV2.speechEngine.SpeakAsync(Common.speechConversion(MainV2.getConfig("speechmode")));
{
case (byte)(Common.ac2modes.STABILIZE):
mode = "Stabilize";
break;
case (byte)(Common.ac2modes.ACRO):
mode = "Acro";
break;
case (byte)(Common.ac2modes.ALT_HOLD):
mode = "Alt Hold";
break;
case (byte)(Common.ac2modes.AUTO):
mode = "Auto";
break;
case (byte)(Common.ac2modes.GUIDED):
mode = "Guided";
break;
case (byte)(Common.ac2modes.LOITER):
mode = "Loiter";
break;
case (byte)(Common.ac2modes.RTL):
mode = "RTL";
break;
case (byte)(Common.ac2modes.CIRCLE):
mode = "Circle";
break;
case (byte)(Common.ac2modes.LAND):
mode = "Land";
break;
default:
mode = "Unknown";
break;
}
} }
} }
if (oldmode != mode && MainV2.speechEnable && MainV2.getConfig("speechmodeenabled") == "True")
bytearray = mavinterface.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_SYS_STATUS];
if (bytearray != null)
{ {
MainV2.speechEngine.SpeakAsync(Common.speechConversion(MainV2.getConfig("speechmode"))); var sysstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_sys_status_t>(6);
battery_voltage = sysstatus.voltage_battery;
battery_remaining = sysstatus.battery_remaining;
current = sysstatus.current_battery;
packetdropremote = sysstatus.drop_rate_comm;
//MAVLink.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_SYS_STATUS] = null;
} }
}
bytearray = mavinterface.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_SYS_STATUS];
if (bytearray != null)
{
var sysstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_sys_status_t>(6);
battery_voltage = sysstatus.voltage_battery;
battery_remaining = sysstatus.battery_remaining;
current = sysstatus.current_battery;
packetdropremote = sysstatus.drop_rate_comm;
//MAVLink.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_SYS_STATUS] = null;
}
#else #else
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SYS_STATUS]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SYS_STATUS];
@ -665,73 +670,73 @@ namespace ArdupilotMega
} }
#endif #endif
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_PRESSURE]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_PRESSURE];
if (bytearray != null) if (bytearray != null)
{ {
var pres = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_pressure_t>(6); var pres = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_pressure_t>(6);
press_abs = pres.press_abs; press_abs = pres.press_abs;
press_temp = pres.temperature; press_temp = pres.temperature;
} }
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SENSOR_OFFSETS]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SENSOR_OFFSETS];
if (bytearray != null) if (bytearray != null)
{ {
var sensofs = bytearray.ByteArrayToStructure<MAVLink.mavlink_sensor_offsets_t>(6); var sensofs = bytearray.ByteArrayToStructure<MAVLink.mavlink_sensor_offsets_t>(6);
mag_ofs_x = sensofs.mag_ofs_x; mag_ofs_x = sensofs.mag_ofs_x;
mag_ofs_y = sensofs.mag_ofs_y; mag_ofs_y = sensofs.mag_ofs_y;
mag_ofs_z = sensofs.mag_ofs_z; mag_ofs_z = sensofs.mag_ofs_z;
mag_declination = sensofs.mag_declination; mag_declination = sensofs.mag_declination;
raw_press = sensofs.raw_press; raw_press = sensofs.raw_press;
raw_temp = sensofs.raw_temp; raw_temp = sensofs.raw_temp;
gyro_cal_x = sensofs.gyro_cal_x; gyro_cal_x = sensofs.gyro_cal_x;
gyro_cal_y = sensofs.gyro_cal_y; gyro_cal_y = sensofs.gyro_cal_y;
gyro_cal_z = sensofs.gyro_cal_z; gyro_cal_z = sensofs.gyro_cal_z;
accel_cal_x = sensofs.accel_cal_x; accel_cal_x = sensofs.accel_cal_x;
accel_cal_y = sensofs.accel_cal_y; accel_cal_y = sensofs.accel_cal_y;
accel_cal_z = sensofs.accel_cal_z; accel_cal_z = sensofs.accel_cal_z;
} }
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_ATTITUDE]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_ATTITUDE];
if (bytearray != null) if (bytearray != null)
{ {
var att = bytearray.ByteArrayToStructure<MAVLink.mavlink_attitude_t>(6); var att = bytearray.ByteArrayToStructure<MAVLink.mavlink_attitude_t>(6);
roll = att.roll * rad2deg; roll = att.roll * rad2deg;
pitch = att.pitch * rad2deg; pitch = att.pitch * rad2deg;
yaw = att.yaw * rad2deg; yaw = att.yaw * rad2deg;
// Console.WriteLine(roll + " " + pitch + " " + yaw); // Console.WriteLine(roll + " " + pitch + " " + yaw);
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_ATTITUDE] = null; //MAVLink.packets[MAVLink.MAVLINK_MSG_ID_ATTITUDE] = null;
} }
#if MAVLINK10 #if MAVLINK10
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT];
if (bytearray != null) if (bytearray != null)
{ {
var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_raw_int_t>(6); var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_raw_int_t>(6);
lat = gps.lat * 1.0e-7f; lat = gps.lat * 1.0e-7f;
lng = gps.lon * 1.0e-7f; lng = gps.lon * 1.0e-7f;
// alt = gps.alt; // using vfr as includes baro calc // alt = gps.alt; // using vfr as includes baro calc
gpsstatus = gps.fix_type; gpsstatus = gps.fix_type;
// Console.WriteLine("gpsfix {0}",gpsstatus); // Console.WriteLine("gpsfix {0}",gpsstatus);
gpshdop = gps.eph; gpshdop = gps.eph;
satcount = gps.satellites_visible; satcount = gps.satellites_visible;
groundspeed = gps.vel * 1.0e-2f; groundspeed = gps.vel * 1.0e-2f;
groundcourse = gps.cog * 1.0e-2f; groundcourse = gps.cog * 1.0e-2f;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW] = null; //MAVLink.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW] = null;
} }
#else #else
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW];
@ -755,52 +760,52 @@ namespace ArdupilotMega
} }
#endif #endif
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_STATUS]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_STATUS];
if (bytearray != null) if (bytearray != null)
{
var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_status_t>(6);
satcount = gps.satellites_visible;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RADIO];
if (bytearray != null)
{
var radio = bytearray.ByteArrayToStructure<MAVLink.mavlink_radio_t>(6);
rssi = radio.rssi;
remrssi = radio.remrssi;
txbuffer = radio.txbuf;
rxerrors = radio.rxerrors;
noise = radio.noise;
remnoise = radio.remnoise;
fixedp = radio.fixedp;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION_INT];
if (bytearray != null)
{
var loc = bytearray.ByteArrayToStructure<MAVLink.mavlink_global_position_int_t>(6);
//alt = loc.alt / 1000.0f;
lat = loc.lat / 10000000.0f;
lng = loc.lon / 10000000.0f;
}
#if MAVLINK10
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MISSION_CURRENT];
if (bytearray != null)
{
var wpcur = bytearray.ByteArrayToStructure<MAVLink.mavlink_mission_current_t>(6);
int oldwp = (int)wpno;
wpno = wpcur.seq;
if (oldwp != wpno && MainV2.speechEnable && MainV2.getConfig("speechwaypointenabled") == "True")
{ {
MainV2.speechEngine.SpeakAsync(Common.speechConversion(MainV2.getConfig("speechwaypoint"))); var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_status_t>(6);
satcount = gps.satellites_visible;
} }
//MAVLink.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_WAYPOINT_CURRENT] = null; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RADIO];
} if (bytearray != null)
{
var radio = bytearray.ByteArrayToStructure<MAVLink.mavlink_radio_t>(6);
rssi = radio.rssi;
remrssi = radio.remrssi;
txbuffer = radio.txbuf;
rxerrors = radio.rxerrors;
noise = radio.noise;
remnoise = radio.remnoise;
fixedp = radio.fixedp;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION_INT];
if (bytearray != null)
{
var loc = bytearray.ByteArrayToStructure<MAVLink.mavlink_global_position_int_t>(6);
//alt = loc.alt / 1000.0f;
lat = loc.lat / 10000000.0f;
lng = loc.lon / 10000000.0f;
}
#if MAVLINK10
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MISSION_CURRENT];
if (bytearray != null)
{
var wpcur = bytearray.ByteArrayToStructure<MAVLink.mavlink_mission_current_t>(6);
int oldwp = (int)wpno;
wpno = wpcur.seq;
if (oldwp != wpno && MainV2.speechEnable && MainV2.getConfig("speechwaypointenabled") == "True")
{
MainV2.speechEngine.SpeakAsync(Common.speechConversion(MainV2.getConfig("speechwaypoint")));
}
//MAVLink.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_WAYPOINT_CURRENT] = null;
}
#else #else
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION];
@ -832,145 +837,146 @@ namespace ArdupilotMega
#endif #endif
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT]; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT];
if (bytearray != null) if (bytearray != null)
{
var nav = bytearray.ByteArrayToStructure<MAVLink.mavlink_nav_controller_output_t>(6);
nav_roll = nav.nav_roll;
nav_pitch = nav.nav_pitch;
nav_bearing = nav.nav_bearing;
target_bearing = nav.target_bearing;
wp_dist = nav.wp_dist;
alt_error = nav.alt_error;
aspd_error = nav.aspd_error;
xtrack_error = nav.xtrack_error;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW];
if (bytearray != null)
{
var rcin = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_raw_t>(6);
ch1in = rcin.chan1_raw;
ch2in = rcin.chan2_raw;
ch3in = rcin.chan3_raw;
ch4in = rcin.chan4_raw;
ch5in = rcin.chan5_raw;
ch6in = rcin.chan6_raw;
ch7in = rcin.chan7_raw;
ch8in = rcin.chan8_raw;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW];
if (bytearray != null)
{
var servoout = bytearray.ByteArrayToStructure<MAVLink.mavlink_servo_output_raw_t>(6);
ch1out = servoout.servo1_raw;
ch2out = servoout.servo2_raw;
ch3out = servoout.servo3_raw;
ch4out = servoout.servo4_raw;
ch5out = servoout.servo5_raw;
ch6out = servoout.servo6_raw;
ch7out = servoout.servo7_raw;
ch8out = servoout.servo8_raw;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU];
if (bytearray != null)
{
var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_raw_imu_t>(6);
gx = imu.xgyro;
gy = imu.ygyro;
gz = imu.zgyro;
ax = imu.xacc;
ay = imu.yacc;
az = imu.zacc;
mx = imu.xmag;
my = imu.ymag;
mz = imu.zmag;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_IMU];
if (bytearray != null)
{
var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_imu_t>(6);
gx = imu.xgyro;
gy = imu.ygyro;
gz = imu.zgyro;
ax = imu.xacc;
ay = imu.yacc;
az = imu.zacc;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_VFR_HUD];
if (bytearray != null)
{
var vfr = bytearray.ByteArrayToStructure<MAVLink.mavlink_vfr_hud_t>(6);
groundspeed = vfr.groundspeed;
airspeed = vfr.airspeed;
alt = vfr.alt; // this might include baro
//climbrate = vfr.climb;
if ((DateTime.Now - lastalt).TotalSeconds >= 0.2 && oldalt != alt)
{ {
climbrate = (alt - oldalt) / (float)(DateTime.Now - lastalt).TotalSeconds; var nav = bytearray.ByteArrayToStructure<MAVLink.mavlink_nav_controller_output_t>(6);
verticalspeed = (alt - oldalt) / (float)(DateTime.Now - lastalt).TotalSeconds;
if (float.IsInfinity(_verticalspeed)) nav_roll = nav.nav_roll;
_verticalspeed = 0; nav_pitch = nav.nav_pitch;
lastalt = DateTime.Now; nav_bearing = nav.nav_bearing;
oldalt = alt; target_bearing = nav.target_bearing;
wp_dist = nav.wp_dist;
alt_error = nav.alt_error;
aspd_error = nav.aspd_error;
xtrack_error = nav.xtrack_error;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT] = null;
} }
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_VFR_HUD] = null; bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW];
if (bytearray != null)
{
var rcin = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_raw_t>(6);
ch1in = rcin.chan1_raw;
ch2in = rcin.chan2_raw;
ch3in = rcin.chan3_raw;
ch4in = rcin.chan4_raw;
ch5in = rcin.chan5_raw;
ch6in = rcin.chan6_raw;
ch7in = rcin.chan7_raw;
ch8in = rcin.chan8_raw;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW];
if (bytearray != null)
{
var servoout = bytearray.ByteArrayToStructure<MAVLink.mavlink_servo_output_raw_t>(6);
ch1out = servoout.servo1_raw;
ch2out = servoout.servo2_raw;
ch3out = servoout.servo3_raw;
ch4out = servoout.servo4_raw;
ch5out = servoout.servo5_raw;
ch6out = servoout.servo6_raw;
ch7out = servoout.servo7_raw;
ch8out = servoout.servo8_raw;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU];
if (bytearray != null)
{
var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_raw_imu_t>(6);
gx = imu.xgyro;
gy = imu.ygyro;
gz = imu.zgyro;
ax = imu.xacc;
ay = imu.yacc;
az = imu.zacc;
mx = imu.xmag;
my = imu.ymag;
mz = imu.zmag;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_IMU];
if (bytearray != null)
{
var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_imu_t>(6);
gx = imu.xgyro;
gy = imu.ygyro;
gz = imu.zgyro;
ax = imu.xacc;
ay = imu.yacc;
az = imu.zacc;
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_VFR_HUD];
if (bytearray != null)
{
var vfr = bytearray.ByteArrayToStructure<MAVLink.mavlink_vfr_hud_t>(6);
groundspeed = vfr.groundspeed;
airspeed = vfr.airspeed;
alt = vfr.alt; // this might include baro
//climbrate = vfr.climb;
if ((DateTime.Now - lastalt).TotalSeconds >= 0.2 && oldalt != alt)
{
climbrate = (alt - oldalt) / (float)(DateTime.Now - lastalt).TotalSeconds;
verticalspeed = (alt - oldalt) / (float)(DateTime.Now - lastalt).TotalSeconds;
if (float.IsInfinity(_verticalspeed))
_verticalspeed = 0;
lastalt = DateTime.Now;
oldalt = alt;
}
//MAVLink.packets[MAVLink.MAVLINK_MSG_ID_VFR_HUD] = null;
}
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MEMINFO];
if (bytearray != null)
{
var mem = bytearray.ByteArrayToStructure<MAVLink.mavlink_meminfo_t>(6);
freemem = mem.freemem;
brklevel = mem.brkval;
}
} }
bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MEMINFO]; //Console.WriteLine(DateTime.Now.Millisecond + " start ");
if (bytearray != null) // update form
try
{ {
var mem = bytearray.ByteArrayToStructure<MAVLink.mavlink_meminfo_t>(6); if (bs != null)
freemem = mem.freemem; {
brklevel = mem.brkval; //System.Diagnostics.Debug.WriteLine(DateTime.Now.Millisecond);
//Console.WriteLine(DateTime.Now.Millisecond);
bs.DataSource = this;
// Console.WriteLine(DateTime.Now.Millisecond + " 1 " + updatenow + " " + System.Threading.Thread.CurrentThread.Name);
bs.ResetBindings(false);
//Console.WriteLine(DateTime.Now.Millisecond + " done ");
}
} }
catch { log.InfoFormat("CurrentState Binding error"); }
} }
//Console.WriteLine(DateTime.Now.Millisecond + " start ");
// update form
try
{
if (bs != null)
{
//System.Diagnostics.Debug.WriteLine(DateTime.Now.Millisecond);
//Console.WriteLine(DateTime.Now.Millisecond);
bs.DataSource = this;
// Console.WriteLine(DateTime.Now.Millisecond + " 1 " + updatenow + " " + System.Threading.Thread.CurrentThread.Name);
bs.ResetBindings(false);
//Console.WriteLine(DateTime.Now.Millisecond + " done ");
}
}
catch { log.InfoFormat("CurrentState Binding error"); }
} }
public object Clone() public object Clone()

View File

@ -30,24 +30,24 @@
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigAP_Limits)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigAP_Limits));
this.LNK_wiki = new System.Windows.Forms.LinkLabel(); this.LNK_wiki = new System.Windows.Forms.LinkLabel();
this.LIM_ENABLED = new System.Windows.Forms.CheckBox(); this.LIM_ENABLED = new ArdupilotMega.Controls.MavlinkCheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox1 = new System.Windows.Forms.GroupBox();
this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox1 = new System.Windows.Forms.TextBox();
this.groupBox5 = new System.Windows.Forms.GroupBox(); this.groupBox5 = new System.Windows.Forms.GroupBox();
this.LIM_GPSLCK_REQ = new System.Windows.Forms.CheckBox(); this.LIM_GPSLCK_REQ = new ArdupilotMega.Controls.MavlinkCheckBox();
this.LIM_FNC_REQ = new System.Windows.Forms.CheckBox(); this.LIM_FNC_REQ = new ArdupilotMega.Controls.MavlinkCheckBox();
this.LIM_ALT_REQ = new System.Windows.Forms.CheckBox(); this.LIM_ALT_REQ = new ArdupilotMega.Controls.MavlinkCheckBox();
this.groupBox4 = new System.Windows.Forms.GroupBox(); this.groupBox4 = new System.Windows.Forms.GroupBox();
this.LIM_REQUIRED = new System.Windows.Forms.CheckBox(); this.LIM_REQUIRED = new ArdupilotMega.Controls.MavlinkCheckBox();
this.myLabel4 = new ArdupilotMega.Controls.MyLabel(); this.myLabel4 = new ArdupilotMega.Controls.MyLabel();
this.LIM_CHANNEL = new System.Windows.Forms.NumericUpDown(); this.LIM_CHANNEL = new System.Windows.Forms.NumericUpDown();
this.myLabel3 = new ArdupilotMega.Controls.MyLabel(); this.myLabel3 = new ArdupilotMega.Controls.MyLabel();
this.LIM_FNC_RAD = new System.Windows.Forms.NumericUpDown(); this.LIM_FNC_RAD = new System.Windows.Forms.NumericUpDown();
this.LIM_FNC_SMPL = new System.Windows.Forms.CheckBox(); this.LIM_FNC_SMPL = new ArdupilotMega.Controls.MavlinkCheckBox();
this.groupBox3 = new System.Windows.Forms.GroupBox(); this.groupBox3 = new System.Windows.Forms.GroupBox();
this.LIM_GPSLCK_ON = new System.Windows.Forms.CheckBox(); this.LIM_GPSLCK_ON = new ArdupilotMega.Controls.MavlinkCheckBox();
this.groupBox2 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox();
this.LIM_ALT_ON = new System.Windows.Forms.CheckBox(); this.LIM_ALT_ON = new ArdupilotMega.Controls.MavlinkCheckBox();
this.myLabel1 = new ArdupilotMega.Controls.MyLabel(); this.myLabel1 = new ArdupilotMega.Controls.MyLabel();
this.LIM_ALT_MAX = new System.Windows.Forms.NumericUpDown(); this.LIM_ALT_MAX = new System.Windows.Forms.NumericUpDown();
this.myLabel2 = new ArdupilotMega.Controls.MyLabel(); this.myLabel2 = new ArdupilotMega.Controls.MyLabel();
@ -281,28 +281,28 @@
#endregion #endregion
private System.Windows.Forms.LinkLabel LNK_wiki; private System.Windows.Forms.LinkLabel LNK_wiki;
private System.Windows.Forms.CheckBox LIM_ENABLED; private ArdupilotMega.Controls.MavlinkCheckBox LIM_ENABLED;
private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox1;
private Controls.MyLabel myLabel2; private Controls.MyLabel myLabel2;
private Controls.MyLabel myLabel1; private Controls.MyLabel myLabel1;
private System.Windows.Forms.NumericUpDown LIM_ALT_MAX; private System.Windows.Forms.NumericUpDown LIM_ALT_MAX;
private System.Windows.Forms.NumericUpDown LIM_ALT_MIN; private System.Windows.Forms.NumericUpDown LIM_ALT_MIN;
private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.CheckBox LIM_ALT_ON; private ArdupilotMega.Controls.MavlinkCheckBox LIM_ALT_ON;
private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.CheckBox LIM_GPSLCK_ON; private ArdupilotMega.Controls.MavlinkCheckBox LIM_GPSLCK_ON;
private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.GroupBox groupBox4;
private Controls.MyLabel myLabel3; private Controls.MyLabel myLabel3;
private System.Windows.Forms.NumericUpDown LIM_FNC_RAD; private System.Windows.Forms.NumericUpDown LIM_FNC_RAD;
private System.Windows.Forms.CheckBox LIM_FNC_SMPL; private ArdupilotMega.Controls.MavlinkCheckBox LIM_FNC_SMPL;
private Controls.MyLabel myLabel4; private Controls.MyLabel myLabel4;
private System.Windows.Forms.NumericUpDown LIM_CHANNEL; private System.Windows.Forms.NumericUpDown LIM_CHANNEL;
private System.Windows.Forms.CheckBox LIM_REQUIRED; private ArdupilotMega.Controls.MavlinkCheckBox LIM_REQUIRED;
private System.Windows.Forms.GroupBox groupBox5; private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.CheckBox LIM_FNC_REQ; private ArdupilotMega.Controls.MavlinkCheckBox LIM_FNC_REQ;
private System.Windows.Forms.CheckBox LIM_ALT_REQ; private ArdupilotMega.Controls.MavlinkCheckBox LIM_ALT_REQ;
private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.CheckBox LIM_GPSLCK_REQ; private ArdupilotMega.Controls.MavlinkCheckBox LIM_GPSLCK_REQ;
} }
} }

View File

@ -25,8 +25,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
{ {
#if MAVLINK10 #if MAVLINK10
Log.Info("Sending level command (mavlink 1.0)"); Log.Info("Sending level command (mavlink 1.0)");
int fixme; // needs to be accel only MainV2.comPort.doCommand(MAVLink.MAV_CMD.PREFLIGHT_CALIBRATION,1,0,0,0,0,0,0);
MainV2.comPort.doCommand(MAVLink.MAV_CMD.PREFLIGHT_CALIBRATION,1,1,1,1,1,1,1);
#else #else
Log.Info("Sending level command (mavlink 0.9)"); Log.Info("Sending level command (mavlink 0.9)");
MainV2.comPort.doAction(MAVLink.MAV_ACTION.MAV_ACTION_CALIBRATE_ACC); MainV2.comPort.doAction(MAVLink.MAV_ACTION.MAV_ACTION_CALIBRATE_ACC);

View File

@ -181,7 +181,6 @@
// label5 // label5
// //
resources.ApplyResources(this.label5, "label5"); resources.ApplyResources(this.label5, "label5");
this.label5.ForeColor = System.Drawing.SystemColors.ControlText;
this.label5.Name = "label5"; this.label5.Name = "label5";
// //
// groupBox2 // groupBox2
@ -193,7 +192,6 @@
// label1 // label1
// //
resources.ApplyResources(this.label1, "label1"); resources.ApplyResources(this.label1, "label1");
this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
this.label1.Name = "label1"; this.label1.Name = "label1";
// //
// groupBox1 // groupBox1
@ -205,7 +203,6 @@
// label2 // label2
// //
resources.ApplyResources(this.label2, "label2"); resources.ApplyResources(this.label2, "label2");
this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
this.label2.Name = "label2"; this.label2.Name = "label2";
// //
// groupBox3 // groupBox3
@ -217,7 +214,6 @@
// label3 // label3
// //
resources.ApplyResources(this.label3, "label3"); resources.ApplyResources(this.label3, "label3");
this.label3.ForeColor = System.Drawing.SystemColors.ControlText;
this.label3.Name = "label3"; this.label3.Name = "label3";
// //
// groupBox4 // groupBox4

View File

@ -139,7 +139,7 @@
<value>BUT_MagCalibrationLive</value> <value>BUT_MagCalibrationLive</value>
</data> </data>
<data name="&gt;&gt;BUT_MagCalibrationLive.Type" xml:space="preserve"> <data name="&gt;&gt;BUT_MagCalibrationLive.Type" xml:space="preserve">
<value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4589.38394, Culture=neutral, PublicKeyToken=null</value> <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4592.29704, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;BUT_MagCalibrationLive.Parent" xml:space="preserve"> <data name="&gt;&gt;BUT_MagCalibrationLive.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
@ -214,7 +214,7 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="CHK_enableoptflow.Location" type="System.Drawing.Point, System.Drawing"> <data name="CHK_enableoptflow.Location" type="System.Drawing.Point, System.Drawing">
<value>108, 327</value> <value>92, 357</value>
</data> </data>
<data name="CHK_enableoptflow.Size" type="System.Drawing.Size, System.Drawing"> <data name="CHK_enableoptflow.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 19</value> <value>134, 19</value>
@ -223,7 +223,7 @@
<value>44</value> <value>44</value>
</data> </data>
<data name="CHK_enableoptflow.Text" xml:space="preserve"> <data name="CHK_enableoptflow.Text" xml:space="preserve">
<value>Enable Optical Flow</value> <value>Enable</value>
</data> </data>
<data name="&gt;&gt;CHK_enableoptflow.Name" xml:space="preserve"> <data name="&gt;&gt;CHK_enableoptflow.Name" xml:space="preserve">
<value>CHK_enableoptflow</value> <value>CHK_enableoptflow</value>
@ -352,7 +352,7 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="CHK_enableairspeed.Location" type="System.Drawing.Point, System.Drawing"> <data name="CHK_enableairspeed.Location" type="System.Drawing.Point, System.Drawing">
<value>108, 222</value> <value>92, 249</value>
</data> </data>
<data name="CHK_enableairspeed.Size" type="System.Drawing.Size, System.Drawing"> <data name="CHK_enableairspeed.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 17</value> <value>103, 17</value>
@ -361,7 +361,7 @@
<value>39</value> <value>39</value>
</data> </data>
<data name="CHK_enableairspeed.Text" xml:space="preserve"> <data name="CHK_enableairspeed.Text" xml:space="preserve">
<value>Enable Airspeed</value> <value>Enable</value>
</data> </data>
<data name="&gt;&gt;CHK_enableairspeed.Name" xml:space="preserve"> <data name="&gt;&gt;CHK_enableairspeed.Name" xml:space="preserve">
<value>CHK_enableairspeed</value> <value>CHK_enableairspeed</value>
@ -382,7 +382,7 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="CHK_enablesonar.Location" type="System.Drawing.Point, System.Drawing"> <data name="CHK_enablesonar.Location" type="System.Drawing.Point, System.Drawing">
<value>108, 114</value> <value>92, 141</value>
</data> </data>
<data name="CHK_enablesonar.Size" type="System.Drawing.Size, System.Drawing"> <data name="CHK_enablesonar.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 17</value> <value>90, 17</value>
@ -391,7 +391,7 @@
<value>40</value> <value>40</value>
</data> </data>
<data name="CHK_enablesonar.Text" xml:space="preserve"> <data name="CHK_enablesonar.Text" xml:space="preserve">
<value>Enable Sonar</value> <value>Enable</value>
</data> </data>
<data name="&gt;&gt;CHK_enablesonar.Name" xml:space="preserve"> <data name="&gt;&gt;CHK_enablesonar.Name" xml:space="preserve">
<value>CHK_enablesonar</value> <value>CHK_enablesonar</value>
@ -412,16 +412,16 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="CHK_enablecompass.Location" type="System.Drawing.Point, System.Drawing"> <data name="CHK_enablecompass.Location" type="System.Drawing.Point, System.Drawing">
<value>108, 6</value> <value>92, 33</value>
</data> </data>
<data name="CHK_enablecompass.Size" type="System.Drawing.Size, System.Drawing"> <data name="CHK_enablecompass.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 17</value> <value>82, 17</value>
</data> </data>
<data name="CHK_enablecompass.TabIndex" type="System.Int32, mscorlib"> <data name="CHK_enablecompass.TabIndex" type="System.Int32, mscorlib">
<value>41</value> <value>41</value>
</data> </data>
<data name="CHK_enablecompass.Text" xml:space="preserve"> <data name="CHK_enablecompass.Text" xml:space="preserve">
<value>Enable Compass</value> <value>Enable</value>
</data> </data>
<data name="&gt;&gt;CHK_enablecompass.Name" xml:space="preserve"> <data name="&gt;&gt;CHK_enablecompass.Name" xml:space="preserve">
<value>CHK_enablecompass</value> <value>CHK_enablecompass</value>
@ -541,7 +541,7 @@
<value>BUT_MagCalibrationLog</value> <value>BUT_MagCalibrationLog</value>
</data> </data>
<data name="&gt;&gt;BUT_MagCalibrationLog.Type" xml:space="preserve"> <data name="&gt;&gt;BUT_MagCalibrationLog.Type" xml:space="preserve">
<value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4589.38394, Culture=neutral, PublicKeyToken=null</value> <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4592.29704, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;BUT_MagCalibrationLog.Parent" xml:space="preserve"> <data name="&gt;&gt;BUT_MagCalibrationLog.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
@ -556,7 +556,7 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="CHK_autodec.Location" type="System.Drawing.Point, System.Drawing"> <data name="CHK_autodec.Location" type="System.Drawing.Point, System.Drawing">
<value>92, 50</value> <value>92, 55</value>
</data> </data>
<data name="CHK_autodec.Size" type="System.Drawing.Size, System.Drawing"> <data name="CHK_autodec.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 17</value> <value>82, 17</value>
@ -579,9 +579,6 @@
<data name="&gt;&gt;CHK_autodec.ZOrder" xml:space="preserve"> <data name="&gt;&gt;CHK_autodec.ZOrder" xml:space="preserve">
<value>12</value> <value>12</value>
</data> </data>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label5.Font" type="System.Drawing.Font, System.Drawing"> <data name="label5.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 12pt</value> <value>Microsoft Sans Serif, 12pt</value>
</data> </data>
@ -633,9 +630,6 @@
<data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve"> <data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
<value>11</value> <value>11</value>
</data> </data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Font" type="System.Drawing.Font, System.Drawing"> <data name="label1.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 12pt</value> <value>Microsoft Sans Serif, 12pt</value>
</data> </data>
@ -690,9 +684,6 @@
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>8</value> <value>8</value>
</data> </data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Font" type="System.Drawing.Font, System.Drawing"> <data name="label2.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 12pt</value> <value>Microsoft Sans Serif, 12pt</value>
</data> </data>
@ -747,9 +738,6 @@
<data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve"> <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.Font" type="System.Drawing.Font, System.Drawing"> <data name="label3.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 12pt</value> <value>Microsoft Sans Serif, 12pt</value>
</data> </data>

View File

@ -43,76 +43,114 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
LNK_wiki.MouseLeave += (s, e) => FadeLinkTo((LinkLabel)s, Color.WhiteSmoke); LNK_wiki.MouseLeave += (s, e) => FadeLinkTo((LinkLabel)s, Color.WhiteSmoke);
SetErrorMessageOpacity(); SetErrorMessageOpacity();
if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane)
{
mavlinkComboBoxTilt.Items.AddRange(Enum.GetNames(typeof(Channelap)));
mavlinkComboBoxRoll.Items.AddRange(Enum.GetNames(typeof(Channelap)));
mavlinkComboBoxPan.Items.AddRange(Enum.GetNames(typeof(Channelap)));
}
else
{
mavlinkComboBoxTilt.Items.AddRange(Enum.GetNames(typeof(Channelac)));
mavlinkComboBoxRoll.Items.AddRange(Enum.GetNames(typeof(Channelac)));
mavlinkComboBoxPan.Items.AddRange(Enum.GetNames(typeof(Channelac)));
}
} }
// 0 = disabled 1 = enabled // 0 = disabled 1 = enabled
enum Channelap enum Channelap
{ {
Disable = 0, Disable = 0,
CH_5 = 1, RC5 = 1,
CH_6 = 1, RC6 = 1,
CH_7 = 1, RC7 = 1,
CH_8 = 1 RC8 = 1
} }
// 0 = disabled 1 = enabled // 0 = disabled 1 = enabled
enum Channelac enum Channelac
{ {
Disable = 0, Disable = 0,
CAM_P = 7, CAM_P = 1,
CAM_R = 8, CAM_R = 1,
CAM_Y = 6 CAM_Y = 1
} }
public void Activate() public void Activate()
{ {
if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) foreach (string item in MainV2.comPort.param.Keys)
{ {
mavlinkComboBoxTilt.setup(typeof(Channelap), "MNT_STAB_PITCH", MainV2.comPort.param); if (item.EndsWith("_FUNCTION"))
mavlinkComboBoxRoll.setup(typeof(Channelap), "MNT_STAB_ROLL", MainV2.comPort.param); {
mavlinkComboBoxPan.setup(typeof(Channelap), "MNT_STAB_YAW", MainV2.comPort.param); switch (MainV2.comPort.param[item].ToString())
} {
else case "6":
{ mavlinkComboBoxPan.Text = item.Replace("_FUNCTION", "");
mavlinkComboBoxTilt.setup(typeof(Channelac), "CAM_P_FUNCTION", MainV2.comPort.param, "MNT_STAB_PITCH"); break;
mavlinkComboBoxRoll.setup(typeof(Channelac), "CAM_R_FUNCTION", MainV2.comPort.param, "MNT_STAB_ROLL"); case "7":
mavlinkComboBoxPan.setup(typeof(Channelac), "CAM_Y_FUNCTION", MainV2.comPort.param, "MNT_STAB_YAW"); mavlinkComboBoxTilt.Text = item.Replace("_FUNCTION", "");
break;
case "8":
mavlinkComboBoxRoll.Text = item.Replace("_FUNCTION", "");
break;
default:
break;
}
}
} }
updatePitch(); updatePitch();
updateRoll(); updateRoll();
updateYaw(); updateYaw();
} }
void updatePitch() void updatePitch()
{ {
// pitch // pitch
mavlinkNumericUpDown11.setup(800, 2200, 1, 1, mavlinkComboBoxTilt.Text +"_MIN", MainV2.comPort.param); if (mavlinkComboBoxTilt.Text != "Disable")
mavlinkNumericUpDown12.setup(800, 2200, 1, 1, mavlinkComboBoxTilt.Text + "_MAX", MainV2.comPort.param); {
mavlinkNumericUpDown1.setup(-90, 0, 100, 1, mavlinkComboBoxTilt.Text + "_ANGLE_MIN", MainV2.comPort.param); MainV2.comPort.setParam(mavlinkComboBoxTilt.Text + "_FUNCTION",7);
mavlinkNumericUpDown2.setup(0, 90, 100, 1, mavlinkComboBoxTilt.Text + "_ANGLE_MAX", MainV2.comPort.param); MainV2.comPort.setParam("MNT_STAB_PITCH",1);
mavlinkCheckBox1.setup(-1, 1, mavlinkComboBoxTilt.Text + "_REV", MainV2.comPort.param); }
mavlinkNumericUpDownTSM.setup(800, 2200, 1, 1, mavlinkComboBoxTilt.Text +"_MIN", MainV2.comPort.param);
mavlinkNumericUpDownTSMX.setup(800, 2200, 1, 1, mavlinkComboBoxTilt.Text + "_MAX", MainV2.comPort.param);
mavlinkNumericUpDownTAM.setup(-90, 0, 100, 1, mavlinkComboBoxTilt.Text + "_ANGLE_MIN", MainV2.comPort.param);
mavlinkNumericUpDownTAMX.setup(0, 90, 100, 1, mavlinkComboBoxTilt.Text + "_ANGLE_MAX", MainV2.comPort.param);
mavlinkCheckBoxTR.setup(-1, 1, mavlinkComboBoxTilt.Text + "_REV", MainV2.comPort.param);
} }
void updateRoll() void updateRoll()
{ {
// roll // roll
mavlinkNumericUpDown5.setup(800, 2200, 1, 1, mavlinkComboBoxRoll.Text +"_MIN", MainV2.comPort.param); if (mavlinkComboBoxRoll.Text != "Disable")
mavlinkNumericUpDown6.setup(800, 2200, 1, 1, mavlinkComboBoxRoll.Text + "_MAX", MainV2.comPort.param); {
mavlinkNumericUpDown3.setup(-90, 0, 100, 1, mavlinkComboBoxRoll.Text + "_ANGLE_MIN", MainV2.comPort.param); MainV2.comPort.setParam(mavlinkComboBoxRoll.Text + "_FUNCTION", 8);
mavlinkNumericUpDown4.setup(0, 90, 100, 1, mavlinkComboBoxRoll.Text + "_ANGLE_MAX", MainV2.comPort.param); MainV2.comPort.setParam("MNT_STAB_ROLL", 1);
mavlinkCheckBox2.setup(-1, 1, mavlinkComboBoxRoll.Text + "_REV", MainV2.comPort.param); }
mavlinkNumericUpDownRSM.setup(800, 2200, 1, 1, mavlinkComboBoxRoll.Text +"_MIN", MainV2.comPort.param);
mavlinkNumericUpDownRSMX.setup(800, 2200, 1, 1, mavlinkComboBoxRoll.Text + "_MAX", MainV2.comPort.param);
mavlinkNumericUpDownRAM.setup(-90, 0, 100, 1, mavlinkComboBoxRoll.Text + "_ANGLE_MIN", MainV2.comPort.param);
mavlinkNumericUpDownRAMX.setup(0, 90, 100, 1, mavlinkComboBoxRoll.Text + "_ANGLE_MAX", MainV2.comPort.param);
mavlinkCheckBoxRR.setup(-1, 1, mavlinkComboBoxRoll.Text + "_REV", MainV2.comPort.param);
} }
void updateYaw() void updateYaw()
{ {
// yaw // yaw
mavlinkNumericUpDown9.setup(800, 2200, 1, 1, mavlinkComboBoxPan.Text + "_MIN", MainV2.comPort.param); if (mavlinkComboBoxPan.Text != "Disable")
mavlinkNumericUpDown10.setup(800, 2200, 1, 1, mavlinkComboBoxPan.Text + "_MAX", MainV2.comPort.param); {
mavlinkNumericUpDown7.setup(-90, 0, 100, 1, mavlinkComboBoxPan.Text + "_ANGLE_MIN", MainV2.comPort.param); MainV2.comPort.setParam(mavlinkComboBoxPan.Text + "_FUNCTION", 6);
mavlinkNumericUpDown8.setup(0, 90, 100, 1, mavlinkComboBoxPan.Text + "_ANGLE_MAX", MainV2.comPort.param); MainV2.comPort.setParam("MNT_STAB_YAW", 1);
mavlinkCheckBox3.setup(-1, 1, mavlinkComboBoxPan.Text + "_REV", MainV2.comPort.param); }
mavlinkNumericUpDownPSM.setup(800, 2200, 1, 1, mavlinkComboBoxPan.Text + "_MIN", MainV2.comPort.param);
mavlinkNumericUpDownPSMX.setup(800, 2200, 1, 1, mavlinkComboBoxPan.Text + "_MAX", MainV2.comPort.param);
mavlinkNumericUpDownPAM.setup(-90, 0, 100, 1, mavlinkComboBoxPan.Text + "_ANGLE_MIN", MainV2.comPort.param);
mavlinkNumericUpDownPAMX.setup(0, 90, 100, 1, mavlinkComboBoxPan.Text + "_ANGLE_MAX", MainV2.comPort.param);
mavlinkCheckBoxPR.setup(-1, 1, mavlinkComboBoxPan.Text + "_REV", MainV2.comPort.param);
} }
private void SetErrorMessageOpacity() private void SetErrorMessageOpacity()

View File

@ -47,54 +47,54 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label10 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label(); this.label11 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label(); this.label12 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown3 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownRAM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown4 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownRAMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.label13 = new System.Windows.Forms.Label(); this.label13 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label(); this.label14 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown5 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownRSM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown6 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownRSMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkCheckBox2 = new ArdupilotMega.Controls.MavlinkCheckBox(); this.mavlinkCheckBoxRR = new ArdupilotMega.Controls.MavlinkCheckBox();
this.label16 = new System.Windows.Forms.Label(); this.label16 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label(); this.label17 = new System.Windows.Forms.Label();
this.label18 = new System.Windows.Forms.Label(); this.label18 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label(); this.label19 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown7 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownPAM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown8 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownPAMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.label20 = new System.Windows.Forms.Label(); this.label20 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label(); this.label21 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown9 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownPSM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown10 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownPSMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkCheckBox3 = new ArdupilotMega.Controls.MavlinkCheckBox(); this.mavlinkCheckBoxPR = new ArdupilotMega.Controls.MavlinkCheckBox();
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown1 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownTAM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown2 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownTAMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.label7 = new System.Windows.Forms.Label(); this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label();
this.mavlinkNumericUpDown11 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownTSM = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkNumericUpDown12 = new ArdupilotMega.Controls.MavlinkNumericUpDown(); this.mavlinkNumericUpDownTSMX = new ArdupilotMega.Controls.MavlinkNumericUpDown();
this.mavlinkCheckBox1 = new ArdupilotMega.Controls.MavlinkCheckBox(); this.mavlinkCheckBoxTR = new ArdupilotMega.Controls.MavlinkCheckBox();
this.mavlinkComboBoxTilt = new ArdupilotMega.Controls.MavlinkComboBox(); this.mavlinkComboBoxTilt = new System.Windows.Forms.ComboBox();
this.mavlinkComboBoxRoll = new ArdupilotMega.Controls.MavlinkComboBox(); this.mavlinkComboBoxRoll = new System.Windows.Forms.ComboBox();
this.mavlinkComboBoxPan = new ArdupilotMega.Controls.MavlinkComboBox(); this.mavlinkComboBoxPan = new System.Windows.Forms.ComboBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PBOX_WarningIcon)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PBOX_WarningIcon)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRAM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown4)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRAMX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown5)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRSM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown6)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRSMX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown7)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPAM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown8)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPAMX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown9)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPSM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown10)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPSMX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTAM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTAMX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown11)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTSM)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown12)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTSMX)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// pictureBox1 // pictureBox1
@ -269,60 +269,60 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label12.TabIndex = 102; this.label12.TabIndex = 102;
this.label12.Text = "Min"; this.label12.Text = "Min";
// //
// mavlinkNumericUpDown3 // mavlinkNumericUpDownRAM
// //
this.mavlinkNumericUpDown3.Enabled = false; this.mavlinkNumericUpDownRAM.Enabled = false;
this.mavlinkNumericUpDown3.Increment = new decimal(new int[] { this.mavlinkNumericUpDownRAM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown3.Location = new System.Drawing.Point(385, 181); this.mavlinkNumericUpDownRAM.Location = new System.Drawing.Point(385, 181);
this.mavlinkNumericUpDown3.Max = 1F; this.mavlinkNumericUpDownRAM.Max = 1F;
this.mavlinkNumericUpDown3.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownRAM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown3.Min = 0F; this.mavlinkNumericUpDownRAM.Min = 0F;
this.mavlinkNumericUpDown3.Name = "mavlinkNumericUpDown3"; this.mavlinkNumericUpDownRAM.Name = "mavlinkNumericUpDownRAM";
this.mavlinkNumericUpDown3.param = null; this.mavlinkNumericUpDownRAM.param = null;
this.mavlinkNumericUpDown3.ParamName = null; this.mavlinkNumericUpDownRAM.ParamName = null;
this.mavlinkNumericUpDown3.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownRAM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown3.TabIndex = 101; this.mavlinkNumericUpDownRAM.TabIndex = 101;
this.mavlinkNumericUpDown3.Value = new decimal(new int[] { this.mavlinkNumericUpDownRAM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown4 // mavlinkNumericUpDownRAMX
// //
this.mavlinkNumericUpDown4.Enabled = false; this.mavlinkNumericUpDownRAMX.Enabled = false;
this.mavlinkNumericUpDown4.Increment = new decimal(new int[] { this.mavlinkNumericUpDownRAMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown4.Location = new System.Drawing.Point(385, 207); this.mavlinkNumericUpDownRAMX.Location = new System.Drawing.Point(385, 207);
this.mavlinkNumericUpDown4.Max = 1F; this.mavlinkNumericUpDownRAMX.Max = 1F;
this.mavlinkNumericUpDown4.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownRAMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown4.Min = 0F; this.mavlinkNumericUpDownRAMX.Min = 0F;
this.mavlinkNumericUpDown4.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownRAMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown4.Name = "mavlinkNumericUpDown4"; this.mavlinkNumericUpDownRAMX.Name = "mavlinkNumericUpDownRAMX";
this.mavlinkNumericUpDown4.param = null; this.mavlinkNumericUpDownRAMX.param = null;
this.mavlinkNumericUpDown4.ParamName = null; this.mavlinkNumericUpDownRAMX.ParamName = null;
this.mavlinkNumericUpDown4.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownRAMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown4.TabIndex = 100; this.mavlinkNumericUpDownRAMX.TabIndex = 100;
this.mavlinkNumericUpDown4.Value = new decimal(new int[] { this.mavlinkNumericUpDownRAMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
@ -348,85 +348,85 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label14.TabIndex = 98; this.label14.TabIndex = 98;
this.label14.Text = "Min"; this.label14.Text = "Min";
// //
// mavlinkNumericUpDown5 // mavlinkNumericUpDownRSM
// //
this.mavlinkNumericUpDown5.Enabled = false; this.mavlinkNumericUpDownRSM.Enabled = false;
this.mavlinkNumericUpDown5.Increment = new decimal(new int[] { this.mavlinkNumericUpDownRSM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown5.Location = new System.Drawing.Point(276, 181); this.mavlinkNumericUpDownRSM.Location = new System.Drawing.Point(276, 181);
this.mavlinkNumericUpDown5.Max = 1F; this.mavlinkNumericUpDownRSM.Max = 1F;
this.mavlinkNumericUpDown5.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownRSM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown5.Min = 0F; this.mavlinkNumericUpDownRSM.Min = 0F;
this.mavlinkNumericUpDown5.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownRSM.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown5.Name = "mavlinkNumericUpDown5"; this.mavlinkNumericUpDownRSM.Name = "mavlinkNumericUpDownRSM";
this.mavlinkNumericUpDown5.param = null; this.mavlinkNumericUpDownRSM.param = null;
this.mavlinkNumericUpDown5.ParamName = null; this.mavlinkNumericUpDownRSM.ParamName = null;
this.mavlinkNumericUpDown5.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownRSM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown5.TabIndex = 97; this.mavlinkNumericUpDownRSM.TabIndex = 97;
this.mavlinkNumericUpDown5.Value = new decimal(new int[] { this.mavlinkNumericUpDownRSM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown6 // mavlinkNumericUpDownRSMX
// //
this.mavlinkNumericUpDown6.Enabled = false; this.mavlinkNumericUpDownRSMX.Enabled = false;
this.mavlinkNumericUpDown6.Increment = new decimal(new int[] { this.mavlinkNumericUpDownRSMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown6.Location = new System.Drawing.Point(276, 207); this.mavlinkNumericUpDownRSMX.Location = new System.Drawing.Point(276, 207);
this.mavlinkNumericUpDown6.Max = 1F; this.mavlinkNumericUpDownRSMX.Max = 1F;
this.mavlinkNumericUpDown6.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownRSMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown6.Min = 0F; this.mavlinkNumericUpDownRSMX.Min = 0F;
this.mavlinkNumericUpDown6.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownRSMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown6.Name = "mavlinkNumericUpDown6"; this.mavlinkNumericUpDownRSMX.Name = "mavlinkNumericUpDownRSMX";
this.mavlinkNumericUpDown6.param = null; this.mavlinkNumericUpDownRSMX.param = null;
this.mavlinkNumericUpDown6.ParamName = null; this.mavlinkNumericUpDownRSMX.ParamName = null;
this.mavlinkNumericUpDown6.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownRSMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown6.TabIndex = 96; this.mavlinkNumericUpDownRSMX.TabIndex = 96;
this.mavlinkNumericUpDown6.Value = new decimal(new int[] { this.mavlinkNumericUpDownRSMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkCheckBox2 // mavlinkCheckBoxRR
// //
this.mavlinkCheckBox2.AutoSize = true; this.mavlinkCheckBoxRR.AutoSize = true;
this.mavlinkCheckBox2.Enabled = false; this.mavlinkCheckBoxRR.Enabled = false;
this.mavlinkCheckBox2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.mavlinkCheckBoxRR.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.mavlinkCheckBox2.Location = new System.Drawing.Point(267, 233); this.mavlinkCheckBoxRR.Location = new System.Drawing.Point(267, 233);
this.mavlinkCheckBox2.Name = "mavlinkCheckBox2"; this.mavlinkCheckBoxRR.Name = "mavlinkCheckBoxRR";
this.mavlinkCheckBox2.OffValue = 0F; this.mavlinkCheckBoxRR.OffValue = 0F;
this.mavlinkCheckBox2.OnValue = 1F; this.mavlinkCheckBoxRR.OnValue = 1F;
this.mavlinkCheckBox2.param = null; this.mavlinkCheckBoxRR.param = null;
this.mavlinkCheckBox2.ParamName = null; this.mavlinkCheckBoxRR.ParamName = null;
this.mavlinkCheckBox2.Size = new System.Drawing.Size(66, 17); this.mavlinkCheckBoxRR.Size = new System.Drawing.Size(66, 17);
this.mavlinkCheckBox2.TabIndex = 95; this.mavlinkCheckBoxRR.TabIndex = 95;
this.mavlinkCheckBox2.Text = "Reverse"; this.mavlinkCheckBoxRR.Text = "Reverse";
this.mavlinkCheckBox2.UseVisualStyleBackColor = true; this.mavlinkCheckBoxRR.UseVisualStyleBackColor = true;
// //
// label16 // label16
// //
@ -468,60 +468,60 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label19.TabIndex = 113; this.label19.TabIndex = 113;
this.label19.Text = "Min"; this.label19.Text = "Min";
// //
// mavlinkNumericUpDown7 // mavlinkNumericUpDownPAM
// //
this.mavlinkNumericUpDown7.Enabled = false; this.mavlinkNumericUpDownPAM.Enabled = false;
this.mavlinkNumericUpDown7.Increment = new decimal(new int[] { this.mavlinkNumericUpDownPAM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown7.Location = new System.Drawing.Point(385, 305); this.mavlinkNumericUpDownPAM.Location = new System.Drawing.Point(385, 305);
this.mavlinkNumericUpDown7.Max = 1F; this.mavlinkNumericUpDownPAM.Max = 1F;
this.mavlinkNumericUpDown7.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownPAM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown7.Min = 0F; this.mavlinkNumericUpDownPAM.Min = 0F;
this.mavlinkNumericUpDown7.Name = "mavlinkNumericUpDown7"; this.mavlinkNumericUpDownPAM.Name = "mavlinkNumericUpDownPAM";
this.mavlinkNumericUpDown7.param = null; this.mavlinkNumericUpDownPAM.param = null;
this.mavlinkNumericUpDown7.ParamName = null; this.mavlinkNumericUpDownPAM.ParamName = null;
this.mavlinkNumericUpDown7.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownPAM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown7.TabIndex = 112; this.mavlinkNumericUpDownPAM.TabIndex = 112;
this.mavlinkNumericUpDown7.Value = new decimal(new int[] { this.mavlinkNumericUpDownPAM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown8 // mavlinkNumericUpDownPAMX
// //
this.mavlinkNumericUpDown8.Enabled = false; this.mavlinkNumericUpDownPAMX.Enabled = false;
this.mavlinkNumericUpDown8.Increment = new decimal(new int[] { this.mavlinkNumericUpDownPAMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown8.Location = new System.Drawing.Point(385, 331); this.mavlinkNumericUpDownPAMX.Location = new System.Drawing.Point(385, 331);
this.mavlinkNumericUpDown8.Max = 1F; this.mavlinkNumericUpDownPAMX.Max = 1F;
this.mavlinkNumericUpDown8.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownPAMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown8.Min = 0F; this.mavlinkNumericUpDownPAMX.Min = 0F;
this.mavlinkNumericUpDown8.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownPAMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown8.Name = "mavlinkNumericUpDown8"; this.mavlinkNumericUpDownPAMX.Name = "mavlinkNumericUpDownPAMX";
this.mavlinkNumericUpDown8.param = null; this.mavlinkNumericUpDownPAMX.param = null;
this.mavlinkNumericUpDown8.ParamName = null; this.mavlinkNumericUpDownPAMX.ParamName = null;
this.mavlinkNumericUpDown8.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownPAMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown8.TabIndex = 111; this.mavlinkNumericUpDownPAMX.TabIndex = 111;
this.mavlinkNumericUpDown8.Value = new decimal(new int[] { this.mavlinkNumericUpDownPAMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
@ -547,85 +547,85 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label21.TabIndex = 109; this.label21.TabIndex = 109;
this.label21.Text = "Min"; this.label21.Text = "Min";
// //
// mavlinkNumericUpDown9 // mavlinkNumericUpDownPSM
// //
this.mavlinkNumericUpDown9.Enabled = false; this.mavlinkNumericUpDownPSM.Enabled = false;
this.mavlinkNumericUpDown9.Increment = new decimal(new int[] { this.mavlinkNumericUpDownPSM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown9.Location = new System.Drawing.Point(276, 305); this.mavlinkNumericUpDownPSM.Location = new System.Drawing.Point(276, 305);
this.mavlinkNumericUpDown9.Max = 1F; this.mavlinkNumericUpDownPSM.Max = 1F;
this.mavlinkNumericUpDown9.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownPSM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown9.Min = 0F; this.mavlinkNumericUpDownPSM.Min = 0F;
this.mavlinkNumericUpDown9.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownPSM.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown9.Name = "mavlinkNumericUpDown9"; this.mavlinkNumericUpDownPSM.Name = "mavlinkNumericUpDownPSM";
this.mavlinkNumericUpDown9.param = null; this.mavlinkNumericUpDownPSM.param = null;
this.mavlinkNumericUpDown9.ParamName = null; this.mavlinkNumericUpDownPSM.ParamName = null;
this.mavlinkNumericUpDown9.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownPSM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown9.TabIndex = 108; this.mavlinkNumericUpDownPSM.TabIndex = 108;
this.mavlinkNumericUpDown9.Value = new decimal(new int[] { this.mavlinkNumericUpDownPSM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown10 // mavlinkNumericUpDownPSMX
// //
this.mavlinkNumericUpDown10.Enabled = false; this.mavlinkNumericUpDownPSMX.Enabled = false;
this.mavlinkNumericUpDown10.Increment = new decimal(new int[] { this.mavlinkNumericUpDownPSMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown10.Location = new System.Drawing.Point(276, 331); this.mavlinkNumericUpDownPSMX.Location = new System.Drawing.Point(276, 331);
this.mavlinkNumericUpDown10.Max = 1F; this.mavlinkNumericUpDownPSMX.Max = 1F;
this.mavlinkNumericUpDown10.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownPSMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown10.Min = 0F; this.mavlinkNumericUpDownPSMX.Min = 0F;
this.mavlinkNumericUpDown10.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownPSMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown10.Name = "mavlinkNumericUpDown10"; this.mavlinkNumericUpDownPSMX.Name = "mavlinkNumericUpDownPSMX";
this.mavlinkNumericUpDown10.param = null; this.mavlinkNumericUpDownPSMX.param = null;
this.mavlinkNumericUpDown10.ParamName = null; this.mavlinkNumericUpDownPSMX.ParamName = null;
this.mavlinkNumericUpDown10.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownPSMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown10.TabIndex = 107; this.mavlinkNumericUpDownPSMX.TabIndex = 107;
this.mavlinkNumericUpDown10.Value = new decimal(new int[] { this.mavlinkNumericUpDownPSMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkCheckBox3 // mavlinkCheckBoxPR
// //
this.mavlinkCheckBox3.AutoSize = true; this.mavlinkCheckBoxPR.AutoSize = true;
this.mavlinkCheckBox3.Enabled = false; this.mavlinkCheckBoxPR.Enabled = false;
this.mavlinkCheckBox3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.mavlinkCheckBoxPR.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.mavlinkCheckBox3.Location = new System.Drawing.Point(267, 357); this.mavlinkCheckBoxPR.Location = new System.Drawing.Point(267, 357);
this.mavlinkCheckBox3.Name = "mavlinkCheckBox3"; this.mavlinkCheckBoxPR.Name = "mavlinkCheckBoxPR";
this.mavlinkCheckBox3.OffValue = 0F; this.mavlinkCheckBoxPR.OffValue = 0F;
this.mavlinkCheckBox3.OnValue = 1F; this.mavlinkCheckBoxPR.OnValue = 1F;
this.mavlinkCheckBox3.param = null; this.mavlinkCheckBoxPR.param = null;
this.mavlinkCheckBox3.ParamName = null; this.mavlinkCheckBoxPR.ParamName = null;
this.mavlinkCheckBox3.Size = new System.Drawing.Size(66, 17); this.mavlinkCheckBoxPR.Size = new System.Drawing.Size(66, 17);
this.mavlinkCheckBox3.TabIndex = 106; this.mavlinkCheckBoxPR.TabIndex = 106;
this.mavlinkCheckBox3.Text = "Reverse"; this.mavlinkCheckBoxPR.Text = "Reverse";
this.mavlinkCheckBox3.UseVisualStyleBackColor = true; this.mavlinkCheckBoxPR.UseVisualStyleBackColor = true;
// //
// label1 // label1
// //
@ -667,60 +667,60 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label4.TabIndex = 124; this.label4.TabIndex = 124;
this.label4.Text = "Min"; this.label4.Text = "Min";
// //
// mavlinkNumericUpDown1 // mavlinkNumericUpDownTAM
// //
this.mavlinkNumericUpDown1.Enabled = false; this.mavlinkNumericUpDownTAM.Enabled = false;
this.mavlinkNumericUpDown1.Increment = new decimal(new int[] { this.mavlinkNumericUpDownTAM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown1.Location = new System.Drawing.Point(385, 54); this.mavlinkNumericUpDownTAM.Location = new System.Drawing.Point(385, 54);
this.mavlinkNumericUpDown1.Max = 1F; this.mavlinkNumericUpDownTAM.Max = 1F;
this.mavlinkNumericUpDown1.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownTAM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown1.Min = 0F; this.mavlinkNumericUpDownTAM.Min = 0F;
this.mavlinkNumericUpDown1.Name = "mavlinkNumericUpDown1"; this.mavlinkNumericUpDownTAM.Name = "mavlinkNumericUpDownTAM";
this.mavlinkNumericUpDown1.param = null; this.mavlinkNumericUpDownTAM.param = null;
this.mavlinkNumericUpDown1.ParamName = null; this.mavlinkNumericUpDownTAM.ParamName = null;
this.mavlinkNumericUpDown1.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownTAM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown1.TabIndex = 123; this.mavlinkNumericUpDownTAM.TabIndex = 123;
this.mavlinkNumericUpDown1.Value = new decimal(new int[] { this.mavlinkNumericUpDownTAM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown2 // mavlinkNumericUpDownTAMX
// //
this.mavlinkNumericUpDown2.Enabled = false; this.mavlinkNumericUpDownTAMX.Enabled = false;
this.mavlinkNumericUpDown2.Increment = new decimal(new int[] { this.mavlinkNumericUpDownTAMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown2.Location = new System.Drawing.Point(385, 80); this.mavlinkNumericUpDownTAMX.Location = new System.Drawing.Point(385, 80);
this.mavlinkNumericUpDown2.Max = 1F; this.mavlinkNumericUpDownTAMX.Max = 1F;
this.mavlinkNumericUpDown2.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownTAMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown2.Min = 0F; this.mavlinkNumericUpDownTAMX.Min = 0F;
this.mavlinkNumericUpDown2.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownTAMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown2.Name = "mavlinkNumericUpDown2"; this.mavlinkNumericUpDownTAMX.Name = "mavlinkNumericUpDownTAMX";
this.mavlinkNumericUpDown2.param = null; this.mavlinkNumericUpDownTAMX.param = null;
this.mavlinkNumericUpDown2.ParamName = null; this.mavlinkNumericUpDownTAMX.ParamName = null;
this.mavlinkNumericUpDown2.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownTAMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown2.TabIndex = 122; this.mavlinkNumericUpDownTAMX.TabIndex = 122;
this.mavlinkNumericUpDown2.Value = new decimal(new int[] { this.mavlinkNumericUpDownTAMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
@ -746,95 +746,92 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.label8.TabIndex = 120; this.label8.TabIndex = 120;
this.label8.Text = "Min"; this.label8.Text = "Min";
// //
// mavlinkNumericUpDown11 // mavlinkNumericUpDownTSM
// //
this.mavlinkNumericUpDown11.Enabled = false; this.mavlinkNumericUpDownTSM.Enabled = false;
this.mavlinkNumericUpDown11.Increment = new decimal(new int[] { this.mavlinkNumericUpDownTSM.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown11.Location = new System.Drawing.Point(276, 54); this.mavlinkNumericUpDownTSM.Location = new System.Drawing.Point(276, 54);
this.mavlinkNumericUpDown11.Max = 1F; this.mavlinkNumericUpDownTSM.Max = 1F;
this.mavlinkNumericUpDown11.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownTSM.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown11.Min = 0F; this.mavlinkNumericUpDownTSM.Min = 0F;
this.mavlinkNumericUpDown11.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownTSM.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown11.Name = "mavlinkNumericUpDown11"; this.mavlinkNumericUpDownTSM.Name = "mavlinkNumericUpDownTSM";
this.mavlinkNumericUpDown11.param = null; this.mavlinkNumericUpDownTSM.param = null;
this.mavlinkNumericUpDown11.ParamName = null; this.mavlinkNumericUpDownTSM.ParamName = null;
this.mavlinkNumericUpDown11.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownTSM.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown11.TabIndex = 119; this.mavlinkNumericUpDownTSM.TabIndex = 119;
this.mavlinkNumericUpDown11.Value = new decimal(new int[] { this.mavlinkNumericUpDownTSM.Value = new decimal(new int[] {
1000, 1000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkNumericUpDown12 // mavlinkNumericUpDownTSMX
// //
this.mavlinkNumericUpDown12.Enabled = false; this.mavlinkNumericUpDownTSMX.Enabled = false;
this.mavlinkNumericUpDown12.Increment = new decimal(new int[] { this.mavlinkNumericUpDownTSMX.Increment = new decimal(new int[] {
10, 10,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown12.Location = new System.Drawing.Point(276, 80); this.mavlinkNumericUpDownTSMX.Location = new System.Drawing.Point(276, 80);
this.mavlinkNumericUpDown12.Max = 1F; this.mavlinkNumericUpDownTSMX.Max = 1F;
this.mavlinkNumericUpDown12.Maximum = new decimal(new int[] { this.mavlinkNumericUpDownTSMX.Maximum = new decimal(new int[] {
2200, 2200,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown12.Min = 0F; this.mavlinkNumericUpDownTSMX.Min = 0F;
this.mavlinkNumericUpDown12.Minimum = new decimal(new int[] { this.mavlinkNumericUpDownTSMX.Minimum = new decimal(new int[] {
800, 800,
0, 0,
0, 0,
0}); 0});
this.mavlinkNumericUpDown12.Name = "mavlinkNumericUpDown12"; this.mavlinkNumericUpDownTSMX.Name = "mavlinkNumericUpDownTSMX";
this.mavlinkNumericUpDown12.param = null; this.mavlinkNumericUpDownTSMX.param = null;
this.mavlinkNumericUpDown12.ParamName = null; this.mavlinkNumericUpDownTSMX.ParamName = null;
this.mavlinkNumericUpDown12.Size = new System.Drawing.Size(59, 20); this.mavlinkNumericUpDownTSMX.Size = new System.Drawing.Size(59, 20);
this.mavlinkNumericUpDown12.TabIndex = 118; this.mavlinkNumericUpDownTSMX.TabIndex = 118;
this.mavlinkNumericUpDown12.Value = new decimal(new int[] { this.mavlinkNumericUpDownTSMX.Value = new decimal(new int[] {
2000, 2000,
0, 0,
0, 0,
0}); 0});
// //
// mavlinkCheckBox1 // mavlinkCheckBoxTR
// //
this.mavlinkCheckBox1.AutoSize = true; this.mavlinkCheckBoxTR.AutoSize = true;
this.mavlinkCheckBox1.Enabled = false; this.mavlinkCheckBoxTR.Enabled = false;
this.mavlinkCheckBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.mavlinkCheckBoxTR.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.mavlinkCheckBox1.Location = new System.Drawing.Point(267, 106); this.mavlinkCheckBoxTR.Location = new System.Drawing.Point(267, 106);
this.mavlinkCheckBox1.Name = "mavlinkCheckBox1"; this.mavlinkCheckBoxTR.Name = "mavlinkCheckBoxTR";
this.mavlinkCheckBox1.OffValue = 0F; this.mavlinkCheckBoxTR.OffValue = 0F;
this.mavlinkCheckBox1.OnValue = 1F; this.mavlinkCheckBoxTR.OnValue = 1F;
this.mavlinkCheckBox1.param = null; this.mavlinkCheckBoxTR.param = null;
this.mavlinkCheckBox1.ParamName = null; this.mavlinkCheckBoxTR.ParamName = null;
this.mavlinkCheckBox1.Size = new System.Drawing.Size(66, 17); this.mavlinkCheckBoxTR.Size = new System.Drawing.Size(66, 17);
this.mavlinkCheckBox1.TabIndex = 117; this.mavlinkCheckBoxTR.TabIndex = 117;
this.mavlinkCheckBox1.Text = "Reverse"; this.mavlinkCheckBoxTR.Text = "Reverse";
this.mavlinkCheckBox1.UseVisualStyleBackColor = true; this.mavlinkCheckBoxTR.UseVisualStyleBackColor = true;
// //
// mavlinkComboBoxTilt // mavlinkComboBoxTilt
// //
this.mavlinkComboBoxTilt.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.mavlinkComboBoxTilt.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.mavlinkComboBoxTilt.Enabled = false;
this.mavlinkComboBoxTilt.FormattingEnabled = true; this.mavlinkComboBoxTilt.FormattingEnabled = true;
this.mavlinkComboBoxTilt.Location = new System.Drawing.Point(71, 3); this.mavlinkComboBoxTilt.Location = new System.Drawing.Point(71, 3);
this.mavlinkComboBoxTilt.Name = "mavlinkComboBoxTilt"; this.mavlinkComboBoxTilt.Name = "mavlinkComboBoxTilt";
this.mavlinkComboBoxTilt.param = null;
this.mavlinkComboBoxTilt.ParamName = null;
this.mavlinkComboBoxTilt.Size = new System.Drawing.Size(121, 21); this.mavlinkComboBoxTilt.Size = new System.Drawing.Size(121, 21);
this.mavlinkComboBoxTilt.TabIndex = 128; this.mavlinkComboBoxTilt.TabIndex = 128;
this.mavlinkComboBoxTilt.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged); this.mavlinkComboBoxTilt.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged);
@ -842,12 +839,9 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
// mavlinkComboBoxRoll // mavlinkComboBoxRoll
// //
this.mavlinkComboBoxRoll.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.mavlinkComboBoxRoll.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.mavlinkComboBoxRoll.Enabled = false;
this.mavlinkComboBoxRoll.FormattingEnabled = true; this.mavlinkComboBoxRoll.FormattingEnabled = true;
this.mavlinkComboBoxRoll.Location = new System.Drawing.Point(71, 131); this.mavlinkComboBoxRoll.Location = new System.Drawing.Point(71, 131);
this.mavlinkComboBoxRoll.Name = "mavlinkComboBoxRoll"; this.mavlinkComboBoxRoll.Name = "mavlinkComboBoxRoll";
this.mavlinkComboBoxRoll.param = null;
this.mavlinkComboBoxRoll.ParamName = null;
this.mavlinkComboBoxRoll.Size = new System.Drawing.Size(121, 21); this.mavlinkComboBoxRoll.Size = new System.Drawing.Size(121, 21);
this.mavlinkComboBoxRoll.TabIndex = 129; this.mavlinkComboBoxRoll.TabIndex = 129;
this.mavlinkComboBoxRoll.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged); this.mavlinkComboBoxRoll.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged);
@ -855,12 +849,9 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
// mavlinkComboBoxPan // mavlinkComboBoxPan
// //
this.mavlinkComboBoxPan.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.mavlinkComboBoxPan.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.mavlinkComboBoxPan.Enabled = false;
this.mavlinkComboBoxPan.FormattingEnabled = true; this.mavlinkComboBoxPan.FormattingEnabled = true;
this.mavlinkComboBoxPan.Location = new System.Drawing.Point(71, 255); this.mavlinkComboBoxPan.Location = new System.Drawing.Point(71, 255);
this.mavlinkComboBoxPan.Name = "mavlinkComboBoxPan"; this.mavlinkComboBoxPan.Name = "mavlinkComboBoxPan";
this.mavlinkComboBoxPan.param = null;
this.mavlinkComboBoxPan.ParamName = null;
this.mavlinkComboBoxPan.Size = new System.Drawing.Size(121, 21); this.mavlinkComboBoxPan.Size = new System.Drawing.Size(121, 21);
this.mavlinkComboBoxPan.TabIndex = 130; this.mavlinkComboBoxPan.TabIndex = 130;
this.mavlinkComboBoxPan.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged); this.mavlinkComboBoxPan.SelectedIndexChanged += new System.EventHandler(this.mavlinkComboBox_SelectedIndexChanged);
@ -875,35 +866,35 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
this.Controls.Add(this.label2); this.Controls.Add(this.label2);
this.Controls.Add(this.label3); this.Controls.Add(this.label3);
this.Controls.Add(this.label4); this.Controls.Add(this.label4);
this.Controls.Add(this.mavlinkNumericUpDown1); this.Controls.Add(this.mavlinkNumericUpDownTAM);
this.Controls.Add(this.mavlinkNumericUpDown2); this.Controls.Add(this.mavlinkNumericUpDownTAMX);
this.Controls.Add(this.label7); this.Controls.Add(this.label7);
this.Controls.Add(this.label8); this.Controls.Add(this.label8);
this.Controls.Add(this.mavlinkNumericUpDown11); this.Controls.Add(this.mavlinkNumericUpDownTSM);
this.Controls.Add(this.mavlinkNumericUpDown12); this.Controls.Add(this.mavlinkNumericUpDownTSMX);
this.Controls.Add(this.mavlinkCheckBox1); this.Controls.Add(this.mavlinkCheckBoxTR);
this.Controls.Add(this.label16); this.Controls.Add(this.label16);
this.Controls.Add(this.label17); this.Controls.Add(this.label17);
this.Controls.Add(this.label18); this.Controls.Add(this.label18);
this.Controls.Add(this.label19); this.Controls.Add(this.label19);
this.Controls.Add(this.mavlinkNumericUpDown7); this.Controls.Add(this.mavlinkNumericUpDownPAM);
this.Controls.Add(this.mavlinkNumericUpDown8); this.Controls.Add(this.mavlinkNumericUpDownPAMX);
this.Controls.Add(this.label20); this.Controls.Add(this.label20);
this.Controls.Add(this.label21); this.Controls.Add(this.label21);
this.Controls.Add(this.mavlinkNumericUpDown9); this.Controls.Add(this.mavlinkNumericUpDownPSM);
this.Controls.Add(this.mavlinkNumericUpDown10); this.Controls.Add(this.mavlinkNumericUpDownPSMX);
this.Controls.Add(this.mavlinkCheckBox3); this.Controls.Add(this.mavlinkCheckBoxPR);
this.Controls.Add(this.label9); this.Controls.Add(this.label9);
this.Controls.Add(this.label10); this.Controls.Add(this.label10);
this.Controls.Add(this.label11); this.Controls.Add(this.label11);
this.Controls.Add(this.label12); this.Controls.Add(this.label12);
this.Controls.Add(this.mavlinkNumericUpDown3); this.Controls.Add(this.mavlinkNumericUpDownRAM);
this.Controls.Add(this.mavlinkNumericUpDown4); this.Controls.Add(this.mavlinkNumericUpDownRAMX);
this.Controls.Add(this.label13); this.Controls.Add(this.label13);
this.Controls.Add(this.label14); this.Controls.Add(this.label14);
this.Controls.Add(this.mavlinkNumericUpDown5); this.Controls.Add(this.mavlinkNumericUpDownRSM);
this.Controls.Add(this.mavlinkNumericUpDown6); this.Controls.Add(this.mavlinkNumericUpDownRSMX);
this.Controls.Add(this.mavlinkCheckBox2); this.Controls.Add(this.mavlinkCheckBoxRR);
this.Controls.Add(this.label15); this.Controls.Add(this.label15);
this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox3);
this.Controls.Add(this.pictureBox3); this.Controls.Add(this.pictureBox3);
@ -922,18 +913,18 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PBOX_WarningIcon)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.PBOX_WarningIcon)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRAM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown4)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRAMX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown5)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRSM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown6)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownRSMX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown7)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPAM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown8)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPAMX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown9)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPSM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown10)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownPSMX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTAM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTAMX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown11)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTSM)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDown12)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.mavlinkNumericUpDownTSMX)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -957,38 +948,38 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
private System.Windows.Forms.Label label10; private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label11; private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label12; private System.Windows.Forms.Label label12;
private MavlinkNumericUpDown mavlinkNumericUpDown3; private MavlinkNumericUpDown mavlinkNumericUpDownRAM;
private MavlinkNumericUpDown mavlinkNumericUpDown4; private MavlinkNumericUpDown mavlinkNumericUpDownRAMX;
private System.Windows.Forms.Label label13; private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label14; private System.Windows.Forms.Label label14;
private MavlinkNumericUpDown mavlinkNumericUpDown5; private MavlinkNumericUpDown mavlinkNumericUpDownRSM;
private MavlinkNumericUpDown mavlinkNumericUpDown6; private MavlinkNumericUpDown mavlinkNumericUpDownRSMX;
private MavlinkCheckBox mavlinkCheckBox2; private MavlinkCheckBox mavlinkCheckBoxRR;
private System.Windows.Forms.Label label16; private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label17; private System.Windows.Forms.Label label17;
private System.Windows.Forms.Label label18; private System.Windows.Forms.Label label18;
private System.Windows.Forms.Label label19; private System.Windows.Forms.Label label19;
private MavlinkNumericUpDown mavlinkNumericUpDown7; private MavlinkNumericUpDown mavlinkNumericUpDownPAM;
private MavlinkNumericUpDown mavlinkNumericUpDown8; private MavlinkNumericUpDown mavlinkNumericUpDownPAMX;
private System.Windows.Forms.Label label20; private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21; private System.Windows.Forms.Label label21;
private MavlinkNumericUpDown mavlinkNumericUpDown9; private MavlinkNumericUpDown mavlinkNumericUpDownPSM;
private MavlinkNumericUpDown mavlinkNumericUpDown10; private MavlinkNumericUpDown mavlinkNumericUpDownPSMX;
private MavlinkCheckBox mavlinkCheckBox3; private MavlinkCheckBox mavlinkCheckBoxPR;
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label4;
private MavlinkNumericUpDown mavlinkNumericUpDown1; private MavlinkNumericUpDown mavlinkNumericUpDownTAM;
private MavlinkNumericUpDown mavlinkNumericUpDown2; private MavlinkNumericUpDown mavlinkNumericUpDownTAMX;
private System.Windows.Forms.Label label7; private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label8;
private MavlinkNumericUpDown mavlinkNumericUpDown11; private MavlinkNumericUpDown mavlinkNumericUpDownTSM;
private MavlinkNumericUpDown mavlinkNumericUpDown12; private MavlinkNumericUpDown mavlinkNumericUpDownTSMX;
private MavlinkCheckBox mavlinkCheckBox1; private MavlinkCheckBox mavlinkCheckBoxTR;
private MavlinkComboBox mavlinkComboBoxTilt; private System.Windows.Forms.ComboBox mavlinkComboBoxTilt;
private MavlinkComboBox mavlinkComboBoxRoll; private System.Windows.Forms.ComboBox mavlinkComboBoxRoll;
private MavlinkComboBox mavlinkComboBoxPan; private System.Windows.Forms.ComboBox mavlinkComboBoxPan;
} }
} }

View File

@ -90,6 +90,8 @@ If you are just setting up 3DR radios, you may continue without connecting.");
/****************************** ArduPlane **************************/ /****************************** ArduPlane **************************/
else if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) else if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane)
{ {
AddBackstageViewPage(new ConfigMount(), "Camera Gimbal");
AddBackstageViewPage(new ConfigAccelerometerCalibrationPlane(), "ArduPlane Level"); AddBackstageViewPage(new ConfigAccelerometerCalibrationPlane(), "ArduPlane Level");
AddBackstageViewPage(new ConfigArduplane(), "ArduPlane Pids"); AddBackstageViewPage(new ConfigArduplane(), "ArduPlane Pids");
} }

View File

@ -546,12 +546,12 @@ namespace ArdupilotMega.GCSViews
{ {
try try
{ {
Console.Write(((SerialPort)port).ReadExisting().Replace("\0"," ")); // Console.Write(((SerialPort)port).ReadExisting().Replace("\0"," "));
} }
catch { } catch { }
System.Threading.Thread.Sleep(1000); System.Threading.Thread.Sleep(1000);
progress.Value = (int)Math.Min(((DateTime.Now - startwait).TotalSeconds / 17 * 100),100); progress.Value = (int)Math.Min(((DateTime.Now - startwait).TotalSeconds / 17 * 100),100);
progress.Refresh(); Application.DoEvents();
} }
try try
{ {

View File

@ -512,13 +512,17 @@ namespace ArdupilotMega.GCSViews
//route.Stroke.Width = 5; //route.Stroke.Width = 5;
//route.Tag = "track"; //route.Tag = "track";
routes.Routes.Clear(); updateClearRoutes();
routes.Routes.Add(route);
if (waypoints.AddSeconds(10) < DateTime.Now) if (waypoints.AddSeconds(10) < DateTime.Now)
{ {
//Console.WriteLine("Doing FD WP's"); //Console.WriteLine("Doing FD WP's");
while (gMapControl1.inOnPaint == true)
{
System.Threading.Thread.Sleep(1);
}
polygons.Markers.Clear(); polygons.Markers.Clear();
routes.Markers.Clear();
if (MainV2.comPort.logreadmode && MainV2.comPort.logplaybackfile != null) if (MainV2.comPort.logreadmode && MainV2.comPort.logplaybackfile != null)
{ {
@ -533,6 +537,12 @@ namespace ArdupilotMega.GCSViews
if (plla.Lng == 0 || plla.Lat == 0) if (plla.Lng == 0 || plla.Lat == 0)
continue; continue;
if (plla.Tag.StartsWith("ROI"))
{
addpolygonmarkerred(plla.Tag, plla.Lng, plla.Lat, (int)plla.Alt, plla.color, routes);
continue;
}
addpolygonmarker(plla.Tag, plla.Lng, plla.Lat, (int)plla.Alt,plla.color,polygons); addpolygonmarker(plla.Tag, plla.Lng, plla.Lat, (int)plla.Alt,plla.color,polygons);
} }
@ -605,6 +615,19 @@ namespace ArdupilotMega.GCSViews
}); });
} }
// to prevent cross thread calls while in a draw and exception
private void updateClearRoutes()
{
// not async
this.Invoke((System.Windows.Forms.MethodInvoker)delegate()
{
routes.Routes.Clear();
routes.Routes.Add(route);
});
}
private void updatePlayPauseButton(bool playing) private void updatePlayPauseButton(bool playing)
{ {
if (playing) if (playing)
@ -718,6 +741,27 @@ namespace ArdupilotMega.GCSViews
catch (Exception) { } catch (Exception) { }
} }
private void addpolygonmarkerred(string tag, double lng, double lat, int alt, Color? color, GMapOverlay overlay)
{
try
{
PointLatLng point = new PointLatLng(lat, lng);
GMapMarkerGoogleRed m = new GMapMarkerGoogleRed(point);
m.ToolTipMode = MarkerTooltipMode.Always;
m.ToolTipText = tag;
m.Tag = tag;
GMapMarkerRect mBorders = new GMapMarkerRect(point);
{
mBorders.InnerMarker = m;
}
overlay.Markers.Add(m);
overlay.Markers.Add(mBorders);
}
catch (Exception) { }
}
/// <summary> /// <summary>
/// used to redraw the polygon /// used to redraw the polygon
/// </summary> /// </summary>
@ -1660,52 +1704,82 @@ namespace ArdupilotMega.GCSViews
if (list1item == null) if (list1item == null)
{ {
if (setupPropertyInfo(ref list1item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list1item, ((CheckBox)sender).Name, MainV2.cs))
{
list1.Clear();
list1curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list1, Color.Red, SymbolType.None); list1curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list1, Color.Red, SymbolType.None);
}
} }
else if (list2item == null) else if (list2item == null)
{ {
if (setupPropertyInfo(ref list2item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list2item, ((CheckBox)sender).Name, MainV2.cs))
{
list2.Clear();
list2curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list2, Color.Blue, SymbolType.None); list2curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list2, Color.Blue, SymbolType.None);
}
} }
else if (list3item == null) else if (list3item == null)
{ {
if (setupPropertyInfo(ref list3item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list3item, ((CheckBox)sender).Name, MainV2.cs))
{
list3.Clear();
list3curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list3, Color.Green, SymbolType.None); list3curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list3, Color.Green, SymbolType.None);
}
} }
else if (list4item == null) else if (list4item == null)
{ {
if (setupPropertyInfo(ref list4item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list4item, ((CheckBox)sender).Name, MainV2.cs))
{
list4.Clear();
list4curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list4, Color.Orange, SymbolType.None); list4curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list4, Color.Orange, SymbolType.None);
}
} }
else if (list5item == null) else if (list5item == null)
{ {
if (setupPropertyInfo(ref list5item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list5item, ((CheckBox)sender).Name, MainV2.cs))
{
list5.Clear();
list5curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list5, Color.Yellow, SymbolType.None); list5curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list5, Color.Yellow, SymbolType.None);
}
} }
else if (list6item == null) else if (list6item == null)
{ {
if (setupPropertyInfo(ref list6item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list6item, ((CheckBox)sender).Name, MainV2.cs))
{
list6.Clear();
list6curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list6, Color.Magenta, SymbolType.None); list6curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list6, Color.Magenta, SymbolType.None);
}
} }
else if (list7item == null) else if (list7item == null)
{ {
if (setupPropertyInfo(ref list7item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list7item, ((CheckBox)sender).Name, MainV2.cs))
{
list7.Clear();
list7curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list7, Color.Purple, SymbolType.None); list7curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list7, Color.Purple, SymbolType.None);
}
} }
else if (list8item == null) else if (list8item == null)
{ {
if (setupPropertyInfo(ref list8item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list8item, ((CheckBox)sender).Name, MainV2.cs))
{
list8.Clear();
list8curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list8, Color.LimeGreen, SymbolType.None); list8curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list8, Color.LimeGreen, SymbolType.None);
}
} }
else if (list9item == null) else if (list9item == null)
{ {
if (setupPropertyInfo(ref list9item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list9item, ((CheckBox)sender).Name, MainV2.cs))
{
list9.Clear();
list9curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list9, Color.Cyan, SymbolType.None); list9curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list9, Color.Cyan, SymbolType.None);
}
} }
else if (list10item == null) else if (list10item == null)
{ {
if (setupPropertyInfo(ref list10item, ((CheckBox)sender).Name, MainV2.cs)) if (setupPropertyInfo(ref list10item, ((CheckBox)sender).Name, MainV2.cs))
{
list10.Clear();
list10curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list10, Color.Violet, SymbolType.None); list10curve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name, list10, Color.Violet, SymbolType.None);
}
} }
else else
{ {

View File

@ -805,6 +805,8 @@ namespace ArdupilotMega.GCSViews
catch { cmd = option; } catch { cmd = option; }
//Console.WriteLine("editformat " + option + " value " + cmd); //Console.WriteLine("editformat " + option + " value " + cmd);
ChangeColumnHeader(cmd); ChangeColumnHeader(cmd);
writeKML();
} }
catch (Exception ex) { CustomMessageBox.Show(ex.ToString()); } catch (Exception ex) { CustomMessageBox.Show(ex.ToString()); }
} }
@ -938,6 +940,37 @@ namespace ArdupilotMega.GCSViews
catch (Exception ex) { log.Info(ex.ToString()); } catch (Exception ex) { log.Info(ex.ToString()); }
} }
void updateRowNumbers()
{
// number rows
System.Threading.Thread t1 = new System.Threading.Thread(delegate()
{
// thread for updateing row numbers
for (int a = 0; a < Commands.Rows.Count - 0; a++)
{
try
{
if (Commands.Rows[a].HeaderCell.Value == null)
{
Commands.Rows[a].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
Commands.Rows[a].HeaderCell.Value = (a + 1).ToString();
}
// skip rows with the correct number
string rowno = Commands.Rows[a].HeaderCell.Value.ToString();
if (!rowno.Equals((a + 1).ToString()))
{
// this code is where the delay is when deleting.
Commands.Rows[a].HeaderCell.Value = (a + 1).ToString();
}
}
catch (Exception) { }
}
});
t1.Name = "Row number updater";
t1.IsBackground = true;
t1.Start();
}
/// <summary> /// <summary>
/// used to write a KML, update the Map view polygon, and update the row headers /// used to write a KML, update the Map view polygon, and update the row headers
/// </summary> /// </summary>
@ -994,33 +1027,7 @@ namespace ArdupilotMega.GCSViews
int usable = 0; int usable = 0;
// number rows updateRowNumbers();
System.Threading.Thread t1 = new System.Threading.Thread(delegate()
{
// thread for updateing row numbers
for (int a = 0; a < Commands.Rows.Count - 0; a++)
{
try
{
if (Commands.Rows[a].HeaderCell.Value == null)
{
Commands.Rows[a].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
Commands.Rows[a].HeaderCell.Value = (a + 1).ToString();
}
// skip rows with the correct number
string rowno = Commands.Rows[a].HeaderCell.Value.ToString();
if (!rowno.Equals((a + 1).ToString()))
{
// this code is where the delay is when deleting.
Commands.Rows[a].HeaderCell.Value = (a + 1).ToString();
}
}
catch (Exception) { }
}
});
t1.Name = "Row number updater";
t1.IsBackground = true;
t1.Start();
long temp = System.Diagnostics.Stopwatch.GetTimestamp(); long temp = System.Diagnostics.Stopwatch.GetTimestamp();
@ -1041,11 +1048,30 @@ namespace ArdupilotMega.GCSViews
if (cell4 == "?" || cell3 == "?") if (cell4 == "?" || cell3 == "?")
continue; continue;
if (command == (byte)MAVLink.MAV_CMD.ROI)
if (command == (byte)MAVLink.MAV_CMD.LOITER_TIME || command == (byte)MAVLink.MAV_CMD.LOITER_TURNS || command == (byte)MAVLink.MAV_CMD.LOITER_UNLIM) { {
pointlist.Add(new PointLatLngAlt(double.Parse(cell3), double.Parse(cell4), (int)double.Parse(cell2) + homealt,"ROI"+(a+1).ToString()) { color = Color.Red });
GMapMarkerGoogleRed m = new GMapMarkerGoogleRed(new PointLatLng(double.Parse(cell3), double.Parse(cell4)));
m.ToolTipMode = MarkerTooltipMode.Always;
m.ToolTipText = (a + 1).ToString();
m.Tag = (a + 1).ToString();
GMapMarkerRect mBorders = new GMapMarkerRect(m.Position);
{
mBorders.InnerMarker = m;
mBorders.Tag = "Dont draw line";
}
// order matters
objects.Markers.Add(m);
objects.Markers.Add(mBorders);
}
else if (command == (byte)MAVLink.MAV_CMD.LOITER_TIME || command == (byte)MAVLink.MAV_CMD.LOITER_TURNS || command == (byte)MAVLink.MAV_CMD.LOITER_UNLIM)
{
pointlist.Add(new PointLatLngAlt(double.Parse(cell3), double.Parse(cell4), (int)double.Parse(cell2) + homealt, (a + 1).ToString()){ color = Color.LightBlue }); pointlist.Add(new PointLatLngAlt(double.Parse(cell3), double.Parse(cell4), (int)double.Parse(cell2) + homealt, (a + 1).ToString()){ color = Color.LightBlue });
addpolygonmarker((a + 1).ToString(), double.Parse(cell4), double.Parse(cell3), (int)double.Parse(cell2) , Color.LightBlue); addpolygonmarker((a + 1).ToString(), double.Parse(cell4), double.Parse(cell3), (int)double.Parse(cell2) , Color.LightBlue);
} else { }
else
{
pointlist.Add(new PointLatLngAlt(double.Parse(cell3), double.Parse(cell4), (int)double.Parse(cell2) + homealt, (a + 1).ToString())); pointlist.Add(new PointLatLngAlt(double.Parse(cell3), double.Parse(cell4), (int)double.Parse(cell2) + homealt, (a + 1).ToString()));
addpolygonmarker((a + 1).ToString(), double.Parse(cell4), double.Parse(cell3), (int)double.Parse(cell2) ,null); addpolygonmarker((a + 1).ToString(), double.Parse(cell4), double.Parse(cell3), (int)double.Parse(cell2) ,null);
} }
@ -1896,16 +1922,14 @@ namespace ArdupilotMega.GCSViews
GMapPolygon drawnpolygon; GMapPolygon drawnpolygon;
GMapPolygon gf; GMapPolygon gf;
GMapOverlay kmlpolygons;
GMapOverlay geofence;
// layers // layers
GMapOverlay top; GMapOverlay top;
internal GMapOverlay objects; public static GMapOverlay objects; // where the markers a drawn
static GMapOverlay routes;// static so can update from gcs public static GMapOverlay routes;// static so can update from gcs
static GMapOverlay polygons; public static GMapOverlay polygons; // where the track is drawn
GMapOverlay drawnpolygons; GMapOverlay drawnpolygons;
GMapOverlay kmlpolygons;
GMapOverlay geofence;
// etc // etc
readonly Random rnd = new Random(); readonly Random rnd = new Random();
@ -2071,6 +2095,7 @@ namespace ArdupilotMega.GCSViews
{ {
try try
{ {
// check if this is a grid point
if (CurentRectMarker.InnerMarker.Tag.ToString().Contains("grid")) if (CurentRectMarker.InnerMarker.Tag.ToString().Contains("grid"))
{ {
drawnpolygon.Points[int.Parse(CurentRectMarker.InnerMarker.Tag.ToString().Replace("grid", "")) - 1] = new PointLatLng(point.Lat, point.Lng); drawnpolygon.Points[int.Parse(CurentRectMarker.InnerMarker.Tag.ToString().Replace("grid", "")) - 1] = new PointLatLng(point.Lat, point.Lng);
@ -2082,19 +2107,25 @@ namespace ArdupilotMega.GCSViews
PointLatLng pnew = MainMap.FromLocalToLatLng(e.X, e.Y); PointLatLng pnew = MainMap.FromLocalToLatLng(e.X, e.Y);
int? pIndex = (int?)CurentRectMarker.Tag; // adjust polyline point while we drag
if (pIndex.HasValue) try
{ {
if (pIndex < polygon.Points.Count) int? pIndex = (int?)CurentRectMarker.Tag;
if (pIndex.HasValue)
{ {
polygon.Points[pIndex.Value] = pnew; if (pIndex < polygon.Points.Count)
lock (thisLock)
{ {
MainMap.UpdatePolygonLocalPosition(polygon); polygon.Points[pIndex.Value] = pnew;
lock (thisLock)
{
MainMap.UpdatePolygonLocalPosition(polygon);
}
} }
} }
} }
catch { }
// update rect and marker pos.
if (currentMarker.IsVisible) if (currentMarker.IsVisible)
{ {
currentMarker.Position = pnew; currentMarker.Position = pnew;
@ -2225,8 +2256,11 @@ namespace ArdupilotMega.GCSViews
{ {
if (m is GMapMarkerRect) if (m is GMapMarkerRect)
{ {
m.Tag = polygonPoints.Count; if (m.Tag == null)
polygonPoints.Add(m.Position); {
m.Tag = polygonPoints.Count;
polygonPoints.Add(m.Position);
}
} }
} }

View File

@ -50,11 +50,8 @@ namespace ArdupilotMega.GCSViews
// gps buffer // gps buffer
int gpsbufferindex = 0; int gpsbufferindex = 0;
#if !MAVLINK10
ArdupilotMega.MAVLink.mavlink_gps_raw_t[] gpsbuffer = new MAVLink.mavlink_gps_raw_t[5]; sitl_fdm[] sitl_fdmbuffer = new sitl_fdm[5];
#else
ArdupilotMega.MAVLink.mavlink_gps_raw_int_t[] gpsbuffer = new MAVLink.mavlink_gps_raw_int_t[5];
#endif
// set defaults // set defaults
int rollgain = 10000; int rollgain = 10000;
@ -92,29 +89,21 @@ namespace ArdupilotMega.GCSViews
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct sitldata public struct sitl_fdm
{ {
public double lat; // this is the packet sent by the simulator
public double lon; // to the APM executable to update the simulator state
public double alt; // All values are little-endian
public double heading; public double latitude, longitude; // degrees
public double v_north; public double altitude; // MSL
public double v_east; public double heading; // degrees
public double ax; public double speedN, speedE; // m/s
public double ay; public double xAccel, yAccel, zAccel; // m/s/s in body frame
public double az; public double rollRate, pitchRate, yawRate; // degrees/s/s in earth frame
public double phidot; public double rollDeg, pitchDeg, yawDeg; // euler angles, degrees
public double thetadot; public double airspeed; // m/s
public double psidot; public UInt32 magic; // 0x4c56414e
public double phi; };
public double theta;
/// <summary>
/// heading
/// </summary>
public double psi;
public double vcas;
public int check;
}
const int AEROSIMRC_MAX_CHANNELS = 39; const int AEROSIMRC_MAX_CHANNELS = 39;
@ -633,6 +622,7 @@ namespace ArdupilotMega.GCSViews
if (comPort.BaseStream.IsOpen == false) { break; } if (comPort.BaseStream.IsOpen == false) { break; }
try try
{ {
MainV2.cs.UpdateCurrentSettings(null); // when true this uses alot more cpu time MainV2.cs.UpdateCurrentSettings(null); // when true this uses alot more cpu time
if ((DateTime.Now - simsendtime).TotalMilliseconds > 19) if ((DateTime.Now - simsendtime).TotalMilliseconds > 19)
@ -715,13 +705,9 @@ namespace ArdupilotMega.GCSViews
MavLink = new UdpClient("127.0.0.1", 14550); MavLink = new UdpClient("127.0.0.1", 14550);
} }
float oldax = 0, olday = 0, oldaz = 0;
DateTime oldtime = DateTime.Now; DateTime oldtime = DateTime.Now;
#if MAVLINK10
ArdupilotMega.MAVLink.mavlink_gps_raw_int_t oldgps = new MAVLink.mavlink_gps_raw_int_t();
#endif
ArdupilotMega.MAVLink.mavlink_attitude_t oldatt = new ArdupilotMega.MAVLink.mavlink_attitude_t(); sitl_fdm oldgps = new sitl_fdm();
/// <summary> /// <summary>
/// Recevied UDP packet, process and send required data to serial port. /// Recevied UDP packet, process and send required data to serial port.
@ -731,19 +717,7 @@ namespace ArdupilotMega.GCSViews
/// <param name="comPort">Com Port</param> /// <param name="comPort">Com Port</param>
private void RECVprocess(byte[] data, int receviedbytes, ArdupilotMega.MAVLink comPort) private void RECVprocess(byte[] data, int receviedbytes, ArdupilotMega.MAVLink comPort)
{ {
#if MAVLINK10 sitl_fdm sitldata = new sitl_fdm();
ArdupilotMega.MAVLink.mavlink_hil_state_t hilstate = new ArdupilotMega.MAVLink.mavlink_hil_state_t();
ArdupilotMega.MAVLink.mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_int_t();
#else
ArdupilotMega.MAVLink.mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_t();
#endif
ArdupilotMega.MAVLink.mavlink_raw_imu_t imu = new ArdupilotMega.MAVLink.mavlink_raw_imu_t();
ArdupilotMega.MAVLink.mavlink_attitude_t att = new ArdupilotMega.MAVLink.mavlink_attitude_t();
ArdupilotMega.MAVLink.mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.mavlink_vfr_hud_t();
if (data[0] == 'D' && data[1] == 'A') if (data[0] == 'D' && data[1] == 'A')
{ {
@ -774,114 +748,55 @@ namespace ArdupilotMega.GCSViews
if (xplane9) if (xplane9)
{ {
att.pitch = (DATA[18][0] * deg2rad); sitldata.pitchDeg = (DATA[18][0]);
att.roll = (DATA[18][1] * deg2rad); sitldata.rollDeg = (DATA[18][1]);
att.yaw = (DATA[18][2] * deg2rad); sitldata.yawDeg = (DATA[18][2]);
att.pitchspeed = (DATA[17][0]); sitldata.pitchRate = (DATA[17][0] * rad2deg);
att.rollspeed = (DATA[17][1]); sitldata.rollRate = (DATA[17][1] * rad2deg);
att.yawspeed = (DATA[17][2]); sitldata.yawRate = (DATA[17][2] * rad2deg);
sitldata.heading = ((float)DATA[19][2]);
} }
else else
{ {
att.pitch = (DATA[17][0] * deg2rad); sitldata.pitchDeg = (DATA[17][0]);
att.roll = (DATA[17][1] * deg2rad); sitldata.rollDeg = (DATA[17][1]);
att.yaw = (DATA[17][2] * deg2rad); sitldata.yawDeg = (DATA[17][2]);
att.pitchspeed = (DATA[16][0]); sitldata.pitchRate = (DATA[16][0] * rad2deg);
att.rollspeed = (DATA[16][1]); sitldata.rollRate = (DATA[16][1] * rad2deg);
att.yawspeed = (DATA[16][2]); sitldata.yawRate = (DATA[16][2] * rad2deg);
sitldata.heading = (DATA[18][2]);
} }
TimeSpan timediff = DateTime.Now - oldtime; sitldata.airspeed = ((DATA[3][5] * .44704));
float pdiff = (float)((att.pitch - oldatt.pitch) / timediff.TotalSeconds); sitldata.latitude = (DATA[20][0]);
float rdiff = (float)((att.roll - oldatt.roll) / timediff.TotalSeconds); sitldata.longitude = (DATA[20][1]);
float ydiff = (float)((att.yaw - oldatt.yaw) / timediff.TotalSeconds); sitldata.altitude = (DATA[20][2] * ft2m);
// Console.WriteLine("{0:0.00000} {1:0.00000} {2:0.00000} \t {3:0.00000} {4:0.00000} {5:0.00000}", pdiff, rdiff, ydiff, DATA[17][0], DATA[17][1], DATA[17][2]); sitldata.speedN = DATA[21][3];// (DATA[3][7] * 0.44704 * Math.Sin(sitldata.heading * deg2rad));
sitldata.speedE = -DATA[21][5];// (DATA[3][7] * 0.44704 * Math.Cos(sitldata.heading * deg2rad));
oldatt = att; // YLScsDrawing.Drawing3d.Vector3d accel3D = HIL.QuadCopter.RPY_to_XYZ(DATA[18][1], DATA[18][0], 0, -9.8); //DATA[18][2]
Int16 xgyro = Constrain(att.rollspeed * 1000.0, Int16.MinValue, Int16.MaxValue); // float turnrad = (float)(((DATA[3][7] * 0.44704) * (DATA[3][7] * 0.44704) * 1.943844) / (float)(11.26 * Math.Tan(sitldata.rollDeg * deg2rad))) * ft2m;
Int16 ygyro = Constrain(att.pitchspeed * 1000.0, Int16.MinValue, Int16.MaxValue);
Int16 zgyro = Constrain(att.yawspeed * 1000.0, Int16.MinValue, Int16.MaxValue);
oldtime = DateTime.Now; // float centripaccel = (float)((DATA[3][7] * 0.44704) * (DATA[3][7] * 0.44704)) / turnrad;
YLScsDrawing.Drawing3d.Vector3d accel3D = HIL.QuadCopter.RPY_to_XYZ(DATA[18][1], DATA[18][0], 0, -9.8); //DATA[18][2] // YLScsDrawing.Drawing3d.Vector3d cent3D = HIL.QuadCopter.RPY_to_XYZ(DATA[18][1] - 90, 0, 0, centripaccel);
float turnrad = (float)(((DATA[3][7] * 0.44704) * (DATA[3][7] * 0.44704) * 1.943844) / (float)(11.26 * Math.Tan(att.roll))) * ft2m; // accel3D -= cent3D;
float centripaccel = (float)((DATA[3][7] * 0.44704) * (DATA[3][7] * 0.44704)) / turnrad;
//Console.WriteLine("old {0} {1} {2}",accel3D.X,accel3D.Y,accel3D.Z);
YLScsDrawing.Drawing3d.Vector3d cent3D = HIL.QuadCopter.RPY_to_XYZ(DATA[18][1] - 90, 0, 0, centripaccel);
accel3D -= cent3D;
//Console.WriteLine("new {0} {1} {2}", accel3D.X, accel3D.Y, accel3D.Z);
oldax = DATA[4][5];
olday = DATA[4][6];
oldaz = DATA[4][4];
double head = DATA[18][2] - 90;
#if MAVLINK10
imu.time_usec = ((ulong)DateTime.Now.ToBinary());
#else
imu.usec = ((ulong)DateTime.Now.ToBinary());
#endif
imu.xgyro = xgyro; // roll - yes
imu.xmag = (short)(Math.Sin(head * deg2rad) * 1000);
imu.ygyro = ygyro; // pitch - yes
imu.ymag = (short)(Math.Cos(head * deg2rad) * 1000);
imu.zgyro = zgyro;
imu.zmag = 0;
imu.xacc = (Int16)(accel3D.X * 1000); // pitch
imu.yacc = (Int16)(accel3D.Y * 1000); // roll
imu.zacc = (Int16)(accel3D.Z * 1000);
//Console.WriteLine("ax " + imu.xacc + " ay " + imu.yacc + " az " + imu.zacc);
#if MAVLINK10
gps.alt = (int)(DATA[20][2] * ft2m * 1000);
gps.fix_type = 3;
if (xplane9)
{
gps.cog = (ushort)((float)DATA[19][2]);
}
else
{
gps.cog = (ushort)((float)DATA[18][2]);
}
gps.lat = (int)(DATA[20][0] * 1.0e7);
gps.lon = (int)(DATA[20][1] * 1.0e7);
gps.time_usec = ((ulong)0);
gps.vel = (ushort)(DATA[3][7] * 0.44704 * 100);
#else
gps.alt = ((float)(DATA[20][2] * ft2m));
gps.fix_type = 3;
if (xplane9)
{
gps.hdg = ((float)DATA[19][2]);
}
else
{
gps.hdg = ((float)DATA[18][2]);
}
gps.lat = ((float)DATA[20][0]);
gps.lon = ((float)DATA[20][1]);
gps.usec = ((ulong)0);
gps.v = ((float)(DATA[3][7] * 0.44704));
#endif
asp.airspeed = ((float)(DATA[3][5] * .0044704));
// sitldata.xAccel = accel3D.X;
// sitldata.yAccel = accel3D.Y;
// sitldata.zAccel = accel3D.Z;
} }
else if (receviedbytes == 0x64) // FG binary udp else if (receviedbytes == 0x64) // FG binary udp
{ {
//FlightGear //FlightGear
/*
fgIMUData imudata2 = data.ByteArrayToStructureBigEndian<fgIMUData>(0); fgIMUData imudata2 = data.ByteArrayToStructureBigEndian<fgIMUData>(0);
@ -930,196 +845,75 @@ namespace ArdupilotMega.GCSViews
//FileStream stream = File.OpenWrite("fgdata.txt"); //FileStream stream = File.OpenWrite("fgdata.txt");
//stream.Write(data, 0, receviedbytes); //stream.Write(data, 0, receviedbytes);
//stream.Close(); //stream.Close();
*/
} }
else if (receviedbytes == 662 || receviedbytes == 658) // 658 = 3.83 662 = 3.91 else if (receviedbytes == 662 || receviedbytes == 658) // 658 = 3.83 662 = 3.91
{ {
aeroin = data.ByteArrayToStructure<TDataFromAeroSimRC>(0); aeroin = data.ByteArrayToStructure<TDataFromAeroSimRC>(0);
att.pitch = (aeroin.Model_fPitch); sitldata.pitchDeg = (aeroin.Model_fPitch * rad2deg);
att.roll = (aeroin.Model_fRoll * -1); sitldata.rollDeg = (aeroin.Model_fRoll * -1 * rad2deg);
att.yaw = (float)((aeroin.Model_fHeading)); sitldata.yawDeg = ((aeroin.Model_fHeading * rad2deg));
//Console.WriteLine("degs r {0:0.000} p {1:0.000} y {2:0.000} rates {3:0.000} {4:0.000} {5:0.000}", att.roll * -rad2deg, att.pitch * rad2deg, att.yaw * rad2deg, aeroin.Model_fAngVelX * rad2deg, aeroin.Model_fAngVelY * rad2deg, aeroin.Model_fAngVelZ * rad2deg); sitldata.pitchRate = aeroin.Model_fAngVel_Body_X * rad2deg;
sitldata.rollRate = aeroin.Model_fAngVel_Body_Y * rad2deg;
sitldata.yawRate = -aeroin.Model_fAngVel_Body_Z * rad2deg;
//Console.WriteLine("mine2 {0} {1} {2} ", answer.Item1 , answer.Item2 , answer.Item3 ); sitldata.xAccel = aeroin.Model_fAccel_Body_X; // pitch
sitldata.yAccel = aeroin.Model_fAccel_Body_Y; // roll
sitldata.zAccel = aeroin.Model_fAccel_Body_Z;
//StreamWriter SW = new StreamWriter("aerosim.txt",true); // YLScsDrawing.Drawing3d.Vector3d accel3D = HIL.QuadCopter.RPY_to_XYZ(att.roll, att.pitch, 0, -9.8); //DATA[18][2]
//SW.WriteLine(aeroin.Model_fRoll + "," + aeroin.Model_fPitch + "," + aeroin.Model_fHeading + "," + aeroin.Model_fAngVelX + "," + aeroin.Model_fAngVelY + "," + aeroin.Model_fAngVelZ);
//SW.Close();
att.pitchspeed = (float)aeroin.Model_fAngVel_Body_X;
att.rollspeed = (float)aeroin.Model_fAngVel_Body_Y;
att.yawspeed = (float)-aeroin.Model_fAngVel_Body_Z;
#if MAVLINK10 sitldata.altitude = aeroin.Model_fPosZ;
imu.time_usec = ((ulong)DateTime.Now.ToBinary()); sitldata.latitude = aeroin.Model_fLatitude;
#else sitldata.longitude = aeroin.Model_fLongitude;
imu.usec = ((ulong)DateTime.Now.ToBinary());
#endif
imu.xgyro = (short)(aeroin.Model_fAngVel_Body_X * 1000); // roll - yes
//imu.xmag = (short)(Math.Sin(head * deg2rad) * 1000);
imu.ygyro = (short)(aeroin.Model_fAngVel_Body_Y * 1000); // pitch - yes
//imu.ymag = (short)(Math.Cos(head * deg2rad) * 1000);
imu.zgyro = (short)(aeroin.Model_fAngVel_Body_Z * 1000);
//imu.zmag = 0;
YLScsDrawing.Drawing3d.Vector3d accel3D = HIL.QuadCopter.RPY_to_XYZ(att.roll, att.pitch, 0, -9.8); //DATA[18][2] sitldata.speedN = aeroin.Model_fVelX;
sitldata.speedE = aeroin.Model_fVelY;
imu.xacc = (Int16)((accel3D.X + aeroin.Model_fAccel_Body_X) * 1000); // pitch
imu.yacc = (Int16)((accel3D.Y + aeroin.Model_fAccel_Body_Y) * 1000); // roll
imu.zacc = (Int16)((accel3D.Z + aeroin.Model_fAccel_Body_Z) * 1000);
// Console.WriteLine("x {0} y {1} z {2}", imu.xacc, imu.yacc, imu.zacc);
#if MAVLINK10
gps.alt = ((int)(aeroin.Model_fPosZ) * 1000);
gps.fix_type = 3;
gps.cog = (ushort)(Math.Atan2(aeroin.Model_fVelX, aeroin.Model_fVelY) * rad2deg * 100);
gps.lat = (int)(aeroin.Model_fLatitude * 1.0e7);
gps.lon = (int)(aeroin.Model_fLongitude * 1.0e7);
gps.time_usec = ((ulong)DateTime.Now.Ticks);
gps.vel = (ushort)(Math.Sqrt((aeroin.Model_fVelY * aeroin.Model_fVelY) + (aeroin.Model_fVelX * aeroin.Model_fVelX)) * 100);
#else
gps.alt = ((float)(aeroin.Model_fPosZ));
gps.fix_type = 3;
gps.hdg = ((float)Math.Atan2(aeroin.Model_fVelX, aeroin.Model_fVelY) * rad2deg);
gps.lat = ((float)aeroin.Model_fLatitude);
gps.lon = ((float)aeroin.Model_fLongitude);
gps.usec = ((ulong)DateTime.Now.Ticks);
gps.v = ((float)Math.Sqrt((aeroin.Model_fVelY * aeroin.Model_fVelY) + (aeroin.Model_fVelX * aeroin.Model_fVelX)));
#endif
float xvec = aeroin.Model_fVelY - aeroin.Model_fWindVelY; float xvec = aeroin.Model_fVelY - aeroin.Model_fWindVelY;
float yvec = aeroin.Model_fVelX - aeroin.Model_fWindVelX; float yvec = aeroin.Model_fVelX - aeroin.Model_fWindVelX;
asp.airspeed = ((float)Math.Sqrt((yvec * yvec) + (xvec * xvec))); sitldata.airspeed = ((float)Math.Sqrt((yvec * yvec) + (xvec * xvec)));
} }
else if (receviedbytes == 408) else if (receviedbytes == 408)
{ {
FGNetFDM fdm = data.ByteArrayToStructureBigEndian<FGNetFDM>(0); FGNetFDM fdm = data.ByteArrayToStructureBigEndian<FGNetFDM>(0);
lastfdmdata = fdm; lastfdmdata = fdm;
att.roll = fdm.phi;
att.pitch = fdm.theta;
att.yaw = fdm.psi;
#if MAVLINK10 sitldata.rollDeg = fdm.phi * rad2deg;
imu.time_usec = ((ulong)DateTime.Now.ToBinary()); sitldata.pitchDeg = fdm.theta * rad2deg;
#else sitldata.yawDeg = fdm.psi * rad2deg;
imu.usec = ((ulong)DateTime.Now.ToBinary());
#endif
imu.xgyro = (short)(fdm.phidot * 1000); // roll - yes
//imu.xmag = (short)(Math.Sin(head * deg2rad) * 1000);
imu.ygyro = (short)(fdm.thetadot * 1000); // pitch - yes
//imu.ymag = (short)(Math.Cos(head * deg2rad) * 1000);
imu.zgyro = (short)(fdm.psidot * 1000);
imu.zmag = 0;
imu.xacc = (Int16)Math.Min(Int16.MaxValue, Math.Max(Int16.MinValue, (fdm.A_X_pilot * 9808 / 32.2))); // pitch
imu.yacc = (Int16)Math.Min(Int16.MaxValue, Math.Max(Int16.MinValue, (fdm.A_Y_pilot * 9808 / 32.2))); // roll
imu.zacc = (Int16)Math.Min(Int16.MaxValue, Math.Max(Int16.MinValue, (fdm.A_Z_pilot / 32.2 * 9808)));
//Console.WriteLine("ax " + imu.xacc + " ay " + imu.yacc + " az " + imu.zacc); sitldata.rollRate = fdm.phidot * rad2deg;
#if MAVLINK10 sitldata.pitchRate = fdm.thetadot * rad2deg;
gps.alt = ((int)(fdm.altitude * 1000)); sitldata.yawRate = fdm.psidot * rad2deg;
gps.fix_type = 3;
gps.cog = (ushort)((((Math.Atan2(fdm.v_east, fdm.v_north) * rad2deg) + 360) % 360) * 100);
gps.lat = (int)(fdm.latitude * rad2deg * 1.0e7);
gps.lon = (int)(fdm.longitude * rad2deg * 1.0e7);
gps.time_usec = ((ulong)DateTime.Now.Ticks);
gps.vel = (ushort)(Math.Sqrt((fdm.v_north * fdm.v_north) + (fdm.v_east * fdm.v_east)) * ft2m * 100);
#else
gps.alt = ((float)(fdm.altitude));
gps.fix_type = 3;
gps.hdg = (float)(((Math.Atan2(fdm.v_east, fdm.v_north) * rad2deg) + 360) % 360);
//Console.WriteLine(gps.hdg);
gps.lat = ((float)fdm.latitude * rad2deg);
gps.lon = ((float)fdm.longitude * rad2deg);
gps.usec = ((ulong)DateTime.Now.Ticks);
gps.v = ((float)Math.Sqrt((fdm.v_north * fdm.v_north) + (fdm.v_east * fdm.v_east)) * ft2m);
#endif sitldata.xAccel = (fdm.A_X_pilot * 9.808 / 32.2); // pitch
asp.airspeed = fdm.vcas * 0.5144444f;// knots to m/s sitldata.yAccel = (fdm.A_Y_pilot * 9.808 / 32.2); // roll
sitldata.zAccel = (fdm.A_Z_pilot / 32.2 * 9.808);
sitldata.altitude = (fdm.altitude);
sitldata.latitude = (fdm.latitude * rad2deg);
sitldata.longitude = (fdm.longitude * rad2deg);
sitldata.speedN = fdm.v_east * ft2m;
sitldata.speedE = fdm.v_north * ft2m;
sitldata.airspeed = fdm.vcas * 0.5144444f;// knots to m/s
} }
else else
{ {
//FlightGear - old style udp log.Info("Bad Udp Packet " + receviedbytes);
return;
DATA[20] = new float[8];
DATA[18] = new float[8];
DATA[19] = new float[8];
DATA[3] = new float[8];
// this text line is defined from ardupilot.xml
string telem = Encoding.ASCII.GetString(data, 0, data.Length);
try
{
// should convert this to regex.... or just leave it.
int oldpos = 0;
int pos = telem.IndexOf(",");
DATA[20][0] = float.Parse(telem.Substring(oldpos, pos - 1), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf(",", pos + 1);
DATA[20][1] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf(",", pos + 1);
DATA[20][2] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf(",", pos + 1);
DATA[18][1] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf(",", pos + 1);
DATA[18][0] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf(",", pos + 1);
DATA[19][2] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
oldpos = pos;
pos = telem.IndexOf("\n", pos + 1);
DATA[3][6] = float.Parse(telem.Substring(oldpos + 1, pos - 1 - oldpos), new System.Globalization.CultureInfo("en-US"));
DATA[3][7] = DATA[3][6];
}
catch (Exception) { }
chkSensor.Checked = false;
att.pitch = (DATA[18][0]);
att.roll = (DATA[18][1]);
att.yaw = (DATA[19][2]);
#if MAVLINK10
gps.alt = ((int)(DATA[20][2] * ft2m * 1000));
gps.fix_type = 3;
gps.cog = (ushort)(DATA[18][2] * 100);
gps.lat = (int)(DATA[20][0] * 1.0e7);
gps.lon = (int)(DATA[20][1] * 1.0e7);
gps.time_usec = ((ulong)0);
gps.vel = (ushort)((DATA[3][7] * 0.44704 * 100));
#else
gps.alt = ((float)(DATA[20][2] * ft2m));
gps.fix_type = 3;
gps.hdg = ((float)DATA[18][2]);
gps.lat = ((float)DATA[20][0]);
gps.lon = ((float)DATA[20][1]);
gps.usec = ((ulong)0);
gps.v = ((float)(DATA[3][7] * 0.44704));
#endif
asp.airspeed = ((float)(DATA[3][6] * 0.44704));
} }
// write arduimu to ardupilot // write arduimu to ardupilot
@ -1168,54 +962,15 @@ namespace ArdupilotMega.GCSViews
if (RAD_softXplanes.Checked && chkSensor.Checked) if (RAD_softXplanes.Checked && chkSensor.Checked)
{ {
sitldata sitlout = new sitldata(); sitldata.magic = (int)0x4c56414e;
ArdupilotMega.HIL.Utils.FLIGHTtoBCBF(ref att.pitchspeed, ref att.rollspeed, ref att.yawspeed, DATA[19][0] * deg2rad, DATA[19][1] * deg2rad); byte[] sendme = StructureToByteArray(sitldata);
//Console.WriteLine("{0:0.00000} {1:0.00000} {2:0.00000} \t {3:0.00000} {4:0.00000} {5:0.00000}", att.pitchspeed, att.rollspeed, att.yawspeed, DATA[17][0], DATA[17][1], DATA[17][2]);
Tuple<double, double, double> ans = ArdupilotMega.HIL.Utils.OGLtoBCBF(att.pitch, att.roll, att.yaw, 0, 0, 9.8);
//Console.WriteLine("acc {0:0.00000} {1:0.00000} {2:0.00000} \t {3:0.00000} {4:0.00000} {5:0.00000}", ans.Item1, ans.Item2, ans.Item3, accel3D.X, accel3D.Y, accel3D.Z);
sitlout.alt = gps.alt;
sitlout.lat = gps.lat;
sitlout.lon = gps.lon;
#if !MAVLINK10
sitlout.heading = gps.hdg;
#else
sitlout.heading = gps.cog;
#endif
sitlout.v_north = DATA[21][4];
sitlout.v_east = DATA[21][5];
// correct accel
sitlout.ax = -ans.Item2; // pitch
sitlout.ay = -ans.Item1; // roll
sitlout.az = ans.Item3; // yaw
sitlout.phidot = -0.5;// att.pitchspeed;
// sitlout.thetadot = att.rollspeed;
//sitlout.psidot = att.yawspeed;
sitlout.phi = att.roll * rad2deg;
sitlout.theta = att.pitch * rad2deg;
sitlout.psi = att.yaw * rad2deg;
sitlout.vcas = asp.airspeed;
sitlout.check = (int)0x4c56414e;
byte[] sendme = StructureToByteArray(sitlout);
SITLSEND.Send(sendme, sendme.Length); SITLSEND.Send(sendme, sendme.Length);
return; return;
} }
#if MAVLINK10
TimeSpan gpsspan = DateTime.Now - lastgpsupdate; TimeSpan gpsspan = DateTime.Now - lastgpsupdate;
// add gps delay // add gps delay
@ -1224,12 +979,12 @@ namespace ArdupilotMega.GCSViews
lastgpsupdate = DateTime.Now; lastgpsupdate = DateTime.Now;
// save current fix = 3 // save current fix = 3
gpsbuffer[gpsbufferindex % gpsbuffer.Length] = gps; sitl_fdmbuffer[gpsbufferindex % sitl_fdmbuffer.Length] = sitldata;
// Console.WriteLine((gpsbufferindex % gpsbuffer.Length) + " " + ((gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length)); // Console.WriteLine((gpsbufferindex % gpsbuffer.Length) + " " + ((gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length));
// return buffer index + 5 = (3 + 5) = 8 % 6 = 2 // return buffer index + 5 = (3 + 5) = 8 % 6 = 2
oldgps = gpsbuffer[(gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length]; oldgps = sitl_fdmbuffer[(gpsbufferindex + (sitl_fdmbuffer.Length - 1)) % sitl_fdmbuffer.Length];
//comPort.sendPacket(oldgps); //comPort.sendPacket(oldgps);
@ -1237,72 +992,42 @@ namespace ArdupilotMega.GCSViews
} }
hilstate.alt = oldgps.alt; MAVLink.mavlink_hil_state_t hilstate = new MAVLink.mavlink_hil_state_t();
hilstate.lat = oldgps.lat;
hilstate.lon = oldgps.lon; hilstate.time_usec = (UInt64)DateTime.Now.Ticks; // microsec
hilstate.pitch = att.pitch;
hilstate.pitchspeed = att.pitchspeed; hilstate.lat = (int)(oldgps.latitude * 1e7); // * 1E7
hilstate.roll = att.roll; hilstate.lon = (int)(oldgps.longitude * 1e7); // * 1E7
hilstate.rollspeed = att.rollspeed; hilstate.alt = (int)(oldgps.altitude * 1000); // mm
hilstate.time_usec = gps.time_usec;
hilstate.vx = (short)(gps.vel * Math.Sin(gps.cog * deg2rad)); // Console.WriteLine(hilstate.alt);
hilstate.vy = (short)(gps.vel * Math.Cos(gps.cog * deg2rad));
hilstate.vz = 0; hilstate.pitch = (float)sitldata.pitchDeg * deg2rad; // (rad)
hilstate.xacc = imu.xacc; hilstate.pitchspeed = (float)sitldata.pitchRate * rad2deg; // (rad/s)
hilstate.yacc = imu.yacc; hilstate.roll = (float)sitldata.rollDeg * deg2rad; // (rad)
hilstate.yaw = att.yaw; hilstate.rollspeed = (float)sitldata.rollRate * deg2rad; // (rad/s)
hilstate.yawspeed = att.yawspeed; hilstate.yaw = (float)sitldata.yawDeg * deg2rad; // (rad)
hilstate.zacc = imu.zacc; hilstate.yawspeed = (float)sitldata.yawRate * deg2rad; // (rad/s)
hilstate.vx = (short)(sitldata.speedN * 100); // m/s * 100
hilstate.vy = (short)(sitldata.speedE * 100); // m/s * 100
hilstate.vz = 0; // m/s * 100
hilstate.xacc = (short)(sitldata.xAccel * 1000); // (mg)
hilstate.yacc = (short)(sitldata.yAccel * 1000); // (mg)
hilstate.zacc = (short)(sitldata.zAccel * 1000); // (mg)
comPort.sendPacket(hilstate); comPort.sendPacket(hilstate);
// comPort.sendPacket(oldgps); // comPort.sendPacket(oldgps);
comPort.sendPacket(asp); comPort.sendPacket(new MAVLink.mavlink_vfr_hud_t() { airspeed = (float)sitldata.airspeed } );
#else
if (chkSensor.Checked == false) // attitude
{
comPort.sendPacket(att);
comPort.sendPacket(asp);
}
else // raw imu
{
// imudata
comPort.sendPacket(imu);
#endif
MAVLink.mavlink_raw_pressure_t pres = new MAVLink.mavlink_raw_pressure_t(); MAVLink.mavlink_raw_pressure_t pres = new MAVLink.mavlink_raw_pressure_t();
double calc = (101325 * Math.Pow(1 - 2.25577 * Math.Pow(10, -5) * gps.alt, 5.25588)); // updated from valid gps double calc = (101325 * Math.Pow(1 - 2.25577 * Math.Pow(10, -5) * sitldata.altitude, 5.25588)); // updated from valid gps
pres.press_diff1 = (short)(int)(calc - 101325); // 0 alt is 0 pa pres.press_diff1 = (short)(int)(calc - 101325); // 0 alt is 0 pa
comPort.sendPacket(pres); // comPort.sendPacket(pres);
#if !MAVLINK10
comPort.sendPacket(asp);
}
TimeSpan gpsspan = DateTime.Now - lastgpsupdate;
// add gps delay
if (gpsspan.TotalMilliseconds >= GPS_rate)
{
lastgpsupdate = DateTime.Now;
// save current fix = 3
gpsbuffer[gpsbufferindex % gpsbuffer.Length] = gps;
// Console.WriteLine((gpsbufferindex % gpsbuffer.Length) + " " + ((gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length));
// return buffer index + 5 = (3 + 5) = 8 % 6 = 2
comPort.sendPacket(gpsbuffer[(gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length]);
gpsbufferindex++;
}
#endif
} }
HIL.QuadCopter quad = new HIL.QuadCopter(); HIL.QuadCopter quad = new HIL.QuadCopter();
@ -1395,9 +1120,9 @@ namespace ArdupilotMega.GCSViews
Array.Copy(BitConverter.GetBytes((double)(quad.longitude)), 0, FlightGear, 40, 8); Array.Copy(BitConverter.GetBytes((double)(quad.longitude)), 0, FlightGear, 40, 8);
Array.Copy(BitConverter.GetBytes((double)(quad.altitude * 1 / ft2m)), 0, FlightGear, 48, 8); Array.Copy(BitConverter.GetBytes((double)(quad.altitude * 1 / ft2m)), 0, FlightGear, 48, 8);
Array.Copy(BitConverter.GetBytes((double)((quad.altitude - quad.ground_level) * 1 / ft2m)), 0, FlightGear, 56, 8); Array.Copy(BitConverter.GetBytes((double)((quad.altitude - quad.ground_level) * 1 / ft2m)), 0, FlightGear, 56, 8);
Array.Copy(BitConverter.GetBytes((double)(quad.roll)), 0, FlightGear, 64, 8); Array.Copy(BitConverter.GetBytes((double)(quad.roll * rad2deg)), 0, FlightGear, 64, 8);
Array.Copy(BitConverter.GetBytes((double)(quad.pitch)), 0, FlightGear, 72, 8); Array.Copy(BitConverter.GetBytes((double)(quad.pitch * rad2deg)), 0, FlightGear, 72, 8);
Array.Copy(BitConverter.GetBytes((double)(quad.yaw)), 0, FlightGear, 80, 8); Array.Copy(BitConverter.GetBytes((double)(quad.yaw * rad2deg)), 0, FlightGear, 80, 8);
if (RAD_softFlightGear.Checked || RAD_softXplanes.Checked) if (RAD_softFlightGear.Checked || RAD_softXplanes.Checked)
{ {

View File

@ -19,72 +19,77 @@ namespace ArdupilotMega.HIL
public double longitude = 0; public double longitude = 0;
public double altitude = 0; public double altitude = 0;
public double pitch = 0.0; //# degrees public Matrix3 dcm = new Matrix3();
public double roll = 0.0; //# degrees
public double yaw = 0.0; //# degrees
public double pitch_rate = 0.0; //# degrees/s public Vector3 gyro = new Vector3(0, 0, 0);
public double roll_rate = 0.0; //# degrees/s
public double yaw_rate = 0.0; //# degrees/s
public double pDeg = 0.0; // degrees/s public Vector3 accel_body = new Vector3(0, 0, 0);
public double qDeg = 0.0; // degrees/s
public double rDeg = 0.0; // degrees/s
public Vector3d velocity = new Vector3d(0, 0, 0); //# m/s, North, East, Up public Vector3 velocity = new Vector3(0, 0, 0); //# m/s, North, East, Up
public Vector3d position = new Vector3d(0, 0, 0); //# m North, East, Up public Vector3 position = new Vector3(0, 0, 0); //# m North, East, Up
public Vector3d accel = new Vector3d(0, 0, 0); //# m/s/s North, East, Up public Vector3 accel = new Vector3(0, 0, 0); //# m/s/s North, East, Up
public double mass = 0.0; public double mass = 0.0;
public double update_frequency = 50;//# in Hz public double update_frequency = 50;//# in Hz
public double gravity = 9.8;//# m/s/s public double gravity = 9.80665;//# m/s/s
public Vector3d accelerometer = new Vector3d(0, 0, -9.8); public Vector3 accelerometer = new Vector3(0, 0, -9.80665);
public double roll = 0;
public double pitch = 0;
public double yaw = 0;
public Aircraft() public Aircraft()
{ {
self = this; self = this;
} }
public void normalise() public bool on_ground(Vector3 position = null)
{ {
roll = norm(roll, -180, 180); // '''return true if we are on the ground'''
pitch = norm(pitch, -180, 180); if (position == null)
yaw = norm(yaw, 0, 360); position = self.position;
return (-position.z) + self.home_altitude <= self.ground_level + self.frame_height;
} }
double norm(double angle, double min, double max) public void update_position(double delta_time = 0)
{
while (angle > max)
angle -= 360;
while (angle < min)
angle += 360;
return angle;
}
public void update_position()
{ {
//'''update lat/lon/alt from position''' //'''update lat/lon/alt from position'''
double radius_of_earth = 6378100.0;// # in meters double bearing = degrees(atan2(self.position.y, self.position.x));
double dlat = rad2deg * (Math.Atan(position.X / radius_of_earth)); double distance = sqrt(self.position.x * self.position.x + self.position.y * self.position.y);
double dlon = rad2deg * (Math.Atan(position.Y / radius_of_earth));
altitude = home_altitude + position.Z; gps_newpos(self.home_latitude, self.home_longitude,
latitude = home_latitude + dlat; bearing, distance);
longitude = home_longitude + dlon;
// work out what the accelerometer would see self.altitude = self.home_altitude - self.position.z;
double xAccel = sin(radians(self.pitch)) * cos(radians(self.roll));
double yAccel = -sin(radians(self.roll)) * cos(radians(self.pitch)); Vector3 velocity_body = self.dcm.transposed() * self.velocity;
double zAccel = -cos(radians(self.roll)) * cos(radians(self.pitch));
double scale = 9.81 / sqrt((xAccel * xAccel) + (yAccel * yAccel) + (zAccel * zAccel)); self.accelerometer = self.accel_body.copy();
xAccel *= scale;
yAccel *= scale;
zAccel *= scale;
self.accelerometer = new Vector3d(xAccel, yAccel, zAccel);
} }
public void gps_newpos(double lat, double lon, double bearing, double distance)
{
// '''extrapolate latitude/longitude given a heading and distance
// thanks to http://www.movable-type.co.uk/scripts/latlong.html
// '''
// from math import sin, asin, cos, atan2, radians, degrees
double radius_of_earth = 6378100.0;//# in meters
double lat1 = radians(lat);
double lon1 = radians(lon);
double brng = radians(bearing);
double dr = distance / radius_of_earth;
double lat2 = asin(sin(lat1) * cos(dr) +
cos(lat1) * sin(dr) * cos(brng));
double lon2 = lon1 + atan2(sin(brng) * sin(dr) * cos(lat1),
cos(dr) - sin(lat1) * sin(lat2));
latitude = degrees(lat2);
longitude = degrees(lon2);
//return (degrees(lat2), degrees(lon2));
}
} }
} }

View File

@ -0,0 +1,364 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sharp3D.Math.Core;
namespace ArdupilotMega.HIL
{
class FlashQuad
{
public ahrsc ahrs = new ahrsc() ;// :AHRS;
public Vector3D loc = new Vector3D() ;// :Location;
public param g = new param() ;// :Parameters;
//public var apm_rc :APM_RC;
//public var motor_filter_0 :AverageFilter;
//public var motor_filter_1 :AverageFilter;
//public var motor_filter_2 :AverageFilter;
//public var motor_filter_3 :AverageFilter;
public Vector3D drag = new Vector3D();// :Vector3D; //
public Vector3D airspeed = new Vector3D();// :Vector3D; //
//public var thrust :Vector3D; //
public Vector3D position = new Vector3D();// :Vector3D; //
public Vector3D velocity = new Vector3D();// :Vector3D;
//public var velocity_old :Vector3D;
//public var wind :Point; //
public Vector3D rot_accel = new Vector3D();// :Vector3D; //
public Vector3D angle3D = new Vector3D();// :Vector3D; //
//public var windGenerator :Wind; //
public double gravity = 980.5;
public double thrust_scale = 0.4;
public double throttle = 500;
public double rotation_bias = 1;
private double _jump_z = 0;
private Vector3D v3 = new Vector3D();
public class ahrsc
{
public Matrix3D dcm = new Matrix3D(Matrix3D.Identity);
public Vector3D gyro = new Vector3D();
public Vector3D omega = new Vector3D();
public Vector3D accel = new Vector3D();
public Vector3D rotation_speed = new Vector3D();
public double roll_sensor;
public double pitch_sensor;
public double yaw_sensor;
}
public class param
{
// ---------------------------------------------
// Sim Details controls
// ---------------------------------------------
public int sim_iterations = 99999;
public int sim_speed = 1;
public double windSpeedMin = 150;
public double windSpeedMax = 200;
public double windPeriod = 30000;
public double windDir = 45;
public double airDensity = 1.184;
//public var crossSection :Number = 0.015;
public double crossSection = 0.012;
public double dragCE = 0.20;
public double speed_filter_size = 2;
public double motor_kv = 1000;
public double moment = 3;
public double mass = 500;
public int esc_delay = 12;
// -----------------------------------------
// Inertial control
// -----------------------------------------
public double speed_correction_z = 0.0350;
public double xy_speed_correction = 0.030;
public double xy_offset_correction = 0.00001;
public double xy_pos_correction = 0.08;
public double z_offset_correction = 0.00004;
public double z_pos_correction = 0.2;
public double accel_bias_x = .9;
public double accel_bias_z = .9;
public double accel_bias_y = .9;
}
double scale_rc(int sn, float servo, float min, float max)
{
float min_pwm = 1000;
float max_pwm = 2000;
//'''scale a PWM value''' # default to servo range of 1000 to 2000
if (MainV2.comPort.param.Count > 0)
{
min_pwm = int.Parse(MainV2.comPort.param["RC3_MIN"].ToString());
max_pwm = int.Parse(MainV2.comPort.param["RC3_MAX"].ToString());
}
float p = (servo - min_pwm) / (max_pwm - min_pwm);
float v = min + p * (max - min);
if (v < min)
v = min;
if (v > max)
v = max;
return v * 1000;
}
public void update(ref double[] motor_output, double dt)
{
var _thrust = 0.0;
rot_accel = new Vector3D(0,0,0);
angle3D.X = angle3D.Y = 0;
angle3D.Z = 1;
// wind = windGenerator.read();
// ESC's moving average filter
// var motor_output:Array = new Array(4);
// motor_output[0] = motor_filter_0.apply(apm_rc.get_motor_output(0));
// motor_output[1] = motor_filter_1.apply(apm_rc.get_motor_output(1));
// motor_output[2] = motor_filter_2.apply(apm_rc.get_motor_output(2));
// motor_output[3] = motor_filter_3.apply(apm_rc.get_motor_output(3));
for (int i = 0; i < motor_output.Length; i++)
{
if (motor_output[i] <= 0.0)
{
motor_output[i] = 0;
}
else
{
motor_output[i] = scale_rc(i, (float)motor_output[i], 0.0f, 1.0f);
//servos[i] = motor_speed[i];
}
}
/*
2
1 0
3
*/
// setup motor rotations
rot_accel.X -= g.motor_kv * motor_output[0]; // roll
rot_accel.X += g.motor_kv * motor_output[1];
rot_accel.Y -= g.motor_kv * motor_output[3];
rot_accel.Y += g.motor_kv * motor_output[2];
rot_accel.Z += g.motor_kv * motor_output[0] * .08; // YAW
rot_accel.Z += g.motor_kv * motor_output[1] * .08;
rot_accel.Z -= g.motor_kv * motor_output[2] * .08;
rot_accel.Z -= g.motor_kv * motor_output[3] * .08;
rot_accel.X /= g.moment;
rot_accel.Y /= g.moment;
rot_accel.Z /= g.moment;
//# rotational air resistance
// Gyro is the rotation speed in deg/s
// update rotational rates in body frame
ahrs.gyro.X += rot_accel.X * dt;
ahrs.gyro.Y += rot_accel.Y * dt;
ahrs.gyro.Z += rot_accel.Z * dt;
//ahrs.gyro.z += 200;
ahrs.gyro.Z *= .995;// some drag
// ahrs.dcm = Matrix3D.Identity;
// move earth frame to body frame
Vector3D tmp = Matrix3D.Transform(ahrs.dcm,ahrs.gyro) ;//ahrs.dcm.transformVector(ahrs.gyro);
// update attitude:
ahrs.dcm += new Matrix3D(new Vector3D((tmp.X/100) * dt,0,0),new Vector3D(0,(tmp.Y/100) * dt,0),new Vector3D(0,0,(tmp.Z/100) * dt));
//ahrs.dcm.appendRotation((tmp.X/100) * dt, Vector3D.X_AXIS); // ROLL
//ahrs.dcm.appendRotation((tmp.Y/100) * dt, Vector3D.Y_AXIS); // PITCH
//ahrs.dcm.appendRotation((tmp.Z/100) * dt, Vector3D.Z_AXIS); // YAW
// ------------------------------------
// calc thrust
// ------------------------------------
//get_motor_output returns 0 : 1000
_thrust += motor_output[0] * thrust_scale;
_thrust += motor_output[1] * thrust_scale;
_thrust += motor_output[2] * thrust_scale;
_thrust += motor_output[3] * thrust_scale;
Vector3D accel_body = new Vector3D(0, 0, (_thrust * -.9) / g.mass);
//var accel_body:Vector3D = new Vector3D(0, 0, 0);
Vector3D accel_earth = Matrix3D.Transform(ahrs.dcm,(accel_body));
angle3D = Matrix3D.Transform(ahrs.dcm,(angle3D));
//trace(ahrs.gyro.y, accel_earth.x);
//trace(ahrs.gyro.x, ahrs.gyro.y, ahrs.gyro.z);
// ------------------------------------
// calc copter velocity
// ------------------------------------
// calc Drag
drag.X = .5 * g.airDensity * airspeed.X * airspeed.X * g.dragCE * g.crossSection;
drag.Y = .5 * g.airDensity * airspeed.Y * airspeed.Y * g.dragCE * g.crossSection;
drag.Z = .5 * g.airDensity * airspeed.Z * airspeed.Z * g.dragCE * g.crossSection;
///*
// this calulation includes wind
if(airspeed.X >= 0)
accel_earth.X -= drag.X;
else
accel_earth.X += drag.X;
// Add in Drag
if(airspeed.Y >= 0)
accel_earth.Y -= drag.Y;
else
accel_earth.Y += drag.Y;
if(airspeed.Z <= 0)
accel_earth.Z -= drag.Z;
else
accel_earth.Z += drag.Z;
//*/
// hacked vert disturbance
accel_earth.Z += _jump_z * dt;
_jump_z *= .999;
// Add in Gravity
accel_earth.Z += gravity;
if(accel_earth.Z < 0)
accel_earth.Z *=.9;
if(position.Z <=.11 && accel_earth.Z > 0){
accel_earth.Z = 0;
}
velocity.X += (accel_earth.X * dt); // + : Forward (North)
velocity.Y += (accel_earth.Y * dt); // + : Right (East)
velocity.Z -= (accel_earth.Z * dt); // + : Up
//trace(Math.floor(velocity.x),Math.floor(velocity.y),Math.floor(velocity.z));
// ------------------------------------
// calc inertia
// ------------------------------------
// work out acceleration as seen by the accelerometers. It sees the kinematic
// acceleration (ie. real movement), plus gravity
Matrix3D dcm_t = ahrs.dcm.Clone();
dcm_t.Transpose();
double t = accel_earth.Z;
accel_earth.Z -= gravity;
ahrs.accel = Matrix3D.Transform(dcm_t,(accel_earth));
ahrs.accel *= 0.01;
//ahrs.accel = accel_earth.clone();
ahrs.accel.X *= g.accel_bias_x;
ahrs.accel.Y *= g.accel_bias_y;
ahrs.accel.Z *= g.accel_bias_z;
// ------------------------------------
// calc Position
// ------------------------------------
position.Y += velocity.X * dt;
position.X += velocity.Y * dt;
position.Z += velocity.Z * dt;
position.Z = Math.Min(position.Z, 4000);
// XXX Force us to 3m above ground
//position.z = 300;
airspeed.X = (velocity.X);// - wind.x);
airspeed.Y = (velocity.Y);// - wind.y);
airspeed.Z = velocity.Z;
// Altitude
// --------
if(position.Z <=.1){
position.Z = .1;
velocity.X = 0;
velocity.Y = 0;
velocity.Z = 0;
airspeed.X = 0;
airspeed.Y = 0;
airspeed.Z = 0;
//ahrs.init();
}
// get omega - the simulated Gyro output
ahrs.omega.X = radiansx100(ahrs.gyro.X);
ahrs.omega.Y = radiansx100(ahrs.gyro.Y);
ahrs.omega.Z = radiansx100(ahrs.gyro.Z);
// get the Eulers output
v3 = new Vector3D(Math.Atan2(-ahrs.dcm.M23, ahrs.dcm.M22), Math.Asin(ahrs.dcm.M21), Math.Atan2(-ahrs.dcm.M31, ahrs.dcm.M11));// ahrs.dcm.decompose();
ahrs.roll_sensor = Math.Floor(degrees(v3.X) * 100);
ahrs.pitch_sensor = Math.Floor(degrees(v3.Y) * 100);
ahrs.yaw_sensor = Math.Floor(degrees(v3.Z) * 100);
// store the position for the GPS object
loc.X = position.X;
loc.Y = position.Y;
loc.Z = position.Z;
}
public double constrain(double val, double min, double max)
{
val = Math.Max(val, min);
val = Math.Min(val, max);
return val;
}
public double wrap_180(int error)
{
if (error > 18000) error -= 36000;
if (error < -18000) error += 36000;
return error;
}
public int wrap_360(int error)
{
if (error > 36000) error -= 36000;
if (error < 0) error += 36000;
return error;
}
public double radiansx100(double n)
{
return 0.000174532925 * n;
}
public double degreesx100(double r)
{
return r * 5729.57795;
}
public double degrees(double r)
{
return r * 57.2957795;
}
public double radians(double n)
{
return 0.0174532925 * n;
}
}
}

View File

@ -0,0 +1,179 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YLScsDrawing.Drawing3d;
namespace ArdupilotMega.HIL
{
public class Matrix3
{
// '''a 3x3 matrix, intended as a rotation matrix'''
Matrix3 self;
Vector3 a;
Vector3 b;
Vector3 c;
public Matrix3()
{
self = this;
self.identity();
}
public Matrix3(Vector3 a, Vector3 b, Vector3 c)
{
self = this;
this.a = a;
this.b = b;
this.c = c;
}
public new string ToString()
{
return String.Format("Matrix3(({0}, {1}, {2}), ({3}, {4}, {5}), ({6}, {7}, {8}))",
self.a.x, self.a.y, self.a.z,
self.b.x, self.b.y, self.b.z,
self.c.x, self.c.y, self.c.z);
}
public void identity()
{
self.a = new Vector3(1, 0, 0);
self.b = new Vector3(0, 1, 0);
self.c = new Vector3(0, 0, 1);
}
public Matrix3 transposed()
{
return new Matrix3(new Vector3(self.a.x, self.b.x, self.c.x),
new Vector3(self.a.y, self.b.y, self.c.y),
new Vector3(self.a.z, self.b.z, self.c.z));
}
public void from_euler(double roll, double pitch, double yaw)
{
// '''fill the matrix from Euler angles in radians'''
double cp = Utils.cos(pitch);
double sp = Utils.sin(pitch);
double sr = Utils.sin(roll);
double cr = Utils.cos(roll);
double sy = Utils.sin(yaw);
double cy = Utils.cos(yaw);
self.a.x = cp * cy;
self.a.y = (sr * sp * cy) - (cr * sy);
self.a.z = (cr * sp * cy) + (sr * sy);
self.b.x = cp * sy;
self.b.y = (sr * sp * sy) + (cr * cy);
self.b.z = (cr * sp * sy) - (sr * cy);
self.c.x = -sp;
self.c.y = sr * cp;
self.c.z = cr * cp;
}
public void to_euler(ref double roll, ref double pitch, ref double yaw)
{
// '''find Euler angles for the matrix'''
if (self.c.x >= 1.0)
pitch = Math.PI;
else if (self.c.x <= -1.0)
pitch = -Math.PI;
else
pitch = -Utils.asin(self.c.x);
roll = Utils.atan2(self.c.y, self.c.z);
yaw = Utils.atan2(self.b.x, self.a.x);
//return (roll, pitch, yaw)
}
public static Matrix3 operator +(Matrix3 self, Matrix3 m)
{
return new Matrix3(self.a + m.a, self.b + m.b, self.c + m.c);
}
public static Matrix3 operator -(Matrix3 self, Matrix3 m)
{
return new Matrix3(self.a - m.a, self.b - m.b, self.c - m.c);
}
public static Vector3 operator *(Matrix3 self, Vector3 v)
{
return new Vector3(self.a.x * v.x + self.a.y * v.y + self.a.z * v.z,
self.b.x * v.x + self.b.y * v.y + self.b.z * v.z,
self.c.x * v.x + self.c.y * v.y + self.c.z * v.z);
}
public static Matrix3 operator *(Matrix3 self, Matrix3 m)
{
return new Matrix3(new Vector3(self.a.x * m.a.x + self.a.y * m.b.x + self.a.z * m.c.x,
self.a.x * m.a.y + self.a.y * m.b.y + self.a.z * m.c.y,
self.a.x * m.a.z + self.a.y * m.b.z + self.a.z * m.c.z),
new Vector3(self.b.x * m.a.x + self.b.y * m.b.x + self.b.z * m.c.x,
self.b.x * m.a.y + self.b.y * m.b.y + self.b.z * m.c.y,
self.b.x * m.a.z + self.b.y * m.b.z + self.b.z * m.c.z),
new Vector3(self.c.x * m.a.x + self.c.y * m.b.x + self.c.z * m.c.x,
self.c.x * m.a.y + self.c.y * m.b.y + self.c.z * m.c.y,
self.c.x * m.a.z + self.c.y * m.b.z + self.c.z * m.c.z));
}
public static Matrix3 operator *(Matrix3 self, double v)
{
return new Matrix3(self.a * v, self.b * v, self.c * v);
}
public static Matrix3 operator /(Matrix3 self, double v)
{
return new Matrix3(self.a / v, self.b / v, self.c / v);
}
public static Matrix3 operator -(Matrix3 self)
{
return new Matrix3(-self.a, -self.b, -self.c);
}
public Matrix3 copy()
{
return new Matrix3(self.a.copy(), self.b.copy(), self.c.copy());
}
public void rotate(Vector3 g)
{
// '''rotate the matrix by a given amount on 3 axes'''
Matrix3 temp_matrix = new Matrix3(self.a.copy(), self.b.copy(), self.c.copy());
temp_matrix.a.x = a.y * g.z - a.z * g.y;
temp_matrix.a.y = a.z * g.x - a.x * g.z;
temp_matrix.a.z = a.x * g.y - a.y * g.x;
temp_matrix.b.x = b.y * g.z - b.z * g.y;
temp_matrix.b.y = b.z * g.x - b.x * g.z;
temp_matrix.b.z = b.x * g.y - b.y * g.x;
temp_matrix.c.x = c.y * g.z - c.z * g.y;
temp_matrix.c.y = c.z * g.x - c.x * g.z;
temp_matrix.c.z = c.x * g.y - c.y * g.x;
self.a += temp_matrix.a;
self.b += temp_matrix.b;
self.c += temp_matrix.c;
}
public void normalize()
{
// '''re-normalise a rotation matrix'''
Vector3 error = self.a * self.b;
Vector3 t0 = self.a - (self.b * (0.5 * error));
Vector3 t1 = self.b - (self.a * (0.5 * error));
Vector3 t2 = t0 % t1;
self.a = t0 * (1.0 / t0.length());
self.b = t1 * (1.0 / t1.length());
self.c = t2 * (1.0 / t2.length());
}
public double trace()
{
// '''the trace of the matrix'''
return self.a.x + self.b.y + self.c.z;
}
}
}

View File

@ -7,6 +7,7 @@ using log4net;
using YLScsDrawing.Drawing3d; using YLScsDrawing.Drawing3d;
using ArdupilotMega.HIL; using ArdupilotMega.HIL;
namespace ArdupilotMega.HIL namespace ArdupilotMega.HIL
{ {
public class Motor : Utils public class Motor : Utils
@ -116,7 +117,7 @@ namespace ArdupilotMega.HIL
double terminal_rotation_rate; double terminal_rotation_rate;
Motor[] motors; Motor[] motors;
Vector3d old_position; Vector3 old_position;
//# scaling from total motor power to Newtons. Allows the copter //# scaling from total motor power to Newtons. Allows the copter
@ -136,7 +137,7 @@ namespace ArdupilotMega.HIL
motor_speed = new double[motors.Length]; motor_speed = new double[motors.Length];
hover_throttle = 0.37; hover_throttle = 0.37;
terminal_velocity = 30.0; terminal_velocity = 30.0;
terminal_rotation_rate = 4 * 360.0; terminal_rotation_rate = 4 * 360.0 * deg2rad;
thrust_scale = (mass * gravity) / (motors.Length * hover_throttle); thrust_scale = (mass * gravity) / (motors.Length * hover_throttle);
@ -145,58 +146,28 @@ namespace ArdupilotMega.HIL
double scale_rc(int sn, float servo, float min, float max) double scale_rc(int sn, float servo, float min, float max)
{ {
float min_pwm = 1000; return ((servo - 1000) / 1000.0);
float max_pwm = 2000;
//'''scale a PWM value''' # default to servo range of 1000 to 2000
if (MainV2.comPort.param.Count > 0)
{
min_pwm = int.Parse(MainV2.comPort.param["RC3_MIN"].ToString());
max_pwm = int.Parse(MainV2.comPort.param["RC3_MAX"].ToString());
}
float p = (servo - min_pwm) / (max_pwm - min_pwm);
float v = min + p * (max - min);
if (v < min)
v = min;
if (v > max)
v = max;
return v;
} }
public void update(ref double[] servos, ArdupilotMega.GCSViews.Simulation.FGNetFDM fdm) public void update(ref double[] servos, ArdupilotMega.GCSViews.Simulation.FGNetFDM fdm)
{ {
for (int i = 0; i < servos.Length; i++) for (int i = 0; i < servos.Length; i++)
{ {
if (servos[i] <= 0.0) var servo = servos[(int)self.motors[i].servo - 1];
if (servo <= 0.0)
{ {
motor_speed[i] = 0; motor_speed[i] = 0;
} }
else else
{ {
motor_speed[i] = scale_rc(i, (float)servos[i], 0.0f, 1.0f); motor_speed[i] = scale_rc(i, (float)servo, 0.0f, 1.0f);
//servos[i] = motor_speed[i]; //servos[i] = motor_speed[i];
} }
} }
double[] m = motor_speed; double[] m = motor_speed;
/*
roll = 0;
pitch = 0;
yaw = 0;
roll_rate = 0;
pitch_rate = 0;
yaw_rate = 0;
*/
// Console.WriteLine("\nin m {0:0.000000} {1:0.000000} {2:0.000000} {3:0.000000}", m[0], m[1], m[2], m[3]);
// Console.WriteLine("in vel {0:0.000000} {1:0.000000} {2:0.000000}", velocity.X, velocity.Y, velocity.Z);
//Console.WriteLine("in r {0:0.000000} p {1:0.000000} y {2:0.000000} - r {3:0.000000} p {4:0.000000} y {5:0.000000}", roll, pitch, yaw, roll_rate, pitch_rate, yaw_rate);
// m[0] *= 0.5;
//# how much time has passed? //# how much time has passed?
DateTime t = DateTime.Now; DateTime t = DateTime.Now;
TimeSpan delta_time = t - last_time; // 0.02 TimeSpan delta_time = t - last_time; // 0.02
@ -208,218 +179,133 @@ namespace ArdupilotMega.HIL
} }
// rotational acceleration, in degrees/s/s, in body frame // rotational acceleration, in degrees/s/s, in body frame
double roll_accel = 0.0; Vector3 rot_accel = new Vector3(0, 0, 0);
double pitch_accel = 0.0;
double yaw_accel = 0.0;
double thrust = 0.0; double thrust = 0.0;
foreach (var i in range((self.motors.Length))) foreach (var i in range((self.motors.Length)))
{ {
roll_accel += (-5000.0 * deg2rad) * sin(radians(self.motors[i].angle)) * m[i]; rot_accel.x += -radians(5000.0) * sin(radians(self.motors[i].angle)) * m[i];
pitch_accel += (5000.0 * deg2rad) * cos(radians(self.motors[i].angle)) * m[i]; rot_accel.y += radians(5000.0) * cos(radians(self.motors[i].angle)) * m[i];
if (self.motors[i].clockwise) if (self.motors[i].clockwise)
{ {
yaw_accel -= m[i] * 400.0 * deg2rad; rot_accel.z -= m[i] * radians(400.0);
} }
else else
{ {
yaw_accel += m[i] * 400.0 * deg2rad; rot_accel.z += m[i] * radians(400.0);
} }
thrust += m[i] * self.thrust_scale; // newtons thrust += m[i] * self.thrust_scale; // newtons
} }
// rotational resistance // rotational air resistance
roll_accel -= (self.pDeg / self.terminal_rotation_rate) * (5000.0 * deg2rad); rot_accel.x -= self.gyro.x * radians(5000.0) / self.terminal_rotation_rate;
pitch_accel -= (self.qDeg / self.terminal_rotation_rate) * (5000.0 * deg2rad); rot_accel.y -= self.gyro.y * radians(5000.0) / self.terminal_rotation_rate;
yaw_accel -= (self.rDeg / self.terminal_rotation_rate) * (400.0 * deg2rad); rot_accel.z -= self.gyro.z * radians(400.0) / self.terminal_rotation_rate;
//Console.WriteLine("roll {0} {1} {2}", roll_accel, roll_rate, roll); // Console.WriteLine("rot_accel " + rot_accel.ToString());
//# update rotational rates in body frame // update rotational rates in body frame
self.pDeg += roll_accel * delta_time.TotalSeconds; self.gyro += rot_accel * delta_time.TotalSeconds;
self.qDeg += pitch_accel * delta_time.TotalSeconds;
self.rDeg += yaw_accel * delta_time.TotalSeconds;
// Console.WriteLine("roll {0} {1} {2}", roll_accel, roll_rate, roll); // Console.WriteLine("gyro " + gyro.ToString());
// calculate rates in earth frame // update attitude
self.dcm.rotate(self.gyro * delta_time.TotalSeconds);
self.dcm.normalize();
var answer = BodyRatesToEarthRates(self.roll, self.pitch, self.yaw,
self.pDeg, self.qDeg, self.rDeg);
self.roll_rate = answer.Item1;
self.pitch_rate = answer.Item2;
self.yaw_rate = answer.Item3;
// self.roll_rate = pDeg; // air resistance
// self.pitch_rate = qDeg; Vector3 air_resistance = -self.velocity * (self.gravity / self.terminal_velocity);
// self.yaw_rate = rDeg;
//# update rotation accel_body = new Vector3(0, 0, -thrust / self.mass);
roll += roll_rate * delta_time.TotalSeconds; Vector3 accel_earth = self.dcm * accel_body;
pitch += pitch_rate * delta_time.TotalSeconds; accel_earth += new Vector3(0, 0, self.gravity);
yaw += yaw_rate * delta_time.TotalSeconds; accel_earth += air_resistance;
// add in some wind
// accel_earth += self.wind.accel(self.velocity);
// Console.WriteLine("roll {0} {1} {2}", roll_accel, roll_rate, roll); // if we're on the ground, then our vertical acceleration is limited
// to zero. This effectively adds the force of the ground on the aircraft
if (self.on_ground() && accel_earth.z > 0)
accel_earth.z = 0;
//Console.WriteLine("r {0:0.0} p {1:0.0} y {2:0.0} - r {3:0.0} p {4:0.0} y {5:0.0} ms {6:0.000}", roll, pitch, yaw, roll_rate, pitch_rate, yaw_rate, delta_time.TotalSeconds); // work out acceleration as seen by the accelerometers. It sees the kinematic
// acceleration (ie. real movement), plus gravity
self.accel_body = self.dcm.transposed() * (accel_earth + new Vector3(0, 0, -self.gravity));
//# air resistance // new velocity vector
Vector3d air_resistance = -velocity * (gravity / terminal_velocity); self.velocity += accel_earth * delta_time.TotalSeconds;
//# normalise rotations if (double.IsNaN(velocity.x) || double.IsNaN(velocity.y) || double.IsNaN(velocity.z))
normalise(); velocity = new Vector3();
double accel = thrust / mass; // new position vector
old_position = self.position.copy();
self.position += self.velocity * delta_time.TotalSeconds;
//Console.WriteLine("in {0:0.000000} {1:0.000000} {2:0.000000} {3:0.000000}", roll, pitch, yaw, accel); if (home_latitude == 0)
Vector3d accel3D = RPY_to_XYZ(roll, pitch, yaw, accel);
//Console.WriteLine("accel3D " + accel3D.X + " " + accel3D.Y + " " + accel3D.Z);
accel3D += new Vector3d(0, 0, -gravity);
accel3D += air_resistance;
Random rand = new Random();
//velocity.X += .02 + rand.NextDouble() * .03;
//velocity.Y += .02 + rand.NextDouble() * .03;
//# new velocity vector
velocity += accel3D * delta_time.TotalSeconds;
this.accel = accel3D;
//# new position vector
old_position = new Vector3d(position);
position += velocity * delta_time.TotalSeconds;
// Console.WriteLine(fdm.agl + " "+ fdm.altitude);
//Console.WriteLine("Z {0} halt {1} < gl {2} fh {3}" ,position.Z , home_altitude , ground_level , frame_height);
if (home_latitude == 0 || home_latitude > 90 || home_latitude < -90 || home_longitude == 0)
{ {
this.home_latitude = fdm.latitude * rad2deg; home_latitude = fdm.latitude * rad2deg;
this.home_longitude = fdm.longitude * rad2deg; home_longitude = fdm.longitude * rad2deg;
this.home_altitude = fdm.altitude * ft2m; home_altitude = altitude;
this.ground_level = this.home_altitude;
this.altitude = fdm.altitude * ft2m;
this.latitude = fdm.latitude * rad2deg;
this.longitude = fdm.longitude * rad2deg;
} }
//# constrain height to the ground // constrain height to the ground
if (position.Z + home_altitude < ground_level + frame_height) if (self.on_ground())
{ {
if (old_position.Z + home_altitude > ground_level + frame_height) if (!self.on_ground(old_position))
{ Console.WriteLine("Hit ground at {0} m/s", (self.velocity.z));
// Console.WriteLine("Hit ground at {0} m/s", (-velocity.Z));
} self.velocity = new Vector3(0, 0, 0);
velocity = new Vector3d(0, 0, 0); // zero roll/pitch, but keep yaw
roll_rate = 0; double r = 0;
pitch_rate = 0; double p = 0;
yaw_rate = 0; double y = 0;
roll = 0; self.dcm.to_euler(ref r, ref p, ref y);
pitch = 0; self.dcm.from_euler(0, 0, y);
position = new Vector3d(position.X, position.Y,
ground_level + frame_height - home_altitude + 0); self.position = new Vector3(self.position.x, self.position.y,
// Console.WriteLine("here " + position.Z); -(self.ground_level + self.frame_height - self.home_altitude));
} }
//# update lat/lon/altitude // update lat/lon/altitude
update_position(); self.update_position(delta_time.TotalSeconds);
// send to apm // send to apm
#if MAVLINK10 MAVLink.mavlink_hil_state_t hilstate = new MAVLink.mavlink_hil_state_t();
ArdupilotMega.MAVLink.mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_int_t();
#else
ArdupilotMega.MAVLink.mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_t();
#endif
ArdupilotMega.MAVLink.mavlink_attitude_t att = new ArdupilotMega.MAVLink.mavlink_attitude_t(); hilstate.time_usec = (UInt64)DateTime.Now.Ticks; // microsec
ArdupilotMega.MAVLink.mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.mavlink_vfr_hud_t(); hilstate.lat = (int)(latitude * 1e7); // * 1E7
hilstate.lon = (int)(longitude * 1e7); // * 1E7
hilstate.alt = (int)(altitude * 1000); // mm
att.roll = (float)roll * deg2rad; self.dcm.to_euler(ref roll, ref pitch, ref yaw);
att.pitch = (float)pitch * deg2rad;
att.yaw = (float)yaw * deg2rad;
att.rollspeed = (float)roll_rate * deg2rad;
att.pitchspeed = (float)pitch_rate * deg2rad;
att.yawspeed = (float)yaw_rate * deg2rad;
#if MAVLINK10 if (double.IsNaN(roll))
{
gps.alt = ((int)(altitude * 1000)); self.dcm.identity();
gps.fix_type = 3;
gps.vel = (ushort)(Math.Sqrt((velocity.X * velocity.X) + (velocity.Y * velocity.Y)) * 100);
gps.cog = (ushort)((((Math.Atan2(velocity.Y, velocity.X) * rad2deg) + 360) % 360) * 100);
gps.lat = (int)(latitude* 1.0e7);
gps.lon = (int)(longitude * 1.0e7);
gps.time_usec = ((ulong)DateTime.Now.Ticks);
asp.airspeed = gps.vel;
#else
gps.alt = ((float)(altitude));
gps.fix_type = 3;
gps.lat = ((float)latitude);
gps.lon = ((float)longitude);
gps.usec = ((ulong)DateTime.Now.Ticks);
//Random rand = new Random();
//gps.alt += (rand.Next(100) - 50) / 100.0f;
//gps.lat += (float)((rand.NextDouble() - 0.5) * 0.00005);
//gps.lon += (float)((rand.NextDouble() - 0.5) * 0.00005);
//gps.v += (float)(rand.NextDouble() - 0.5) * 1.0f;
gps.v = ((float)Math.Sqrt((velocity.X * velocity.X) + (velocity.Y * velocity.Y)));
gps.hdg = (float)(((Math.Atan2(velocity.Y, velocity.X) * rad2deg) + 360) % 360); ;
asp.airspeed = gps.v;
#endif
MainV2.comPort.sendPacket(att);
MAVLink.mavlink_raw_pressure_t pres = new MAVLink.mavlink_raw_pressure_t();
double calc = (101325 * Math.Pow(1 - 2.25577 * Math.Pow(10, -5) * gps.alt, 5.25588));
pres.press_diff1 = (short)(int)(calc); // 0 alt is 0 pa
MainV2.comPort.sendPacket(pres);
MainV2.comPort.sendPacket(asp);
if (framecount % 120 == 0)
{// 50 / 10 = 5 hz
MainV2.comPort.sendPacket(gps);
//Console.WriteLine(DateTime.Now.Millisecond + " GPS" );
} }
framecount++; hilstate.roll = (float)roll;
} hilstate.pitch = (float)pitch;
hilstate.yaw = (float)yaw;
public static Vector3d RPY_to_XYZ(double roll, double pitch, double yaw, double length) Vector3 earth_rates = Utils.BodyRatesToEarthRates(dcm, gyro);
{
Vector3d v = new Vector3d(0, 0, length);
v = new_rotate_euler(-deg2rad * (pitch), 0, -deg2rad * (roll)) * v;
v = new_rotate_euler(0, deg2rad * (yaw), 0) * v;
return v;
}
public static Quaternion new_rotate_euler(double heading, double attitude, double bank) hilstate.rollspeed = (float)earth_rates.x;
{ hilstate.pitchspeed = (float)earth_rates.y;
Quaternion Q = new Quaternion(); hilstate.yawspeed = (float)earth_rates.z;
double c1 = Math.Cos(heading / 2);
double s1 = Math.Sin(heading / 2);
double c2 = Math.Cos(attitude / 2);
double s2 = Math.Sin(attitude / 2);
double c3 = Math.Cos(bank / 2);
double s3 = Math.Sin(bank / 2);
Q.W = c1 * c2 * c3 - s1 * s2 * s3; hilstate.vx = (short)(velocity.y * 100); // m/s * 100
Q.X = s1 * s2 * c3 + c1 * c2 * s3; hilstate.vy = (short)(velocity.x * 100); // m/s * 100
Q.Y = s1 * c2 * c3 + c1 * s2 * s3; hilstate.vz = 0; // m/s * 100
Q.Z = c1 * s2 * c3 - s1 * c2 * s3;
return Q; hilstate.xacc = (short)(accelerometer.x * 1000); // (mg)
hilstate.yacc = (short)(accelerometer.y * 1000); // (mg)
hilstate.zacc = (short)(accelerometer.z * 1000); // (mg)
MainV2.comPort.sendPacket(hilstate);
} }
} }
} }

View File

@ -7,10 +7,10 @@ namespace ArdupilotMega.HIL
{ {
public class Utils public class Utils
{ {
public const float rad2deg = (float)(180 / System.Math.PI); public const double rad2deg = (180 / System.Math.PI);
public const float deg2rad = (float)(1.0 / rad2deg); public const double deg2rad = (1.0 / rad2deg);
public const float ft2m = (float)(1.0 / 3.2808399); public const double ft2m = (1.0 / 3.2808399);
public const float kts2fps = (float)1.68780986; public const double kts2fps = 1.68780986;
public static double sin(double val) public static double sin(double val)
{ {
@ -20,6 +20,14 @@ namespace ArdupilotMega.HIL
{ {
return System.Math.Cos(val); return System.Math.Cos(val);
} }
public static double asin(double val)
{
return System.Math.Asin(val);
}
public static double atan2(double val, double val2)
{
return System.Math.Atan2(val, val2);
}
public static double radians(double val) public static double radians(double val)
{ {
return val * deg2rad; return val * deg2rad;
@ -97,7 +105,7 @@ namespace ArdupilotMega.HIL
var R = Po * (sin(phi) * sin(psi) + cos(phi) * cos(psi) * sin(theta)) - Qo * (cos(psi) * sin(phi) - cos(phi) * sin(psi) * sin(theta)) + Ro * cos(phi) * cos(theta); var R = Po * (sin(phi) * sin(psi) + cos(phi) * cos(psi) * sin(theta)) - Qo * (cos(psi) * sin(phi) - cos(phi) * sin(psi) * sin(theta)) + Ro * cos(phi) * cos(theta);
// P = 0; // P = 0;
//Q = 0; //Q = 0;
//R = 0; //R = 0;
@ -160,7 +168,7 @@ namespace ArdupilotMega.HIL
* */ * */
} }
public static Tuple<double, double, double> OGLtoBCBF(double phi, double theta, double psi,double x, double y, double z) public static Tuple<double, double, double> OGLtoBCBF(double phi, double theta, double psi, double x, double y, double z)
{ {
double x_NED, y_NED, z_NED; double x_NED, y_NED, z_NED;
double Cr, Cp, Cy; double Cr, Cp, Cy;
@ -231,21 +239,25 @@ namespace ArdupilotMega.HIL
z = Z_plane; z = Z_plane;
} }
public static Tuple<double, double, double> BodyRatesToEarthRates(double roll, double pitch, double yaw, double pDeg, double qDeg, double rDeg) public static Vector3 BodyRatesToEarthRates(Matrix3 dcm, Vector3 gyro)
{ {
//convert the angular velocities from body frame to //'''convert the angular velocities from body frame to
//earth frame. //earth frame.
//all inputs and outputs are in degrees //all inputs and outputs are in radians/s
//returns a tuple, (rollRate,pitchRate,yawRate) //returns a earth rate vector
//'''
var p = radians(pDeg); var p = gyro.x;
var q = radians(qDeg); var q = gyro.y;
var r = radians(rDeg); var r = gyro.z;
var phi = radians(roll); double phi = 0;
var theta = radians(pitch); double theta = 0;
double psi = 0;
dcm.to_euler(ref phi, ref theta, ref psi);
var phiDot = p + tan(theta) * (q * sin(phi) + r * cos(phi)); var phiDot = p + tan(theta) * (q * sin(phi) + r * cos(phi));
var thetaDot = q * cos(phi) - r * sin(phi); var thetaDot = q * cos(phi) - r * sin(phi);
@ -253,7 +265,7 @@ namespace ArdupilotMega.HIL
theta += 1.0e-10; theta += 1.0e-10;
var psiDot = (q * sin(phi) + r * cos(phi)) / cos(theta); var psiDot = (q * sin(phi) + r * cos(phi)) / cos(theta);
return new Tuple<double, double, double>(degrees(phiDot), degrees(thetaDot), degrees(psiDot)); return new Vector3((phiDot), (thetaDot), (psiDot));
} }
} }
} }

View File

@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArdupilotMega.HIL
{
public class Vector3
{
Vector3 self;
public double x;
public double y;
public double z;
public Vector3(double x = 0, double y = 0, double z = 0)
{
self = this;
this.x = x;
this.y = y;
this.z = z;
}
public new string ToString() {
return String.Format("Vector3({0}, {1}, {2})",self.x,
self.y,
self.z);
}
public static Vector3 operator +(Vector3 self, Vector3 v) {
return new Vector3(self.x + v.x,
self.y + v.y,
self.z + v.z);
}
public static Vector3 operator -(Vector3 self, Vector3 v) {
return new Vector3(self.x - v.x,
self.y - v.y,
self.z - v.z);
}
public static Vector3 operator -(Vector3 self) {
return new Vector3(-self.x, -self.y, -self.z);
}
public static Vector3 operator *(Vector3 self, Vector3 v) {
// '''dot product'''
return new Vector3(self.x*v.x + self.y*v.y + self.z*v.z);
}
public static Vector3 operator *(Vector3 self, double v) {
return new Vector3(self.x * v,
self.y * v,
self.z * v);
}
public static Vector3 operator *(double v, Vector3 self)
{
return (self * v);
}
public static Vector3 operator /(Vector3 self, double v) {
return new Vector3(self.x / v,
self.y / v,
self.z / v);
}
public static Vector3 operator %(Vector3 self, Vector3 v) {
// '''cross product'''
return new Vector3(self.y*v.z - self.z*v.y,
self.z*v.x - self.x*v.z,
self.x*v.y - self.y*v.x);
}
public Vector3 copy() {
return new Vector3(self.x, self.y, self.z);
}
public double length() {
return Math.Sqrt(self.x*self.x + self.y*self.y + self.z*self.z);
}
public void zero() {
self.x = self.y = self.z = 0;
}
// public double angle (Vector3 self, Vector3 v) {
// '''return the angle between this vector and another vector'''
// return Math.Acos(self * v) / (self.length() * v.length());
// }
public Vector3 normalized(){
return self / self.length();
}
public void normalize() {
Vector3 v = self.normalized();
self.x = v.x;
self.y = v.y;
self.z = v.z;
}
}
}

View File

@ -8,7 +8,7 @@ namespace ArdupilotMega
#if MAVLINK10 #if MAVLINK10
partial class MAVLink partial class MAVLink
{ {
public const string MAVLINK_BUILD_DATE = "Sun Apr 8 12:29:46 2012"; public const string MAVLINK_BUILD_DATE = "Thu Jul 26 18:28:25 2012";
public const string MAVLINK_WIRE_PROTOCOL_VERSION = "1.0"; public const string MAVLINK_WIRE_PROTOCOL_VERSION = "1.0";
public const int MAVLINK_MAX_DIALECT_PAYLOAD_SIZE = 42; public const int MAVLINK_MAX_DIALECT_PAYLOAD_SIZE = 42;
@ -25,11 +25,11 @@ namespace ArdupilotMega
public const bool MAVLINK_NEED_BYTE_SWAP = (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN); public const bool MAVLINK_NEED_BYTE_SWAP = (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN);
public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 0, 0, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 18, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 3}; public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 34, 26, 46, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0};
public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 0, 0, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 19, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 42, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 247}; public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 240, 183, 130, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 42, 21, 21, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0};
public Type[] MAVLINK_MESSAGE_INFO = new Type[] {typeof( mavlink_heartbeat_t ), typeof( mavlink_sys_status_t ), typeof( mavlink_system_time_t ), null, typeof( mavlink_ping_t ), typeof( mavlink_change_operator_control_t ), typeof( mavlink_change_operator_control_ack_t ), typeof( mavlink_auth_key_t ), null, null, null, typeof( mavlink_set_mode_t ), null, null, null, null, null, null, null, null, typeof( mavlink_param_request_read_t ), typeof( mavlink_param_request_list_t ), typeof( mavlink_param_value_t ), typeof( mavlink_param_set_t ), typeof( mavlink_gps_raw_int_t ), typeof( mavlink_gps_status_t ), typeof( mavlink_scaled_imu_t ), typeof( mavlink_raw_imu_t ), typeof( mavlink_raw_pressure_t ), typeof( mavlink_scaled_pressure_t ), typeof( mavlink_attitude_t ), typeof( mavlink_attitude_quaternion_t ), typeof( mavlink_local_position_ned_t ), typeof( mavlink_global_position_int_t ), typeof( mavlink_rc_channels_scaled_t ), typeof( mavlink_rc_channels_raw_t ), typeof( mavlink_servo_output_raw_t ), typeof( mavlink_mission_request_partial_list_t ), typeof( mavlink_mission_write_partial_list_t ), typeof( mavlink_mission_item_t ), typeof( mavlink_mission_request_t ), typeof( mavlink_mission_set_current_t ), typeof( mavlink_mission_current_t ), typeof( mavlink_mission_request_list_t ), typeof( mavlink_mission_count_t ), typeof( mavlink_mission_clear_all_t ), typeof( mavlink_mission_item_reached_t ), typeof( mavlink_mission_ack_t ), typeof( mavlink_set_gps_global_origin_t ), typeof( mavlink_gps_global_origin_t ), typeof( mavlink_set_local_position_setpoint_t ), typeof( mavlink_local_position_setpoint_t ), typeof( mavlink_global_position_setpoint_int_t ), typeof( mavlink_set_global_position_setpoint_int_t ), typeof( mavlink_safety_set_allowed_area_t ), typeof( mavlink_safety_allowed_area_t ), typeof( mavlink_set_roll_pitch_yaw_thrust_t ), typeof( mavlink_set_roll_pitch_yaw_speed_thrust_t ), typeof( mavlink_roll_pitch_yaw_thrust_setpoint_t ), typeof( mavlink_roll_pitch_yaw_speed_thrust_setpoint_t ), null, null, typeof( mavlink_nav_controller_output_t ), null, typeof( mavlink_state_correction_t ), null, typeof( mavlink_request_data_stream_t ), typeof( mavlink_data_stream_t ), null, typeof( mavlink_manual_control_t ), typeof( mavlink_rc_channels_override_t ), null, null, null, typeof( mavlink_vfr_hud_t ), null, typeof( mavlink_command_long_t ), typeof( mavlink_command_ack_t ), null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_hil_state_t ), typeof( mavlink_hil_controls_t ), typeof( mavlink_hil_rc_inputs_raw_t ), null, null, null, null, null, null, null, typeof( mavlink_optical_flow_t ), typeof( mavlink_global_vision_position_estimate_t ), typeof( mavlink_vision_position_estimate_t ), typeof( mavlink_vision_speed_estimate_t ), typeof( mavlink_vicon_position_estimate_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_sensor_offsets_t ), typeof( mavlink_set_mag_offsets_t ), typeof( mavlink_meminfo_t ), typeof( mavlink_ap_adc_t ), typeof( mavlink_digicam_configure_t ), typeof( mavlink_digicam_control_t ), typeof( mavlink_mount_configure_t ), typeof( mavlink_mount_control_t ), typeof( mavlink_mount_status_t ), null, typeof( mavlink_fence_point_t ), typeof( mavlink_fence_fetch_point_t ), typeof( mavlink_fence_status_t ), typeof( mavlink_ahrs_t ), typeof( mavlink_simstate_t ), typeof( mavlink_hwstatus_t ), typeof( mavlink_radio_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_memory_vect_t ), typeof( mavlink_debug_vect_t ), typeof( mavlink_named_value_float_t ), typeof( mavlink_named_value_int_t ), typeof( mavlink_statustext_t ), typeof( mavlink_debug_t ), typeof( mavlink_extended_message_t )}; public Type[] MAVLINK_MESSAGE_INFO = new Type[] {typeof( mavlink_heartbeat_t ), typeof( mavlink_sys_status_t ), typeof( mavlink_system_time_t ), null, typeof( mavlink_ping_t ), typeof( mavlink_change_operator_control_t ), typeof( mavlink_change_operator_control_ack_t ), typeof( mavlink_auth_key_t ), null, null, null, typeof( mavlink_set_mode_t ), null, null, null, null, null, null, null, null, typeof( mavlink_param_request_read_t ), typeof( mavlink_param_request_list_t ), typeof( mavlink_param_value_t ), typeof( mavlink_param_set_t ), typeof( mavlink_gps_raw_int_t ), typeof( mavlink_gps_status_t ), typeof( mavlink_scaled_imu_t ), typeof( mavlink_raw_imu_t ), typeof( mavlink_raw_pressure_t ), typeof( mavlink_scaled_pressure_t ), typeof( mavlink_attitude_t ), typeof( mavlink_attitude_quaternion_t ), typeof( mavlink_local_position_ned_t ), typeof( mavlink_global_position_int_t ), typeof( mavlink_rc_channels_scaled_t ), typeof( mavlink_rc_channels_raw_t ), typeof( mavlink_servo_output_raw_t ), typeof( mavlink_mission_request_partial_list_t ), typeof( mavlink_mission_write_partial_list_t ), typeof( mavlink_mission_item_t ), typeof( mavlink_mission_request_t ), typeof( mavlink_mission_set_current_t ), typeof( mavlink_mission_current_t ), typeof( mavlink_mission_request_list_t ), typeof( mavlink_mission_count_t ), typeof( mavlink_mission_clear_all_t ), typeof( mavlink_mission_item_reached_t ), typeof( mavlink_mission_ack_t ), typeof( mavlink_set_gps_global_origin_t ), typeof( mavlink_gps_global_origin_t ), typeof( mavlink_set_local_position_setpoint_t ), typeof( mavlink_local_position_setpoint_t ), typeof( mavlink_global_position_setpoint_int_t ), typeof( mavlink_set_global_position_setpoint_int_t ), typeof( mavlink_safety_set_allowed_area_t ), typeof( mavlink_safety_allowed_area_t ), typeof( mavlink_set_roll_pitch_yaw_thrust_t ), typeof( mavlink_set_roll_pitch_yaw_speed_thrust_t ), typeof( mavlink_roll_pitch_yaw_thrust_setpoint_t ), typeof( mavlink_roll_pitch_yaw_speed_thrust_setpoint_t ), typeof( mavlink_set_quad_motors_setpoint_t ), typeof( mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t ), typeof( mavlink_nav_controller_output_t ), typeof( mavlink_set_quad_swarm_led_roll_pitch_yaw_thrust_t ), typeof( mavlink_state_correction_t ), null, typeof( mavlink_request_data_stream_t ), typeof( mavlink_data_stream_t ), null, typeof( mavlink_manual_control_t ), typeof( mavlink_rc_channels_override_t ), null, null, null, typeof( mavlink_vfr_hud_t ), null, typeof( mavlink_command_long_t ), typeof( mavlink_command_ack_t ), null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_local_position_ned_system_global_offset_t ), typeof( mavlink_hil_state_t ), typeof( mavlink_hil_controls_t ), typeof( mavlink_hil_rc_inputs_raw_t ), null, null, null, null, null, null, null, typeof( mavlink_optical_flow_t ), typeof( mavlink_global_vision_position_estimate_t ), typeof( mavlink_vision_position_estimate_t ), typeof( mavlink_vision_speed_estimate_t ), typeof( mavlink_vicon_position_estimate_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_sensor_offsets_t ), typeof( mavlink_set_mag_offsets_t ), typeof( mavlink_meminfo_t ), typeof( mavlink_ap_adc_t ), typeof( mavlink_digicam_configure_t ), typeof( mavlink_digicam_control_t ), typeof( mavlink_mount_configure_t ), typeof( mavlink_mount_control_t ), typeof( mavlink_mount_status_t ), null, typeof( mavlink_fence_point_t ), typeof( mavlink_fence_fetch_point_t ), typeof( mavlink_fence_status_t ), typeof( mavlink_ahrs_t ), typeof( mavlink_simstate_t ), typeof( mavlink_hwstatus_t ), typeof( mavlink_radio_t ), typeof( mavlink_limits_status_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_memory_vect_t ), typeof( mavlink_debug_vect_t ), typeof( mavlink_named_value_float_t ), typeof( mavlink_named_value_int_t ), typeof( mavlink_statustext_t ), typeof( mavlink_debug_t ), null};
public const byte MAVLINK_VERSION = 2; public const byte MAVLINK_VERSION = 2;
@ -127,8 +127,10 @@ namespace ArdupilotMega
OVERRIDE_GOTO=252, OVERRIDE_GOTO=252,
///<summary> start running a mission |first_item: the first mission item to run| last_item: the last mission item to run (after this item is run, the mission ends)| </summary> ///<summary> start running a mission |first_item: the first mission item to run| last_item: the last mission item to run (after this item is run, the mission ends)| </summary>
MISSION_START=300, MISSION_START=300,
///<summary> Arms / Disarms a component |1 to arm, 0 to disarm| </summary>
COMPONENT_ARM_DISARM=400,
///<summary> | </summary> ///<summary> | </summary>
ENUM_END=301, ENUM_END=401,
}; };
@ -160,6 +162,40 @@ namespace ArdupilotMega
}; };
/** @brief */
public enum LIMITS_STATE
{
///<summary> pre-initialization | </summary>
LIMITS_INIT=0,
///<summary> disabled | </summary>
LIMITS_DISABLED=1,
///<summary> checking limits | </summary>
LIMITS_ENABLED=2,
///<summary> a limit has been breached | </summary>
LIMITS_TRIGGERED=3,
///<summary> taking action eg. RTL | </summary>
LIMITS_RECOVERING=4,
///<summary> we're no longer in breach of a limit | </summary>
LIMITS_RECOVERED=5,
///<summary> | </summary>
ENUM_END=6,
};
/** @brief */
public enum LIMIT_MODULE
{
///<summary> pre-initialization | </summary>
LIMIT_GPSLOCK=1,
///<summary> disabled | </summary>
LIMIT_GEOFENCE=2,
///<summary> checking limits | </summary>
LIMIT_ALTITUDE=4,
///<summary> | </summary>
ENUM_END=5,
};
/** @brief Micro air vehicle / autopilot classes. This identifies the individual model. */ /** @brief Micro air vehicle / autopilot classes. This identifies the individual model. */
@ -194,6 +230,50 @@ namespace ArdupilotMega
}; };
/** @brief */
public enum MAV_TYPE
{
///<summary> Generic micro air vehicle. | </summary>
GENERIC=0,
///<summary> Fixed wing aircraft. | </summary>
FIXED_WING=1,
///<summary> Quadrotor | </summary>
QUADROTOR=2,
///<summary> Coaxial helicopter | </summary>
COAXIAL=3,
///<summary> Normal helicopter with tail rotor. | </summary>
HELICOPTER=4,
///<summary> Ground installation | </summary>
ANTENNA_TRACKER=5,
///<summary> Operator control unit / ground control station | </summary>
GCS=6,
///<summary> Airship, controlled | </summary>
AIRSHIP=7,
///<summary> Free balloon, uncontrolled | </summary>
FREE_BALLOON=8,
///<summary> Rocket | </summary>
ROCKET=9,
///<summary> Ground rover | </summary>
GROUND_ROVER=10,
///<summary> Surface vessel, boat, ship | </summary>
SURFACE_BOAT=11,
///<summary> Submarine | </summary>
SUBMARINE=12,
///<summary> Hexarotor | </summary>
HEXAROTOR=13,
///<summary> Octorotor | </summary>
OCTOROTOR=14,
///<summary> Octorotor | </summary>
TRICOPTER=15,
///<summary> Flapping wing | </summary>
FLAPPING_WING=16,
///<summary> Flapping wing | </summary>
KITE=17,
///<summary> | </summary>
ENUM_END=18,
};
/** @brief These flags encode the MAV mode. */ /** @brief These flags encode the MAV mode. */
public enum MAV_MODE_FLAG public enum MAV_MODE_FLAG
{ {
@ -312,48 +392,6 @@ namespace ArdupilotMega
}; };
/** @brief */
public enum MAV_TYPE
{
///<summary> Generic micro air vehicle. | </summary>
GENERIC=0,
///<summary> Fixed wing aircraft. | </summary>
FIXED_WING=1,
///<summary> Quadrotor | </summary>
QUADROTOR=2,
///<summary> Coaxial helicopter | </summary>
COAXIAL=3,
///<summary> Normal helicopter with tail rotor. | </summary>
HELICOPTER=4,
///<summary> Ground installation | </summary>
ANTENNA_TRACKER=5,
///<summary> Operator control unit / ground control station | </summary>
GCS=6,
///<summary> Airship, controlled | </summary>
AIRSHIP=7,
///<summary> Free balloon, uncontrolled | </summary>
FREE_BALLOON=8,
///<summary> Rocket | </summary>
ROCKET=9,
///<summary> Ground rover | </summary>
GROUND_ROVER=10,
///<summary> Surface vessel, boat, ship | </summary>
SURFACE_BOAT=11,
///<summary> Submarine | </summary>
SUBMARINE=12,
///<summary> Hexarotor | </summary>
HEXAROTOR=13,
///<summary> Octorotor | </summary>
OCTOROTOR=14,
///<summary> Octorotor | </summary>
TRICOPTER=15,
///<summary> Flapping wing | </summary>
FLAPPING_WING=16,
///<summary> | </summary>
ENUM_END=17,
};
/** @brief */ /** @brief */
public enum MAV_COMPONENT public enum MAV_COMPONENT
{ {
@ -522,28 +560,6 @@ namespace ArdupilotMega
}; };
/** @brief type of a mavlink parameter */
public enum MAV_VAR
{
///<summary> 32 bit float | </summary>
FLOAT=0,
///<summary> 8 bit unsigned integer | </summary>
UINT8=1,
///<summary> 8 bit signed integer | </summary>
INT8=2,
///<summary> 16 bit unsigned integer | </summary>
UINT16=3,
///<summary> 16 bit signed integer | </summary>
INT16=4,
///<summary> 32 bit unsigned integer | </summary>
UINT32=5,
///<summary> 32 bit signed integer | </summary>
INT32=6,
///<summary> | </summary>
ENUM_END=7,
};
/** @brief result from a mavlink command */ /** @brief result from a mavlink command */
public enum MAV_RESULT public enum MAV_RESULT
{ {
@ -600,6 +616,30 @@ namespace ArdupilotMega
}; };
/** @brief Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/. */
public enum MAV_SEVERITY
{
///<summary> System is unusable. This is a "panic" condition. | </summary>
EMERGENCY=0,
///<summary> Action should be taken immediately. Indicates error in non-critical systems. | </summary>
ALERT=1,
///<summary> Action must be taken immediately. Indicates failure in a primary system. | </summary>
CRITICAL=2,
///<summary> Indicates an error in secondary/redundant systems. | </summary>
ERROR=3,
///<summary> Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning. | </summary>
WARNING=4,
///<summary> An unusual event has occured, though not an error condition. This should be investigated for the root cause. | </summary>
NOTICE=5,
///<summary> Normal operational messages. Useful for logging. No action is required for these messages. | </summary>
INFO=6,
///<summary> Useful non-operational messages that can assist in debugging. These should not occur during normal operation. | </summary>
DEBUG=7,
///<summary> | </summary>
ENUM_END=8,
};
public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150; public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=42)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=42)]
@ -931,6 +971,32 @@ namespace ArdupilotMega
}; };
public const byte MAVLINK_MSG_ID_LIMITS_STATUS = 167;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=22)]
public struct mavlink_limits_status_t
{
/// <summary> time of last breach in milliseconds since boot </summary>
public UInt32 last_trigger;
/// <summary> time of last recovery action in milliseconds since boot </summary>
public UInt32 last_action;
/// <summary> time of last successful recovery in milliseconds since boot </summary>
public UInt32 last_recovery;
/// <summary> time of last all-clear in milliseconds since boot </summary>
public UInt32 last_clear;
/// <summary> number of fence breaches </summary>
public UInt16 breach_count;
/// <summary> state of AP_Limits, (see enum LimitState, LIMITS_STATE) </summary>
public byte limits_state;
/// <summary> AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) </summary>
public byte mods_enabled;
/// <summary> AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) </summary>
public byte mods_required;
/// <summary> AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) </summary>
public byte mods_triggered;
};
public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; public const byte MAVLINK_MSG_ID_HEARTBEAT = 0;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)]
public struct mavlink_heartbeat_t public struct mavlink_heartbeat_t
@ -1859,6 +1925,48 @@ namespace ArdupilotMega
}; };
public const byte MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT = 60;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=9)]
public struct mavlink_set_quad_motors_setpoint_t
{
/// <summary> Front motor in + configuration, front left motor in x configuration </summary>
public UInt16 motor_front_nw;
/// <summary> Right motor in + configuration, front right motor in x configuration </summary>
public UInt16 motor_right_ne;
/// <summary> Back motor in + configuration, back right motor in x configuration </summary>
public UInt16 motor_back_se;
/// <summary> Left motor in + configuration, back left motor in x configuration </summary>
public UInt16 motor_left_sw;
/// <summary> System ID of the system that should set these motor commands </summary>
public byte target_system;
};
public const byte MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST = 61;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=34)]
public struct mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t
{
/// <summary> Desired roll angle in radians +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] roll;
/// <summary> Desired pitch angle in radians +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] pitch;
/// <summary> Desired yaw angle in radians, scaled to int16 +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] yaw;
/// <summary> Collective thrust, scaled to uint16 (0..65535) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public UInt16[] thrust;
/// <summary> ID of the quadrotor group (0 - 255, up to 256 groups supported) </summary>
public byte group;
/// <summary> ID of the flight mode (0 - 255, up to 256 modes supported) </summary>
public byte mode;
};
public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62; public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)]
public struct mavlink_nav_controller_output_t public struct mavlink_nav_controller_output_t
@ -1883,6 +1991,39 @@ namespace ArdupilotMega
}; };
public const byte MAVLINK_MSG_ID_SET_QUAD_SWARM_LED_ROLL_PITCH_YAW_THRUST = 63;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=46)]
public struct mavlink_set_quad_swarm_led_roll_pitch_yaw_thrust_t
{
/// <summary> Desired roll angle in radians +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] roll;
/// <summary> Desired pitch angle in radians +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] pitch;
/// <summary> Desired yaw angle in radians, scaled to int16 +-PI (+-32767) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public Int16[] yaw;
/// <summary> Collective thrust, scaled to uint16 (0..65535) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public UInt16[] thrust;
/// <summary> ID of the quadrotor group (0 - 255, up to 256 groups supported) </summary>
public byte group;
/// <summary> ID of the flight mode (0 - 255, up to 256 modes supported) </summary>
public byte mode;
/// <summary> RGB red channel (0-255) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public byte[] led_red;
/// <summary> RGB green channel (0-255) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public byte[] led_blue;
/// <summary> RGB blue channel (0-255) </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public byte[] led_green;
};
public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64; public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)]
public struct mavlink_state_correction_t public struct mavlink_state_correction_t
@ -2057,6 +2198,28 @@ namespace ArdupilotMega
}; };
public const byte MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=28)]
public struct mavlink_local_position_ned_system_global_offset_t
{
/// <summary> Timestamp (milliseconds since system boot) </summary>
public UInt32 time_boot_ms;
/// <summary> X Position </summary>
public Single x;
/// <summary> Y Position </summary>
public Single y;
/// <summary> Z Position </summary>
public Single z;
/// <summary> Roll </summary>
public Single roll;
/// <summary> Pitch </summary>
public Single pitch;
/// <summary> Yaw </summary>
public Single yaw;
};
public const byte MAVLINK_MSG_ID_HIL_STATE = 90; public const byte MAVLINK_MSG_ID_HIL_STATE = 90;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=56)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=56)]
public struct mavlink_hil_state_t public struct mavlink_hil_state_t
@ -2164,12 +2327,16 @@ namespace ArdupilotMega
public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)]
public struct mavlink_optical_flow_t public struct mavlink_optical_flow_t
{ {
/// <summary> Timestamp (UNIX) </summary> /// <summary> Timestamp (UNIX) </summary>
public UInt64 time_usec; public UInt64 time_usec;
/// <summary> Ground distance in meters </summary> /// <summary> Flow in meters in x-sensor direction, angular-speed compensated </summary>
public Single flow_comp_m_x;
/// <summary> Flow in meters in y-sensor direction, angular-speed compensated </summary>
public Single flow_comp_m_y;
/// <summary> Ground distance in meters. Positive value: distance known. Negative value: Unknown distance </summary>
public Single ground_distance; public Single ground_distance;
/// <summary> Flow in pixels in x-sensor direction </summary> /// <summary> Flow in pixels in x-sensor direction </summary>
public Int16 flow_x; public Int16 flow_x;
@ -2355,22 +2522,8 @@ namespace ArdupilotMega
/// <summary> index of debug variable </summary> /// <summary> index of debug variable </summary>
public byte ind; public byte ind;
};
public const byte MAVLINK_MSG_ID_EXTENDED_MESSAGE = 255;
[StructLayout(LayoutKind.Sequential,Pack=1,Size=3)]
public struct mavlink_extended_message_t
{
/// <summary> System which should execute the command </summary>
public byte target_system;
/// <summary> Component which should execute the command, 0 for all components </summary>
public byte target_component;
/// <summary> Retransmission / ACK flags </summary>
public byte protocol_flags;
}; };
} }
#endif #endif
} }

View File

@ -2,14 +2,14 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension" xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension"> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension" xmlns:difx="http://schemas.microsoft.com/wix/DifxAppExtension">
<Product Id="*" Name="APM Planner" Language="1033" Version="1.1.99" Manufacturer="Michael Oborne" UpgradeCode="{625389D7-EB3C-4d77-A5F6-A285CF99437D}"> <Product Id="*" Name="APM Planner" Language="1033" Version="1.2" Manufacturer="Michael Oborne" UpgradeCode="{625389D7-EB3C-4d77-A5F6-A285CF99437D}">
<Package Description="APM Planner Installer" Comments="Apm Planner Installer" Manufacturer="Michael Oborne" InstallerVersion="200" Compressed="yes" /> <Package Description="APM Planner Installer" Comments="Apm Planner Installer" Manufacturer="Michael Oborne" InstallerVersion="200" Compressed="yes" />
<Upgrade Id="{625389D7-EB3C-4d77-A5F6-A285CF99437D}"> <Upgrade Id="{625389D7-EB3C-4d77-A5F6-A285CF99437D}">
<UpgradeVersion OnlyDetect="yes" Minimum="1.1.99" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" /> <UpgradeVersion OnlyDetect="yes" Minimum="1.2" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" />
<UpgradeVersion OnlyDetect="no" Maximum="1.1.99" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" /> <UpgradeVersion OnlyDetect="no" Maximum="1.2" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" />
</Upgrade> </Upgrade>
<InstallExecuteSequence> <InstallExecuteSequence>
@ -31,7 +31,7 @@
<Permission User="Everyone" GenericAll="yes" /> <Permission User="Everyone" GenericAll="yes" />
</CreateFolder> </CreateFolder>
</Component> </Component>
<Component Id="_comp1" Guid="cfe0ddd0-0732-4beb-8a9e-0689155a8ff7"> <Component Id="_comp1" Guid="6426307e-9832-4641-a69f-fef6e731ae94">
<File Id="_2" Source="..\bin\release\.gdbinit" /> <File Id="_2" Source="..\bin\release\.gdbinit" />
<File Id="_3" Source="..\bin\release\.gitignore" /> <File Id="_3" Source="..\bin\release\.gitignore" />
<File Id="_4" Source="..\bin\release\aerosim3.91.txt" /> <File Id="_4" Source="..\bin\release\aerosim3.91.txt" />
@ -107,11 +107,11 @@
<File Id="_74" Source="..\bin\release\ZedGraph.dll" /> <File Id="_74" Source="..\bin\release\ZedGraph.dll" />
</Component> </Component>
<Directory Id="aircraft74" Name="aircraft"> <Directory Id="aircraft74" Name="aircraft">
<Component Id="_comp75" Guid="31348cb7-5b6e-49d9-a7a9-09c767f9116e"> <Component Id="_comp75" Guid="aca211c5-59ca-42bb-b587-2ce9101e641d">
<File Id="_76" Source="..\bin\release\aircraft\placeholder.txt" /> <File Id="_76" Source="..\bin\release\aircraft\placeholder.txt" />
</Component> </Component>
<Directory Id="arducopter76" Name="arducopter"> <Directory Id="arducopter76" Name="arducopter">
<Component Id="_comp77" Guid="53ee8643-5f00-48ea-b8db-eb92e8e01255"> <Component Id="_comp77" Guid="d56d69fa-8119-46d6-85ae-8d8faee8d3ea">
<File Id="_78" Source="..\bin\release\aircraft\arducopter\arducopter-set.xml" /> <File Id="_78" Source="..\bin\release\aircraft\arducopter\arducopter-set.xml" />
<File Id="_79" Source="..\bin\release\aircraft\arducopter\arducopter.jpg" /> <File Id="_79" Source="..\bin\release\aircraft\arducopter\arducopter.jpg" />
<File Id="_80" Source="..\bin\release\aircraft\arducopter\arducopter.xml" /> <File Id="_80" Source="..\bin\release\aircraft\arducopter\arducopter.xml" />
@ -122,20 +122,20 @@
<File Id="_85" Source="..\bin\release\aircraft\arducopter\README" /> <File Id="_85" Source="..\bin\release\aircraft\arducopter\README" />
</Component> </Component>
<Directory Id="data85" Name="data"> <Directory Id="data85" Name="data">
<Component Id="_comp86" Guid="34d12f92-99d7-4698-bba4-ba3e99205d1e"> <Component Id="_comp86" Guid="f9bee73e-2642-4bd2-bcaa-85b2d2881099">
<File Id="_87" Source="..\bin\release\aircraft\arducopter\data\arducopter_half_step.txt" /> <File Id="_87" Source="..\bin\release\aircraft\arducopter\data\arducopter_half_step.txt" />
<File Id="_88" Source="..\bin\release\aircraft\arducopter\data\arducopter_step.txt" /> <File Id="_88" Source="..\bin\release\aircraft\arducopter\data\arducopter_step.txt" />
<File Id="_89" Source="..\bin\release\aircraft\arducopter\data\rw_generic_pylon.ac" /> <File Id="_89" Source="..\bin\release\aircraft\arducopter\data\rw_generic_pylon.ac" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="Engines89" Name="Engines"> <Directory Id="Engines89" Name="Engines">
<Component Id="_comp90" Guid="db243c75-5c96-4730-9c7e-4e1197d5bd3b"> <Component Id="_comp90" Guid="6a518147-28f8-45dc-9ba1-68fc0dbf09cb">
<File Id="_91" Source="..\bin\release\aircraft\arducopter\Engines\a2830-12.xml" /> <File Id="_91" Source="..\bin\release\aircraft\arducopter\Engines\a2830-12.xml" />
<File Id="_92" Source="..\bin\release\aircraft\arducopter\Engines\prop10x4.5.xml" /> <File Id="_92" Source="..\bin\release\aircraft\arducopter\Engines\prop10x4.5.xml" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="Models92" Name="Models"> <Directory Id="Models92" Name="Models">
<Component Id="_comp93" Guid="641c20ea-69a2-4964-be35-4e359192ede0"> <Component Id="_comp93" Guid="da9fc9ee-19a1-42eb-b950-800c3a887a78">
<File Id="_94" Source="..\bin\release\aircraft\arducopter\Models\arducopter.ac" /> <File Id="_94" Source="..\bin\release\aircraft\arducopter\Models\arducopter.ac" />
<File Id="_95" Source="..\bin\release\aircraft\arducopter\Models\arducopter.xml" /> <File Id="_95" Source="..\bin\release\aircraft\arducopter\Models\arducopter.xml" />
<File Id="_96" Source="..\bin\release\aircraft\arducopter\Models\plus_quad.ac" /> <File Id="_96" Source="..\bin\release\aircraft\arducopter\Models\plus_quad.ac" />
@ -149,7 +149,7 @@
</Directory> </Directory>
</Directory> </Directory>
<Directory Id="Rascal102" Name="Rascal"> <Directory Id="Rascal102" Name="Rascal">
<Component Id="_comp103" Guid="668ed46e-d67f-4d7b-8492-3b9cbd8bde52"> <Component Id="_comp103" Guid="8103cc9f-8018-4340-b094-22670c86bb39">
<File Id="_104" Source="..\bin\release\aircraft\Rascal\Rascal-keyboard.xml" /> <File Id="_104" Source="..\bin\release\aircraft\Rascal\Rascal-keyboard.xml" />
<File Id="_105" Source="..\bin\release\aircraft\Rascal\Rascal-submodels.xml" /> <File Id="_105" Source="..\bin\release\aircraft\Rascal\Rascal-submodels.xml" />
<File Id="_106" Source="..\bin\release\aircraft\Rascal\Rascal.xml" /> <File Id="_106" Source="..\bin\release\aircraft\Rascal\Rascal.xml" />
@ -161,13 +161,13 @@
<File Id="_112" Source="..\bin\release\aircraft\Rascal\thumbnail.jpg" /> <File Id="_112" Source="..\bin\release\aircraft\Rascal\thumbnail.jpg" />
</Component> </Component>
<Directory Id="Engines112" Name="Engines"> <Directory Id="Engines112" Name="Engines">
<Component Id="_comp113" Guid="10bf9f82-c138-4be0-9e6f-5408b93b6634"> <Component Id="_comp113" Guid="5b4c5058-bcbe-4c41-8777-4290a3a18545">
<File Id="_114" Source="..\bin\release\aircraft\Rascal\Engines\18x8.xml" /> <File Id="_114" Source="..\bin\release\aircraft\Rascal\Engines\18x8.xml" />
<File Id="_115" Source="..\bin\release\aircraft\Rascal\Engines\Zenoah_G-26A.xml" /> <File Id="_115" Source="..\bin\release\aircraft\Rascal\Engines\Zenoah_G-26A.xml" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="Models115" Name="Models"> <Directory Id="Models115" Name="Models">
<Component Id="_comp116" Guid="d677c1f6-7108-4095-a509-07f0c7cd27a9"> <Component Id="_comp116" Guid="0a4643af-1a69-4da5-a43d-27fdf4ec151c">
<File Id="_117" Source="..\bin\release\aircraft\Rascal\Models\Rascal.rgb" /> <File Id="_117" Source="..\bin\release\aircraft\Rascal\Models\Rascal.rgb" />
<File Id="_118" Source="..\bin\release\aircraft\Rascal\Models\Rascal110-000-013.ac" /> <File Id="_118" Source="..\bin\release\aircraft\Rascal\Models\Rascal110-000-013.ac" />
<File Id="_119" Source="..\bin\release\aircraft\Rascal\Models\Rascal110.xml" /> <File Id="_119" Source="..\bin\release\aircraft\Rascal\Models\Rascal110.xml" />
@ -178,7 +178,7 @@
</Component> </Component>
</Directory> </Directory>
<Directory Id="Systems123" Name="Systems"> <Directory Id="Systems123" Name="Systems">
<Component Id="_comp124" Guid="f73b8966-b593-44a9-b1f0-82c36e8474a5"> <Component Id="_comp124" Guid="8aec08aa-b972-47ee-b8cd-c5c04b07c6fc">
<File Id="_125" Source="..\bin\release\aircraft\Rascal\Systems\110-autopilot.xml" /> <File Id="_125" Source="..\bin\release\aircraft\Rascal\Systems\110-autopilot.xml" />
<File Id="_126" Source="..\bin\release\aircraft\Rascal\Systems\airdata.nas" /> <File Id="_126" Source="..\bin\release\aircraft\Rascal\Systems\airdata.nas" />
<File Id="_127" Source="..\bin\release\aircraft\Rascal\Systems\electrical.xml" /> <File Id="_127" Source="..\bin\release\aircraft\Rascal\Systems\electrical.xml" />
@ -189,33 +189,33 @@
</Directory> </Directory>
</Directory> </Directory>
<Directory Id="Driver129" Name="Driver"> <Directory Id="Driver129" Name="Driver">
<Component Id="_comp130" Guid="17cacd75-bc0d-4c98-8f0e-6016448f51d2"> <Component Id="_comp130" Guid="c36be0ee-37f5-4de9-a2bf-713833a6e9f1">
<File Id="_131" Source="..\bin\release\Driver\Arduino MEGA 2560.inf" /> <File Id="_131" Source="..\bin\release\Driver\Arduino MEGA 2560.inf" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="es_ES131" Name="es-ES"> <Directory Id="es_ES131" Name="es-ES">
<Component Id="_comp132" Guid="a6be862c-fe38-42e7-bce8-bbeef46055d9"> <Component Id="_comp132" Guid="732f43ab-6645-4c18-a1f1-9519ef92165a">
<File Id="_133" Source="..\bin\release\es-ES\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_133" Source="..\bin\release\es-ES\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="fr133" Name="fr"> <Directory Id="fr133" Name="fr">
<Component Id="_comp134" Guid="c8b975d0-c6be-4859-838f-1a45412f7e7b"> <Component Id="_comp134" Guid="098a3485-f089-45a6-abd3-442d9818423c">
<File Id="_135" Source="..\bin\release\fr\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_135" Source="..\bin\release\fr\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="it_IT135" Name="it-IT"> <Directory Id="it_IT135" Name="it-IT">
<Component Id="_comp136" Guid="ccd50732-a513-4593-b95e-2d960c545def"> <Component Id="_comp136" Guid="299d4a51-3c5d-44da-9aaa-a298ec1c7d28">
<File Id="_137" Source="..\bin\release\it-IT\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_137" Source="..\bin\release\it-IT\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="jsbsim137" Name="jsbsim"> <Directory Id="jsbsim137" Name="jsbsim">
<Component Id="_comp138" Guid="347a2191-8ccf-48b8-8c73-a9e2dfaa7324"> <Component Id="_comp138" Guid="65b5860e-5296-41f2-90cc-cdbc5f8c82d1">
<File Id="_139" Source="..\bin\release\jsbsim\fgout.xml" /> <File Id="_139" Source="..\bin\release\jsbsim\fgout.xml" />
<File Id="_140" Source="..\bin\release\jsbsim\rascal_test.xml" /> <File Id="_140" Source="..\bin\release\jsbsim\rascal_test.xml" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="m3u140" Name="m3u"> <Directory Id="m3u140" Name="m3u">
<Component Id="_comp141" Guid="418006de-8353-4876-98bd-1b89676e5856"> <Component Id="_comp141" Guid="2c669359-f253-406a-b60d-84312ebcdbc7">
<File Id="_142" Source="..\bin\release\m3u\both.m3u" /> <File Id="_142" Source="..\bin\release\m3u\both.m3u" />
<File Id="_143" Source="..\bin\release\m3u\GeoRefnetworklink.kml" /> <File Id="_143" Source="..\bin\release\m3u\GeoRefnetworklink.kml" />
<File Id="_144" Source="..\bin\release\m3u\hud.m3u" /> <File Id="_144" Source="..\bin\release\m3u\hud.m3u" />
@ -224,28 +224,28 @@
</Component> </Component>
</Directory> </Directory>
<Directory Id="pl146" Name="pl"> <Directory Id="pl146" Name="pl">
<Component Id="_comp147" Guid="02fa2a0c-1fb1-4481-9fb7-f16e4e2ee698"> <Component Id="_comp147" Guid="ddb9853c-14d0-4923-a298-57707bfa3e91">
<File Id="_148" Source="..\bin\release\pl\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_148" Source="..\bin\release\pl\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="Resources148" Name="Resources"> <Directory Id="Resources148" Name="Resources">
<Component Id="_comp149" Guid="8ca473a7-ef8f-4c28-a9e8-865e92f4dc49"> <Component Id="_comp149" Guid="92c1e1c0-3b2b-4511-a357-6498b3acca4d">
<File Id="_150" Source="..\bin\release\Resources\MAVCmd.txt" /> <File Id="_150" Source="..\bin\release\Resources\MAVCmd.txt" />
<File Id="_151" Source="..\bin\release\Resources\Welcome_to_Michael_Oborne.rtf" /> <File Id="_151" Source="..\bin\release\Resources\Welcome_to_Michael_Oborne.rtf" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="ru_RU151" Name="ru-RU"> <Directory Id="ru_RU151" Name="ru-RU">
<Component Id="_comp152" Guid="4de739ef-0a43-4edc-a496-63b5d6fe25c2"> <Component Id="_comp152" Guid="866f909e-fb5f-4fb2-a61e-0d0f6dbebac7">
<File Id="_153" Source="..\bin\release\ru-RU\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_153" Source="..\bin\release\ru-RU\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="zh_Hans153" Name="zh-Hans"> <Directory Id="zh_Hans153" Name="zh-Hans">
<Component Id="_comp154" Guid="1604219a-af8e-4bd3-96ba-57475defe074"> <Component Id="_comp154" Guid="c3bbe27c-d473-409e-a406-4cc492a06f8a">
<File Id="_155" Source="..\bin\release\zh-Hans\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_155" Source="..\bin\release\zh-Hans\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="zh_TW155" Name="zh-TW"> <Directory Id="zh_TW155" Name="zh-TW">
<Component Id="_comp156" Guid="96a9d78a-2294-4c08-b983-158519cea2b8"> <Component Id="_comp156" Guid="6a93efeb-6489-4ef3-b6b3-26e808adfb8d">
<File Id="_157" Source="..\bin\release\zh-TW\ArdupilotMegaPlanner10.resources.dll" /> <File Id="_157" Source="..\bin\release\zh-TW\ArdupilotMegaPlanner10.resources.dll" />
</Component> </Component>
</Directory> </Directory>

View File

@ -8,7 +8,6 @@ using System.Threading;
using log4net; using log4net;
using log4net.Config; using log4net.Config;
namespace ArdupilotMega namespace ArdupilotMega
{ {
static class Program static class Program
@ -63,7 +62,6 @@ namespace ArdupilotMega
return; return;
*/ */
try try
{ {

View File

@ -34,5 +34,5 @@ using System.Resources;
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.1.*")] [assembly: AssemblyVersion("1.1.*")]
[assembly: AssemblyFileVersion("1.2")] [assembly: AssemblyFileVersion("1.2.1")]
[assembly: NeutralResourcesLanguageAttribute("")] [assembly: NeutralResourcesLanguageAttribute("")]

View File

@ -40,11 +40,10 @@
<F4>WP Alt</F4> <F4>WP Alt</F4>
<F5>Nav Throttle</F5> <F5>Nav Throttle</F5>
<F6>Angle boost</F6> <F6>Angle boost</F6>
<F7>Manual boost</F7> <F7>Climb Rate</F7>
<F8>Climb Rate</F8> <F8>rc3 servo out</F8>
<F9>rc3 servo out</F9> <F9>alt hold int</F9>
<F10>alt hold int</F10> <F10>Thr int</F10>
<F11>Thr int</F11>
</CTUN> </CTUN>
<PM> <PM>
<F1>Gyro Saturation</F1> <F1>Gyro Saturation</F1>

View File

@ -66,13 +66,13 @@
<Z>Alt</Z> <Z>Alt</Z>
</TAKEOFF> </TAKEOFF>
<ROI> <ROI>
<P1>MAV_ROI</P1> <P1></P1>
<P2>WP#</P2> <P2></P2>
<P3>ROI#</P3> <P3></P3>
<P4></P4> <P4></P4>
<X></X> <X>Lat</X>
<Y></Y> <Y>Long</Y>
<Z></Z> <Z>Alt</Z>
</ROI> </ROI>
<PATHPLANNING> <PATHPLANNING>
<P1></P1> <P1></P1>
@ -308,9 +308,9 @@
<P2></P2> <P2></P2>
<P3></P3> <P3></P3>
<P4></P4> <P4></P4>
<X></X> <X>Lat</X>
<Y></Y> <Y>Long</Y>
<Z></Z> <Z>Alt</Z>
</ROI> </ROI>
<PATHPLANNING> <PATHPLANNING>
<P1></P1> <P1></P1>