我正在使用quadrotor和mavlink开展项目。我已经在我的Ubuntu PC中成功安装了mavproxy,并且在没有终端问题的情况下运行它。当我从终端运行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.
我有一个从C ++
执行mavlink.py
的代码
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 + C 所以while
循环永远不会结束。
我一直在阅读有关Popen功能的内容,但我没有找到正确的表格来执行此操作。
我知道我可以在我的程序中使用mavlink.h
库并将参数发送到quadrotor,但不希望用mavlink.h
执行此操作。
答案 0 :(得分:0)
我不确定我理解您的问题,但我认为您希望将命令发送到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);