1

私はクワッドローターとマブリンクを使ったプロジェクトに取り組んでいます。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.pyC++から実行するコードがあります

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++ プログラムを実行すると、ターミナルから実行した場合と同じものがターミナルに表示されますが、C++ コードmavproxy.pyなどでコマンドを送信する方法がわかりません。help

プログラムを読むと、このステートメントにより、プログラムと端末でwhile生成されたパラメーターをキャプチャできますが、端末出口で何かを書き込むか+を押すまで終了しないため、ループは終了しません。mavproxy.pycoutmavlink.pyCTRLCwhile

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 に答える