예제 #1
0
        public Task WriteMissionItem(MavFrame frame, MavCmd cmd, bool current, bool autoContinue, float param1, float param2, float param3,
                                     float param4, float x, float y, float z, MavMissionType missionType, int attemptCount, CancellationToken cancel)
        {
            var packet = new MissionItemPacket()
            {
                ComponenId = _identity.ComponentId,
                SystemId   = _identity.SystemId,
                Sequence   = _seq.GetNextSequenceNumber(),
                Payload    =
                {
                    TargetComponent = _identity.TargetComponentId,
                    TargetSystem    = _identity.TargetSystemId,
                    Seq             =                           0,
                    Frame           = frame,
                    Command         = cmd,
                    Current         = (byte)(current ? 2:0),
                    Autocontinue    = (byte)(autoContinue? 1:0),
                    Param1          = param1,
                    Param2          = param2,
                    Param3          = param3,
                    Param4          = param4,
                    X           = x,
                    Y           = y,
                    Z           = z,
                    MissionType = missionType
                }
            };

            return(_mavlink.Send(packet, cancel));
        }
예제 #2
0
        public Task WriteMissionItem(ushort seq, MavFrame frame, MavCmd cmd, bool current, bool autoContinue, float param1, float param2, float param3,
                                     float param4, float x, float y, float z, MavMissionType missionType, int attemptCount, CancellationToken cancel)
        {
            Logger.Info($"{LogSend} Write mission item");

            // Ardupilot has custom implementation see =>  https://mavlink.io/en/services/mission.html#flight-plan-missions

            return(InternalSend <MissionItemPacket>(_ =>
            {
                _.Payload.TargetComponent = Identity.TargetComponentId;
                _.Payload.TargetSystem = Identity.TargetSystemId;
                _.Payload.Seq = seq;
                _.Payload.Frame = frame;
                _.Payload.Command = cmd;
                _.Payload.Current = (byte)(current ? 1 : 0);
                _.Payload.Autocontinue = (byte)(autoContinue ? 1 : 0);
                _.Payload.Param1 = param1;
                _.Payload.Param2 = param2;
                _.Payload.Param3 = param3;
                _.Payload.Param4 = param4;
                _.Payload.X = x;
                _.Payload.Y = y;
                _.Payload.Z = z;
                _.Payload.MissionType = missionType;
            }, cancel));
        }
        public Task MissionItem(MavFrame frame, MavCmd cmd, bool current, bool autoContinue, float param1, float param2, float param3,
                                float param4, float x, float y, float z, MavMissionType missionType, int attemptCount, CancellationToken cancel)
        {
            var packet = new MissionItemPacket()
            {
                ComponenId = _config.ComponentId,
                SystemId   = _config.SystemId,
                Payload    =
                {
                    TargetComponent = _config.TargetComponenId,
                    TargetSystem    = _config.TargetSystemId,
                    Seq             =                         0,
                    Frame           = frame,
                    Command         = cmd,
                    Current         =                         2,
                    Autocontinue    = (byte)(autoContinue? 1:0),
                    Param1          = param1,
                    Param2          = param2,
                    Param3          = param3,
                    Param4          = param4,
                    X           = x,
                    Y           = y,
                    Z           =                        20,
                    MissionType = missionType
                }
            };

            _mavlink.Send(packet, cancel);
            return(Task.CompletedTask);
        }