2021年9月12日日曜日

Node.jsのSocket.ioによる接続とC++の呼び出し(1)

 iPhoneやAndroidによるドローンへの接続をやめた。アプリストアに媚びるよりも、webをつかって自由にドローンをコントロールできたほうが良いと考えた。また、そうすれば、4Gあるいは5Gによる接続も簡単になる。

ドローンにRaspberryPIを積んでいるので、wifiの届く範囲でスマホやパソコンとつなげることは簡単だ。ただ、ドローンのコントローラーはPixhawkを使うので、それをコントロールするためのMAVSDKはC++のプログラムで書かなければならない。MAVSDKのマニュアルにはSwiftやJavaも使えるということが書いてあったが、どう使うかがわからないし、MAVSDKはC++で書いてあるので、結局はそのwrapperに依存した限界が出てきそうだから、C++で制御プログラムを書くべきだと思った。

webのJavascriptから単に、C++のコマンドを発するのは、Ajaxなどの方法を使えばできるが、コマンドを発するたびにいちいちPixhawkに接続するのは、ドローンの細かい制御をする上で困難な方法となる。要するに、一旦接続したら、その接続が維持される必要があるのだ。

こう考えたとき、RobotのNaoのことを考える。Naoは、何年も使っているが、これを実現しているのだ。自分で、C++のライブラリを使って、それをJavascriptから呼び出すインターフェイスが提供されている。何年も使っているのに、どうやってこれを実現しているのかがわからなかった。どうも、Javascriptのファイルの中にその秘密があるとわかったのだが、そのファイルはテキストファイルだが、圧縮されているので、簡単には読み出せない。

あらためて、それを一瞥するとSocket.ioという単語が取れた。SocketというとC++などのSocket接続が思い出され、常時接続状態にできる。ということで、調べると、Socket.ioというのは、Node.jsのライブラリであることがわかった。あとは、Node.jsとC++がつながれば、目的としているものが実現できる。

そして、Node.jsとC++は、見事に接合できるのである。

結局、Node.jsによるSocket接続については、以下のサイトの記事。

https://blog.katsubemakito.net/nodejs/socketio/realtime-chat1

さらに、Node.jsからC++を呼び出すための方法については、以下のサイトの記事。

https://qiita.com/NA_simple/items/27999c8c0a605ef3314b

この2つの記事で、ほぼ実現できた。後者については3つの記事に分かれていて、それをすべて理解しなければならない。で、最後の記事にある共有ライブラリを使って接続する方法を採用した。

作成したシステムについての説明は次の記事(2)に書く。


0 件のコメント:

コメントを投稿

立ち上がらないraspberrypiのネットワーク

 raspberrypiのネットワークが立ち上がらなくなってしまっていた。差し当たって必要ないのでほっておいたが、今日、いろいろ調べてみた。 結局、raspi-confgで、network Configure をdhcpcdから、networkmanagerに変更したら立ち上がる...