2014-04-25 275 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