我正在一个使用四旋翼机和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
时显示的内容相同,但我不知道如何在C++代码中发送help
之类的命令。
如果您阅读该程序,while
语句允许我在终端中捕获程序mavproxy.py
和cout
生成的参数,但mavlink.py
永远不会结束,直到您在终端出口中写入内容或按CTRL+C,因此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);