加入全部解锁及写入航点功能

This commit is contained in:
panxu 2018-04-30 23:41:03 +08:00
parent f31f08e530
commit 031ba6a647
3 changed files with 74 additions and 58 deletions

View File

@ -61,6 +61,33 @@ namespace Plane.FormationCreator.ViewModels
}
private ICommand _UnlockAllCommand;
public ICommand UnlockAllCommand
{
get
{
return _UnlockAllCommand ?? (_UnlockAllCommand = new RelayCommand(async () =>
{
// await Task.WhenAll(_copterManager.AcceptingControlCopters.Select(copter => copter.UnlockAsync()));
await Task.WhenAll(_copterManager.Copters.Select(async c => {
await c.UnlockAsync();
//解锁间隔一定要超过1s否则导致飞控以后无法解锁
for (int i = 0; !c.IsUnlocked; i++)
{
if (i > 200)
break;
if (i % (1000 / 25) == 1000 / 25 - 1)
{
await c.UnlockAsync(); // 每 1000 毫秒重试一次。解锁间隔一定要超过1s否则导致飞控以后无法解锁
}
await Task.Delay(25).ConfigureAwait(false);
}
}));
}));
}
}
private ICommand _UnlockCommand;
public ICommand UnlockCommand
{
@ -529,62 +556,42 @@ namespace Plane.FormationCreator.ViewModels
for (int j = 0; j < _flightTaskManager.Tasks.Count; j++)
{
if (_flightTaskManager.Tasks[j].TaskType == FlightTaskType.FlyTo)
switch (_flightTaskManager.Tasks[j].TaskType)
{
missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt);
case FlightTaskType.TakeOff:
missions[missindex++] = Mission.CreateTakeoffMission(10,10,_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLng, 3);
//要起飞任务
break;
case FlightTaskType.FlyTo:
missions[missindex++] = Mission.CreateWaypointMission(10,10,_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, 3);
break;
case FlightTaskType.Loiter:
// missions[missindex++] = Mission.CreateWaypointMission(10,10,_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
// _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt);
break;
case FlightTaskType.ReturnToLand:
//降落低空航点
// missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLat,
// _flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLng, 3);
//返航
missions[missindex++] = Mission.CreateReturnToLaunchMission();
break;
default:
break;
}
if (_flightTaskManager.Tasks[j].TaskType == FlightTaskType.TakeOff)
{
//起飞低空航点
missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j + 1].SingleCopterInfos[i].TargetLng, 10);
//不要起飞任务,在写入时会自动加入
//自动起飞10米后需要飞到第一个航点下方
}
if (_flightTaskManager.Tasks[j].TaskType == FlightTaskType.Loiter)
{
missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetLng, _flightTaskManager.Tasks[j].SingleCopterInfos[i].TargetAlt);
}
if (_flightTaskManager.Tasks[j].TaskType == FlightTaskType.ReturnToLand)
{
//降落低空航点
missions[missindex++] = Mission.CreateWaypointMission(_flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLat,
_flightTaskManager.Tasks[j - 1].SingleCopterInfos[i].TargetLng, 10);
//返航
missions[missindex++] = Mission.CreateReturnToLaunchMission();
}
}
var result = await _copterManager.Copters[i].WriteMissionListAsync(missions);
//MessageBox.Show($"The result of WriteMissions: {result}");
}
// var firstCopter = _copterManager.Copters.First();
// Test TurnAsync.

View File

@ -40,10 +40,8 @@
Command="{Binding HoverCommand}" />
<Button Content="手动"
Command="{Binding FloatCommand}" />
<Button Content="航点"
Command="{Binding WriteMissionCommand}" />
<Button Content="开始"
Command="{Binding MissionStartCommand}" />
<Button Content="参数"
Command="{Binding ParamModify}" />
</WrapPanel>
<WrapPanel>
@ -58,13 +56,23 @@
<Button Content="测试"
Command="{Binding TestCommand}" />
<Button Content="参数"
Command="{Binding ParamModify}" />
<TextBox Width="50"
Visibility="Hidden"
Text="{Binding AltP, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>
<WrapPanel>
<Button Content="写入航点"
Command="{Binding WriteMissionCommand}" />
<Button Content="全部解锁"
Command="{Binding UnlockAllCommand}" />
<Button Content="开始任务"
Command="{Binding MissionStartCommand}" />
</WrapPanel>
<WrapPanel>
<TextBox
Grid.Column="1"
@ -81,6 +89,7 @@
Text="{Binding Path=RTKState}"
/>
</WrapPanel>
<!--// 林俊清, 20150920, 目前不再使用 FormationController删除相关按钮。

View File

@ -17,7 +17,7 @@
</Style>
</StackPanel.Resources>
<TextBlock Text="任务操作" FontWeight="Bold" />
<StackPanel>
@ -152,7 +152,7 @@
</StackPanel>
<Separator />
<TextBlock Text="任务属性" Margin="0, 0, 5, 0" FontWeight="Bold" />
<StackPanel>
<TextBlock Text="起飞数量:" Margin="5,10,5,0" />
@ -193,7 +193,7 @@
Value="2" />
</Style>
</TabControl.Resources>
<TabItem Header="飞往">
<TabItem Header="航点">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="TabItem" />
@ -268,7 +268,7 @@
</Grid>
</Grid>
</TabItem>
<TabItem Header="转向">
<TabItem Header="转向" Visibility="Collapsed">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="TabItem" />
@ -304,7 +304,7 @@
</Grid>
</Grid>
</TabItem>
<TabItem Header="画圈">
<TabItem Header="画圈" Visibility="Collapsed">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="TabItem" />