2014-04-25 221 views
1

我正在使用quadrotor和mavlink的项目中工作。我已经成功地在我的Ubuntu PC中安装了mavproxy,并且在终端没有问题的情况下运行它。当我从终端运行mavproxy.py并连接了一个支持mavlink(APM自动驾驶仪)的四旋翼飞行器时,mavproxy检测到四旋翼飞行器,一切正常。从popen执行命令shell并设置其他命令shell

当您执行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++

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; 
} 

mavlink.py当运行该C++程序的终端示出了将出现,如果我同样的事情从终端运行mavproxy.py,但我不知道如何在C++代码中发送诸如help之类的命令。

如果你读的程序时,while声明让我捕捉到从程序mavproxy.py,并在终端cout产生的参数,但mavlink.py永远不会结束,直到你写的东西在终端退出或按CTRL + Ç因此while循环永不结束。

我一直在阅读有关Popen函数,但我没有找到正确的形式来做到这一点。

我知道我可以在我的程序中使用mavlink.h库并将参数发送到四旋翼飞行器,但不想用mavlink.h做到这一点。

+0

如果你想读写都要搜索popen2。它不是标准库的一部分,但有实现。 –

+0

我想用C++做pepen2的事情;我可以看到它也用于python,你有没有在phyton中的例子?你从主要的py程序中调用另一个phyton脚本的例子?谢谢 – user3574324

+0

@ user3574324你是否设法解决这个问题?我面临同样的问题..请尽快回复!谢谢.. –

回答

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); 
+0

谢谢你的回答。我一直在阅读关于这个函数,popen,而我所能发现的是,这个函数用于读写文件,所以,如果我使用你写的代码,我认为它会在mavlink的源代码中写入。 PY。我的目的是,从C++代码运行mavlink.py,当它运行时,我希望能够发送命令,如“帮助”。你的代码有可能吗?有了这段代码,我可以在mavlink.py运行时发送命令帮助。还有另一种选择,它将python更改为C++,但我没有python的经验 – user3574324