/// <summary>
        /// Set percentage power of motor and direction. At the end set <code>AngleDrive</code> if rotation success.
        /// </summary>
        /// <param name="angle">in degree. 0 = 3 hour. 90 = 6 hour and so on.</param>
        /// <param name="power">percentage from 0 to 100.</param>
        /// <seealso cref="Robot.AngleDrive"/>
        /// <returns></returns>
        public DriveAnswerCommand Drive(double angle, double power)
        {
            DriveAnswerCommand answer = new DriveAnswerCommand();

            addRobotTask(DriveAsync(answer, angle, power));
            return(answer);
        }
        /// <summary>
        /// Set percentage power of motor and direction. It send this action to server asynchronously. At the end set <code>AngleDrive</code> if rotation success and fill answer data to <code>destination</code>.
        /// </summary>
        /// <param name="destination">Where to fill answer data.</param>
        /// <param name="angle">in degree. 0 = 3 hour. 90 = 6 hour and so on. 12 hour in up.</param>
        /// <param name="power">percentage from 0 to 100.</param>
        /// <seealso cref="Robot.AngleDrive"/>
        /// <returns></returns>
        private async Task DriveAsync(DriveAnswerCommand destination, double angle, double power)
        {
            await sendCommandAsync(new DriveCommand(power, angle));

            var answerCommand = await receiveCommandAsync <DriveAnswerCommand>();

            if (answerCommand.SUCCESS)
            {
                AngleDrive = AngleUtils.NormalizeDegree(angle);
            }
            destination.FillData(answerCommand);
        }