1

我正在一个带有四旋翼和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.

我有一个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从终端运行时会出现的相同,但我不知道如何发送helpC++ 代码中的命令。

如果您阅读程序,该while语句允许我捕获从程序mavproxy.pycout终端中生成的参数,但mavlink.py永远不会结束,直到您在终端退出或按CTRL+写一些东西,C所以while循环永远不会结束。

我一直在阅读有关 Popen 功能的信息,但我还没有找到正确的形式来执行此操作。

我知道我可以mavlink.h在我的程序中使用该库并将参数发送到四旋翼,但不想使用mavlink.h.

4

1 回答 1

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);
于 2014-04-25T21:25:19.327 回答