Как написать программу для выполнения двух разных циклов | Задача?

Я хочу написать программу для радиоуправляемой навигации

Самолет должен пройти к 2 путевым точкам waypoint_1 & путевая точка_2 Когда он достигнет waypoint_1 (с промахом =< 5), перейдите к waypoint_2

Но у меня проблема.

Взгляните сначала на это:

void loop(){

    if (distance-to-waypoint_1 > 5 meters) {
        Navigate to waypoint_1
    if distace-to-waypoint_1 < 5 meters :
        Navigate-to-waypoint_2

Если я использую такой код, самолет направится к waypoint_1, и когда он достигнет места, которое находится на расстоянии менее 5 метров от waypoint_1, он направится к waypoint_2, но если самолет улетит, и расстояние между его местоположением и waypoint_1 проходит более 5 м, самолет возвращается к предыдущей навигации и снова направляется к waypoint_1, игнорируя навигацию к waypoint_2

Итак, мне нужна форма программы, чтобы сначала выполнить цикл для навигации, чтобы провести самолет к waypoint_1, а когда он достигнет waypoint_1, сделать еще один цикл, чтобы провести самолет к waypoint_2

Спасибо

, 👍-1

Обсуждение

Когда расстояние между положением самолета и путевой точкой_1 будет равно или меньше 5 метров, будет осуществляться навигация к путевой точке_2, но проблема в том, что когда самолет удаляется от путевой точки_1, чтобы перейти к путевой точке_2, его расстояние от путевой точки_1 будет более 5 метров, и первое условие if будет установлено снова, и он снова перейдет к waypoint_1., @Hamid 'Smith' Salehi

Из-за проблемы с условием if, если условие не будет работать для этой цели и будет установлено снова из-за расстояния, @Hamid 'Smith' Salehi

Хорошо, скажем, я хочу использовать расстояние в качестве критерия, чтобы узнать, где я нахожусь, а где нет, каким-то образом я измеряю расстояние между моей позицией и домом Боба, и если оно будет больше 5 метров, я знаю, что я не добрался до дома Боба, поэтому я воспользуюсь направлением, чтобы добраться до дома Боба. Когда расстояние (единственный критерий, который я использую) между моей позицией и домом Боба будет равно или меньше 5 метров, я знаю, что тогда я достиг дома Боба, я буду использовать другое направление, чтобы добраться до дома Мэри, но когда я уйду от Дом Боба, чтобы пойти в дом Мэри, расстояние между, @Hamid 'Smith' Salehi

Моя позиция и дом Боба будут больше 5 метров (поскольку единственным критерием, который я использую, является расстояние между моей позицией и домами), поэтому я буду использовать новое направление, чтобы снова вернуться к дому Боба., @Hamid 'Smith' Salehi

Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/140415/discussion-between-curious-guy-and-jsotola)., @Hamid 'Smith' Salehi


1 ответ


Лучший ответ:

2

Я думаю, вам следует использовать другую логику, используя переменную для хранения текущей целевой путевой точки и разделяя код для достижения путевой точки и ее изменения.

Что-то вроде этого (в псевдокоде):

declare variable target_waypoint and set it to waypoint1
loop
    Fly towards target waypoint
    if distance to target waypoint lower than 5
        change target_waypoint to waypoint 2

Вы можете легко расширить это для большего количества путевых точек, используя массив путевых точек и переменную, содержащую индекс следующей путевой точки:

declare waypoints as array
declare index variable, initialize with zero
set target_waypoint to waypoints[index]
loop
    Fly towards target waypoint
    if distance to target waypoint lower than 5
        increment index
        if index greater than max index
            Either set to zero to loop through all waypoints again
            or do whatever you want to do after the waypoints
        set target_waypoint to waypoints[index]

Код, который перемещает вас к путевой точке, не заботится о том, какая путевая точка будет следующей. Это только делает эту одну работу. И когда вы достигли путевой точки, вы просто перемещаете цель этого кода в другую позицию.

Так же, как если бы вы сами ходили между разными путевыми точками. Установите первую путевую точку в качестве цели, идите к ней, пока не достигнете ее, установите следующую путевую точку в качестве цели и повторите ходьбу.

,