试飞相对航点,单架飞机成功

LED修改完成,待验证
This commit is contained in:
zxd 2018-07-20 12:06:42 +08:00
parent b3ae2ed818
commit c471dc560a
7 changed files with 114 additions and 47 deletions

View File

@ -73,13 +73,13 @@ namespace Plane.FormationCreator.Formation
//同一个任务每一架飞机的FlytoTime和LoiterTime保持统一 //同一个任务每一架飞机的FlytoTime和LoiterTime保持统一
private int _FlytoTime = 123; private int _FlytoTime = 10;
public int FlytoTime public int FlytoTime
{ {
get { return _FlytoTime; } get { return _FlytoTime; }
set { Set(nameof(FlytoTime), ref _FlytoTime, value); } set { Set(nameof(FlytoTime), ref _FlytoTime, value); }
} }
private int _LoiterTime = 321; private int _LoiterTime = 10;
public int LoiterTime public int LoiterTime
{ {
get { return _LoiterTime; } get { return _LoiterTime; }

View File

@ -396,6 +396,9 @@ namespace Plane.FormationCreator.Formation
newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask( newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask(
copter, new LatLng((double)singleCopterInfoObj.latOffset, copter, new LatLng((double)singleCopterInfoObj.latOffset,
(double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt); (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt);
var jsonArray = singleCopterInfoObj.ledInfos as Newtonsoft.Json.Linq.JArray;
newSingleCopterInfo.LEDInfos = jsonArray.ToObject<ObservableCollection<LEDInfo>>();
} }
else else
@ -654,7 +657,8 @@ namespace Plane.FormationCreator.Formation
latOffset = offset.Lat, latOffset = offset.Lat,
lngOffset = offset.Lng, lngOffset = offset.Lng,
targetAlt = info.TargetAlt, targetAlt = info.TargetAlt,
showLED = info.FlytoShowLED, //showLED = info.FlytoShowLED,
ledInfos = info.LEDInfos
}; };
}) })
}; };

View File

@ -58,20 +58,7 @@ namespace Plane.FormationCreator.Formation
} }
*/ */
//设置飞机航点中灯光
private ICommand _ModiFlytoLEDCommand;
public ICommand ModiFlytoLEDCommand
{
get
{
return _ModiFlytoLEDCommand ?? (_ModiFlytoLEDCommand = new RelayCommand<double>(async =>
{
//Alert.Show("灯光控制");
Views.modiLED LEDConfig = new Views.modiLED();
LEDConfig.ShowDialog();
}));
}
}
} }
} }

View File

@ -111,6 +111,7 @@
<Compile Include="Converters\HeartbeatCountToBrushConverter.cs" /> <Compile Include="Converters\HeartbeatCountToBrushConverter.cs" />
<Compile Include="Formation\AppMode.cs" /> <Compile Include="Formation\AppMode.cs" />
<Compile Include="Formation\Copter.cs" /> <Compile Include="Formation\Copter.cs" />
<Compile Include="Formation\FlightTaskSingleCopterInfo_LED.cs" />
<Compile Include="Formation\FlightTaskSingleCopterInfo_LoiterTime.cs" /> <Compile Include="Formation\FlightTaskSingleCopterInfo_LoiterTime.cs" />
<Compile Include="Formation\FlightTaskSingleCopterInfo_ReturnToLand.cs" /> <Compile Include="Formation\FlightTaskSingleCopterInfo_ReturnToLand.cs" />
<Compile Include="Formation\FlightTaskSingleCopterInfo_SimpleCircle.cs" /> <Compile Include="Formation\FlightTaskSingleCopterInfo_SimpleCircle.cs" />
@ -173,9 +174,6 @@
<Compile Include="Views\ModifyTaskView.xaml.cs"> <Compile Include="Views\ModifyTaskView.xaml.cs">
<DependentUpon>ModifyTaskView.xaml</DependentUpon> <DependentUpon>ModifyTaskView.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Views\ModiLEDWindow.xaml.cs">
<DependentUpon>ModiLEDWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\TaskBarView.xaml.cs"> <Compile Include="Views\TaskBarView.xaml.cs">
<DependentUpon>TaskBarView.xaml</DependentUpon> <DependentUpon>TaskBarView.xaml</DependentUpon>
</Compile> </Compile>
@ -279,10 +277,6 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Views\ModiLEDWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\TaskBarView.xaml"> <Page Include="Views\TaskBarView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>

