Я пытаюсь сделать так, чтобы робот следовал за стеной, но есть ошибки в именах, которые не были объявлены в моей области. Мне нужна помощь - PullRequest
0 голосов
/ 30 марта 2010
#include <iostream>
#include <libplayerc++/playerc++.h>

using namespace std;
int main(int argc, char *argv[])

{
using namespace PlayerCc;  
PlayerClient    robot("localhost");  
BumperProxy      bp(&robot,0);  
Position2dProxy pp(&robot,0);
pp.SetMotorEnable(true);


for(;;)
    double turnrate, speed;
double error;
bool wall;

motor_a_speed(0);
motor_c_speed(0);

while(1) {

    front_bumper = SENSOR_2;
    left_bumper = SENSOR_3;

    if (front_bumper > 2) {

        if (left_bumper < 3) {

            motor_a_speed(5);

            motor_c_speed(drive_speed);
            motor_a_dir(fwd);
            motor_c_dir(fwd);

        }

        else {

            motor_a_speed(drive_speed);

            motor_c_speed(5);
            motor_a_dir(rev);
            motor_c_dir(rev);

        }

    }

    else {

        motor_a_speed(drive_speed);

        motor_c_speed(drive_speed);
        motor_a_dir(brake);
        motor_c_dir(brake);
        mrest(100);

        cputs("bump");

        motor_a_dir(fwd);
        motor_c_dir(rev);
        msleep(450);


        cputs("right");

        motor_a_speed(10);
        motor_a_dir(fwd);
        motor_c_dir(fwd);
        mrest(1300);

    }

    pp.SetSpeed(speed, turnrate);
}

Ответы [ 2 ]

5 голосов
/ 30 марта 2010

Учитывая плохой отступ, единственное, что бросается в глаза, это

for(;;;)
double turnrate, speed;

Поскольку за for не стоит блок в фигурных скобках, его тело является следующим оператором. Это не та конструкция, которую я часто видел, но я считаю, что в результате получается, что оператор for содержит определения turnrate и speed, которые являются локальными для оператора for.

1 голос
/ 30 марта 2010

Я переформатировал исходный код в более читаемую версию. Может ли кто-нибудь с разрешением на редактирование заменить источник ОП этим?

При использовании идентификатора цикл for без скобок явно виден как причина проблем. Короткий тест (я не знал, как это будет работать) показал, что цикл for (;;) будет зацикливаться вечно, поэтому программа OP никогда не будет делать ничего полезного. Вероятно, следует удалить

#include <iostream>
#include <libplayerc++/playerc++.h>

using namespace std;
int main(int argc, char *argv[])

{
    using namespace PlayerCc;  
    PlayerClient    robot("localhost");  
    BumperProxy      bp(&robot,0);  
    Position2dProxy pp(&robot,0);
    pp.SetMotorEnable(true);


    for(;;)
        double turnrate, speed;
    double error;
    bool wall;

    motor_a_speed(0);
    motor_c_speed(0);

    while(1) {

        front_bumper = SENSOR_2;
        left_bumper = SENSOR_3;

        if (front_bumper > 2) {

            if (left_bumper < 3) {

                motor_a_speed(5);

                motor_c_speed(drive_speed);
                motor_a_dir(fwd);
                motor_c_dir(fwd);

            }

            else {

                motor_a_speed(drive_speed);

                motor_c_speed(5);
                motor_a_dir(rev);
                motor_c_dir(rev);

            }

        }

        else {

            motor_a_speed(drive_speed);

            motor_c_speed(drive_speed);
            motor_a_dir(brake);
            motor_c_dir(brake);
            mrest(100);

            cputs("bump");

            motor_a_dir(fwd);
            motor_c_dir(rev);
            msleep(450);


            cputs("right");

            motor_a_speed(10);
            motor_a_dir(fwd);
            motor_c_dir(fwd);
            mrest(1300);

        }

        pp.SetSpeed(speed, turnrate);
    }
}
...