Я работаю в проекте с квадротором и mavlink. Я успешно установил mavproxy на свой ПК с Ubuntu и без проблем запустил его с терминала. Когда я бегу mavproxy.py
из терминала и подключенного квадротора с поддержкой mavlink (APM автопилот) mavproxy обнаруживает квадротор и все ок.
Когда вы выполняете mavproxy.py
Программа в терминале начинает отправлять и получать несколько параметров. Вы можете написать в терминале некоторый параметр для доступа к любой конфигурации. Например, команда help
в терминале:
$ mavlink.py
.
.data beging
.
STABILIZE> "when the program finish the configuration, allowed to you for doing an input any parameter, for example help"
STABILIZE>help
show all helps.
У меня есть код для выполнения mavlink.py
из C ++
include <iostream>
include <stdio.h>
using namespace std;
int main() {
FILE *in;
char buff[512];
if(!(in = popen("mavlink.py", "r"))){
return 1;
}
while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);
return 0;
}
Когда я запускаю эту программу на C ++, терминал показывает те же вещи, что и при запуске mavproxy.py
из терминала, но я не знаю, как я могу отправить команду, такую как help
в коде C ++.
Если вы читаете программу, то while
Оператор позволяет мне захватывать параметры, сгенерированные из программы mavproxy.py
а также cout
в терминале, но mavlink.py
никогда не заканчивается, пока вы не напишите что-нибудь в терминале выхода или нажмите CTRL + С Итак while
цикл никогда не заканчивается
Я читал о функции Popen, но я не нашел правильную форму для этого.
Я знаю, что могу использовать mavlink.h
библиотеку в моей программе и отправлять параметры в квадротор, но не хочу делать это с mavlink.h
,
Я не уверен, что понимаю ваш вопрос, но я думаю, что вы хотите отправить команды mavlink.py
а также прочитать его вывод.
Если это так, вы должны изменить режим открытия popen()
от «r
«до»w
«так что вы можете написать, тогда вы можете отправлять ему команды следующим образом:
FILE *fp;
char *command="HELP";
if(!(fp = popen("mavlink.py", "w"))){
return 1;
fwrite(command, sizeof(char), strlen(command), fp);