View File

@ -17,6 +17,7 @@ using System.Windows.Input;
using Plane.Communication; using Plane.Communication;
using Microsoft.Win32; using Microsoft.Win32;
using Plane.Util; using Plane.Util;
using System.Windows.Media;
namespace Plane.FormationCreator.ViewModels namespace Plane.FormationCreator.ViewModels
{ {
@ -577,17 +578,28 @@ namespace Plane.FormationCreator.ViewModels
{ {
return _MissionStartCommand ?? (_MissionStartCommand = new RelayCommand(async () => return _MissionStartCommand ?? (_MissionStartCommand = new RelayCommand(async () =>
{ {
FlightTaskManager _flightTaskManager = ServiceLocator.Current.GetInstance<FlightTaskManager>();
if (_flightTaskManager.OriginLat == 0 && _flightTaskManager.OriginLng == 0)
{
Alert.Show("作为参照的原点未设置,无法开始任务!", "提示");
return;
}
int utchour = DateTime.UtcNow.AddSeconds(5).Hour; int utchour = DateTime.UtcNow.AddSeconds(5).Hour;
int utcminute = DateTime.UtcNow.AddSeconds(5).Minute; int utcminute = DateTime.UtcNow.AddSeconds(5).Minute;
int utcsecond = DateTime.UtcNow.AddSeconds(5).Second; int utcsecond = DateTime.UtcNow.AddSeconds(5).Second;
foreach (var vcopter in _copterManager.Copters) foreach (var vcopter in _copterManager.Copters)
{ {
await vcopter.MissionStartAsync(utchour, await vcopter.MissionStartAsync(utchour,
utcminute, utcminute,
utcsecond, utcsecond,
110.23456, _flightTaskManager.OriginLng,
40.23432); _flightTaskManager.OriginLat
//110.23456,
//40.23432
);
} }
})); }));
} }
@ -635,7 +647,8 @@ namespace Plane.FormationCreator.ViewModels
{ {
///写航线开始 ///写航线开始
var missions = new IMission[taskcount]; //不要起飞任务但增加一个起飞后低空航点,见起飞任务,再增加一个降落低空航点,见降落部分 //var missions = new IMission[taskcount]; //不要起飞任务但增加一个起飞后低空航点,见起飞任务,再增加一个降落低空航点,见降落部分
var missions =new List<IMission>();
int missindex = 0; int missindex = 0;
for (int j = 0; j < _flightTaskManager.Tasks.Count; j++) for (int j = 0; j < _flightTaskManager.Tasks.Count; j++)
@ -647,12 +660,13 @@ namespace Plane.FormationCreator.ViewModels
//计算起飞需要的时间,5秒是上升加速和最后稳定时间 //计算起飞需要的时间,5秒是上升加速和最后稳定时间
int takeofftime = (int)(_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetAlt / 2.5 + 5); int takeofftime = (int)(_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetAlt / 2.5 + 5);
missions[missindex++] = Mission.CreateTakeoffMission( missions.Add(Mission.CreateTakeoffMission(
1,//1, 1,//1,
5,//takeofftime, 5,//takeofftime,
_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLat - _flightTaskManager.OriginLat, _flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLat - _flightTaskManager.OriginLat,
_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLng - _flightTaskManager.OriginLng, _flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLng - _flightTaskManager.OriginLng,
_flightTaskManager.Tasks[j+1].SingleCopterInfos[i].TargetAlt); _flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetAlt)
);
//要起飞任务 //要起飞任务
@ -660,25 +674,42 @@ namespace Plane.FormationCreator.ViewModels
case FlightTaskType.FlyTo: case FlightTaskType.FlyTo:
missions[missindex++] = Mission.CreateWaypointMission( missions.Add(Mission.CreateWaypointMission(
//5,//_flightTaskManager.Tasks[j].SingleCopterInfos[i].LoiterTime, //5,//_flightTaskManager.Tasks[j].SingleCopterInfos[i].LoiterTime,
//5,// _flightTaskManager.Tasks[j].SingleCopterInfos[i].FlytoTime, //5,// _flightTaskManager.Tasks[j].SingleCopterInfos[i].FlytoTime,
_flightTaskManager.Tasks[j].LoiterTime, _flightTaskManager.Tasks[j].LoiterTime,
_flightTaskManager.Tasks[j].FlytoTime, _flightTaskManager.Tasks[j].FlytoTime,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat - _flightTaskManager.OriginLat, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat - _flightTaskManager.OriginLat,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng - _flightTaskManager.OriginLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng - _flightTaskManager.OriginLng,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt); //_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
//_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt)
);
foreach(LEDInfo ledInfo in _flightTaskManager.Tasks[j].SingleCopterInfos[i].LEDInfos)
{
Color color = (Color)ColorConverter.ConvertFromString("#" + ledInfo.LEDRGB);
IMission LEDMission = Mission.CreateLEDControlMission(
ledInfo.Delay,
ledInfo.LEDMode,
ledInfo.LEDRate,
0, //ledInfo.LEDTimes,
color.R,
color.G,
color.B
);
missions.Add(LEDMission);
}
break; break;
case FlightTaskType.Loiter: case FlightTaskType.Loiter:
// missions[missindex++] = Mission.CreateWaypointMission(10,10,_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat, // missions[missindex++] = Mission.CreateWaypointMission(10,10,_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
// _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt); // _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt);
break; break;
case FlightTaskType.ReturnToLand: case FlightTaskType.ReturnToLand:
//降落低空航点 //降落低空航点
// missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLat, // missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLat,
// _flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLng, 3); // _flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLng, 3);
//返航 //返航
missions[missindex++] = Mission.CreateReturnToLaunchMission(); missions.Add(Mission.CreateReturnToLaunchMission());
break; break;
default: default:

View File

@ -728,6 +728,7 @@ public ICommand VerticlAlignmentCommand
WGS84, WGS84,
} }
//水平旋转 //水平旋转
private ICommand _LevelRotateCommand; private ICommand _LevelRotateCommand;
public ICommand LevelRotateCommand public ICommand LevelRotateCommand

View File

@ -214,11 +214,61 @@
<ColumnDefinition /> <ColumnDefinition />
<ColumnDefinition /> <ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="灯光控制: " /> <TextBlock Text="灯光控制: " />
<Button Content="设置" <Button Content="添加"
Grid.Column="1" Grid.Column="1"
Margin="0,5,5,0" Margin="0,5,5,0"
Command="{Binding ModiFlytoLEDCommand}" /> Command="{Binding AddLEDCommand}" />
<ItemsControl Name="LEDItems"
Grid.Row="1"
Grid.ColumnSpan="2"
Height="Auto"
MaxHeight="200"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path= LEDInfos}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" >
<TextBlock Text="类型" Margin="0,0,0,0" VerticalAlignment="Center" ></TextBlock>
<ComboBox MinWidth="80" Margin="5,0,0,0" Foreground="White" VerticalContentAlignment="Center"
SelectedIndex="{Binding Path=LEDMode}">
<ComboBoxItem Content="常亮" Foreground="White" />
<ComboBoxItem Content="闪烁" Foreground="White"/>
<ComboBoxItem Content="随机" Foreground="White"/>
</ComboBox>
<TextBlock Text="时间" Margin="12,0,0,0" VerticalAlignment="Center"></TextBlock>
<TextBox MinWidth="40" MaxWidth="50" Margin="5,0,0,0"
Text="{Binding Delay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="频率" Margin="12,0,0,0" VerticalAlignment="Center"></TextBlock>
<TextBox MinWidth="40" MaxWidth="50" Margin="5,0,0,0"
Text="{Binding Path=LEDRate, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="颜色" Margin="12,0,0,0" VerticalAlignment="Center"></TextBlock>
<TextBox Margin="5,0,0,0"
Text="{Binding LEDRGB, UpdateSourceTrigger=PropertyChanged}" />
<Button Content="删除" Margin="12,0,0,0"
Command="{Binding RemoveLEDCommand}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid> </Grid>
<Separator Grid.Row="3" /> <Separator Grid.Row="3" />
<Grid Grid.Row="4" <Grid Grid.Row="4"