ETロボコン応援技術コンテンツ第一弾

ETロボコンに参加する皆さん(そうでない皆さんも含め)

今年の競技から、NXTロボットとホストとの連携による制御が可能になりました。きっとホスト側には色々なプラットフォームが使われるのかなと想像はしています。ホスト側でWindows PCを使う場合、NXTロボットとの通信は、Bluetoothの接続が仮想COMポートにマップされ、COMポート越しのシリアル通信で行うことになります。
Windows上の制御ロジックのプログラミング方法には、2つの選択肢があります。1つめはVC++によるネイティブプログラミング、2つめはC#やVBによるマネージプログラミングです。NXTロボット側の制御ロジックはほとんどの場合、C/C++で作成されることでしょう。その流れでいくと「PC側もC++と同じ種族のVC++」を選択する方々がいるかもしれません。特にWindows上のプログラミングをあまりご存じない方に多いような気がします。しかし、同じプログラミング言語を選択する事が、常に生産性が高い事には直結しません。今時のITの世界では寧ろ、プラットフォームや目的が異なればそれぞれに応じたプログラミング言語や開発環境、ライブラリを選択するのが普通です。例えば、Windows上では、ミドルウェア系はVC++ネイティブで、アプリケーションはC#やXAMLで、とか、WebアプリケーションならPHPやRubyで、といった感じです。
ETロボコンのPC側制御プログラムを考えた場合、Windowシステムを生かした使い勝手の良いGUIや、走行ログを蓄積する為のデータベースやファイルシステム、Excelとの連携などが必要になるはずです。それらは競技の本筋から見れば傍流の部分ですが、傍流の部分だからこそ、やりたい事を効率よく作りこんでいくことが必須です。VC++ネイティブは、通常のC/C++との親和性が高く、通常のC/C++でプログラミングを行える開発者には、そのまま使えますが、先ほど挙げたGUIやデータベース、ファイルシステム、Excelとのプログラミングにはあまり向いていません。これらの部分は、言語はC#で、豊富で使いやすい.NET Frameworkのライブラリを使って作成していくのが、(たとえC#やライブラリの学習コストを差し引いても)、VC++ネイティブで全てを開発するより、生産性は高いです。パフォーマンスの問題等が特になければ、PC上のプログラムは、C#/.NET Frameworkで開発していく事をおすすめします。

ということで、今回は先ず第一弾として、通信の基礎である、仮想COMポートを介したサンプルコードをCodeRecipeに掲載しました。VC++ネイティブとC#の両方のサンプルを公開しています。通信を使ってまともなプログラムを書くにはスレッドプログラミングも必須なので、そちらも合わせて紹介しています。VC++ネイティブとC#のプログラムの比較も出来るので、言語選択の前に、先ずは一度比較してみてくださいね。

[VC++ ネイティブ]
仮想COMポートアクセス: https://code.msdn.microsoft.com/COM-howto-4b79a479/
マルチスレッドプログラミング: https://code.msdn.microsoft.com/COM-howto-b6fada2c/

[C#マネージ]
仮想COMポートアクセス: https://code.msdn.microsoft.com/COM-howto-6c7ff269/

ETロボコンに参加しない皆さんも、仮想COMポートにマップされてデータの送受信を行う周辺デバイスは非常に多いので、是非、このレシピを試してみてください。

次以降は、NXTとの通信サンプル、WPFを使った効率的なGUIの作り方、SQL Server(Entity Framework)を使ったデータの蓄積・活用、Excelとの連携などなど、サンプルを(多分このブログから)公開していく予定です。こんな話も聞きたい等ご要望もあれば是非。
これから予定されている技術セミナーでも、こういう話をしていく予定なので、近場で開催される場合は是非、お越しくださいね。