ETロボコン計測システムクラウド化トライ

ETロボコン2011チャンピオンシップ大会では、スタンドアロンシステムが稼動している横で、実は、クラウド化したシステムの実験をやっていました。ETロボコン計測システムの概要は、一つ前のポストhttp://blogs.msdn.com/b/hirosho/archive/2011/11/17/etroboconracetrackingsystempart1.aspx を見てもらうこととして、この実験では、隣でスタンドアロンシステムに対して行っている操作とまるっと同じ操作をして、ちゃんと動くか、応答性能は問題ないか、一大会あたり幾ら位かかるか、について検証を行いました。 実験システムは、図のように構成しました。 IISで動いているWCFサービスをWindows Azureにそのままポーティング DBをSQL Azure上に作成(スキーマはEFから生成したSQL文を使用) WCFサービスのDB参照先の接続文を一行SQL Azure用に修正 PC側のETRoboConTrackingSystem、ETRoboConResultEditorExcelのHTTP/SOAPの参照URLを修正 以上、これだけで、結果としてはちゃんと動きました。私は方々でデバイスとクラウド連携というお題で講演していますが、私の講演をお聞きいただいた皆さんの中には、「同じコードで直ぐ動きます、Azureでクラウドをはじめることは簡単です」と言っていたのを記憶に留めている方も多いと思います。言っているとおりに動いています(嘘つきにならなくてよかったです)。 移植作業は、梶原さんという技術者が協力してくれました。Twitterで協力者募集したところ、申し出てくれた方です。私は酷いので、「Codeplex上にアップしているプロジェクト群のうち、ETRoboConTrackingServerプロジェクトをAzureに挙げればよいですよ。お願いします」の二言で丸投げ。でも、動きましたね。梶原さんありがとう。 まぁ、大会当日の朝、さぁ動かそうとして、何故かDBの定義が一箇所だけ古く、最初動かなかったのですが、程なく解決。その後は、正式本番システムの横で、同じオペレーションを行って問題なく動きました。携帯電話のディザリングでPCをネットにつないだ場合は、転送速度の問題で応答性能悪すぎで、タイムアウト連発。ワイヤードでLANにつなげば特に問題はありません。むしろVista PCのスタンドアロンより、Win7+Azureのほうが体感的に早い気がしました。 実稼動に向けては、セキュリティやアクセス権、ローカルで持てばよい情報もあるのでDBのスキーマ変更とそれに伴うロジック変更が必要ですが、まぁなんとかるでしょう。クラウド側もクライアント側も、C#、.NET Frameworkと同じスキルを活用できるのも魅力ポイント。 気を良くした太田は、あ、そういえば、WCFサービスをWindows Phone 7アプリで接続するのも簡単だっけと思い出し、準備の傍ら、WP7アプリもちょこっと作って、WCFサービスによるHTTP/SOAPにアクセスして、大会情報の取り出しと順位結果表示のサンプルアプリも作っていた次第。こちらも後でブログにポストの予定です。

0

ETロボコン向け計測システム紹介

ETロボコン2011のチャンピオンシップも昨日無事終わり、競技に参加された皆さんが開発されたロボットの走行性能にただ驚くばかりでした。参加された皆さん、お疲れ様!! ETロボコン競技中に図のような絵が、スクリーンに表示されて、競技の状況表示や、走行時間の計測を行っているのを、会場に来た方でしたら見ていることと思います。 このシステムは、このブログの筆者である太田がシステム全般、表示部分は、クラスメソッドの杉浦さん、チーム紹介のアニメーションは東海大学の学生さん(昨年作成)、タイム計測用のスイッチボックスはシステムクリエイトの高橋さんが担当して、開発し、各大会で使っていただいているシステムです。2011年の大会では、北海道、東北、北関東、東京AB、北陸、東海、関西、中四国、九州、沖縄、チャンピオンシップの全12大会、全てで使ってもらうことが出来ました。 折角なので、このシステムの中身を本ブログで紹介します。このシステムは、ETロボコン競技会に関わる様々な作業を自動化しています。機能は以下の通りです。 大会参加チーム情報登録 大会の走行順登録 二つのラウンド、ターン進行の管理 スタートからの経過時間、ゴール時のタイム、走行状況、難所クリア状況の表示 大会ルールに則ったリザルトタイムの計算 走行結果、走行時間、難所クリア状況の蓄積 走行順位計算 モデル審査結果登録 総合順位結果計算 モデル評価・走行結果傾向分析 中間順位表示(昨年版:酒田エス・エー・エスさん協力) 記録間違いを修正する為の裏仕掛け オリンピックのタイム計測と同様、万が一計測アプリが、何らかの原因でハングし、計測データがぶっ飛んでしまったら大変なので、競技結果はRDBに蓄積、競技状況表示と平行して、裏で色々と操作をする為に、コアのサービスはIIS上で動作するWebサービス、表示ソフトその他は、WebサービスをHTTP/SOAPでアクセスするという祖結合にし、それ+幾つかの工夫で拡張性・保守性を挙げています。また多彩でカッコいい表示を短期間で開発する為に、WPFでUIを作っています。使っている技術を列記します。 WPF(Windows Presentation Foundation) WCF(Windows Communication Foundation) SQL Server 2008 R2 EF(Entity Framework) IIS(Internet Information Server) MEF(Managed Extension Framework) Office ToolkitによるExcel拡張 .NET Frameworkを使ってC#によるプログラミング 動作推奨環境は Windows 7 Excel 2010 Visual Studio 2010 上位エディション(無償のExpress Editionでも可) システム構成は図のようになっています。 スイッチボックスハードウェアは、USBでPCに接続され、仮想COMポートでアプリと通信しています。ETロボコンの時間計測精度は0.1秒で、PCでは実時間保障が出来ないので、スイッチボックス内のカウンターで時間を計測し、PC側でその値を元に各種処理を行っています。 計測システム一式、使い方は、http://etrcrts.codeplex.com/ で公開しています。また、このサイトは、オープンソース開発用サイトで、このサイトを使って並行開発、障害管理、構成管理などのプロジェクト管理を行っている状況です。システム開発のボランティア募集中なので、やりたい方、ご連絡ください。IISで動いているWebサービスとRDBの部分のクラウド化なども進めているので、単にWin7アプリの開発だけでなく、Windows Phoneをはじめとするスマートフォン向けのビューワー、計測方法、競技状況記録方法改善などもあるので、是非。 より細かい部分の解説は以降のポストで。チャンピオンシップで行ったクラウド化(Azure)実験もね。

0

Codeplex(TFS)を使ってみよう

Team Foundation Serverがバックで動いているオープンソース開発用サイト Codeplexをご存知?URLは、http://www.codeplex.com 便利なので、Windowsなどのサンプルプログラムなどもこれを使って開発・公開しています。ETロボコンの計測システムもこのサイト(http://etrcrts.codeplex.com)で開発してます。このサイト、自分でプロジェクトを作って、開発者を集い、システムのタスク管理やディスカッション、構成管理、リリースまでができます。条件はプロジェクトのライセンスがオープンソースライセンスであること。Visual Studioなら、メニューの”チーム”から自分のチームプロジェクトに接続して、チームエクスプローラーやソースコード管理エクスプローラなどのUIを使って開発環境との親和性よく活用できます。Subversionのクライアントからもつなげられるらしい。 このブログでは、Codeplexのサイトの使い方を説明します。先ずは、http://www.codeplex.comを開いて、表示されたページの右上の”Register”リンクをクリックします。Live IDを取得しておけば、Live IDとCodeplex上のユーザーを紐付けられるのでこちらがお勧め。手順に従って、開発者登録を済ませましょう。一度登録してしまえば、次に開いた時には、ブラウザ上でLive IDにサインインしておき、ページのSign inリンクをクリックして、”Sign in using Live Id”ボタンをクリックしてサインインすればOK そして、図の”Create Project”をクリックすれば、 新たに作るプロジェクト情報を入力するページが表示されるので、Title、URL、Source Control(もちろんTFSを選択しクライアントはTeam Explorerを選択)、Summaryを入力します。Summaryは日本語でもOK。入力したら”Next”をクリックします。次に、CodeplexのUse Agreementをきちんと読んでAcceptをチェック、人が手作業しているかを確認する画面が出るので、難読文字を解読して入力します。これで、新しいプロジェクトの出来上がり。作っただけだと3週間たつとExpireしてしまうので、どこかの時点で作ったプロジェクトを公開する必要があることをお忘れなく。そして、一番下のボタンをクリックすると出来たプロジェクトのホームページに移動します。※公開するまでは、ページの上のほうに、”Publish…”と”Delete…”ボタンが表示されているので、公開できるようになったら”Publish…”をクリックして公開しましょう。 このページのHomeを編集し、Licenseタブをクリックして、Choose Licenseリンクをクリックし、適切なライセンスを選択します。リストにはApacheやBSD、GNU、Ms-PLなどがあらかじめ用意されています。独自のライセンスを定義することも可能です。他のタブは、ざっと以下の機能を持っています。 Downloadsリリース用のパッケージができたらここからダウンロードできるようになる。 Documentation開発するソフトウェアに関する各種ドキュメントを公開する Discussionスレッドを立て、開発に関するディスカッションを行う Issue Trackerの開発するソフトウェアのフィーチャーや、作業項目、障害管理などを行う。 Source Codeソースコードの構成管理。ソースを修正しCheckinすると、チェンジセットが出来上がる。ブランチなどもできるらしい People開発者の管理。Coordinater(開発を主導する人たち)、Developer(開発者)、Editors(文書などを書く?)、Recent Follower(変更があれば通知を受けるだけの人たち)という区分けあり。Codeplexに開発者登録した人を、プロジェクトに加える機能が用意されている これらの機能をうまく活用して開発するわけですな。 で、Visual Studioにつなぐ方法はといえば、Visual Studio 2010を起動し、メニューのチームを選択し、Team Foundation Serverへの接続を選択します。 すると次のダイアログが表示されるので、 追加ボタンをクリックします。 このダイアログには、CodeplexのプロジェクトホームページのSource Codeタブの、右側に用意されているSource Controlの下のTeam Explorerをクリックして表示される値を入力します。 Server Name:をTeam Foundatoin Serverの名前またはURLに、Pathをパスに、プロトコルはHTTPSを選択すれば、自動的にポートが443に変更されます。そしてOKをクリックすると、 ログイン用の画面が表示されるので、Codeplex側のUsernameをユーザーのほうにコピーし、パスワードは、Codeplexに開発者登録した際に設定したパスワードを入力します。 すると、以下のダイアログが表示されます。 右側のチェックリストに作成したプロジェクトのURLで入力した名前が出てくるので、チェックを入れて接続をクリックします。 これで、Visual Studioに以下のチームエクスプローラーが表示されます。 ソース管理をダブルクリックするとソース管理エクスプローラーが表示され、ソースコードのチェックインやチェックアウト、最新コードの取得が可能です。…

0

C#で実メモリデータイメージを扱う

周辺デバイスなどと通信するプログラムでは、送受信するバイナリデータイメージを扱う機会に良く出くわします。この手の処理が多い場合はVC++のNativeでのプログラミングが便利です。しかし、C#のプログラミング生産性を考えると、単にバイナリデータイメージを扱う必要があるからといってVC++ Nativeで全てコーディングするという選択肢は短絡的です。ここでは、C#コードの中で、バイナリデータ構造を直接アクセスするコードサンプルを紹介します。 C#のプログラムの中で図のようなデータストリームを扱うものとします。 小さな四角が1バイト、小さな四角2つが2バイト、4つが4バイトのデータであるとします。送信するデータストリームの構造が図の場合、先ず、このデータ構造を扱う為のstructを定義します。 using System.Runtime.InteropServices; [StructLayout( LayoutKind.Sequential, Pack=1)]public struct BinaryDataStructure{    public uint command;    public byte flag0;    public byte flag1;    public byte flag2;    public byte flag3;    public ushort sup0;    public ushort sup1;    public uint data;} 図と見比べればこれが同じデータ構造であると分かるでしょう。 次に、このデータ構造をデータ列に変換するコードを紹介します。適当なクラスに以下のメソッドを記述します。 public unsafe void SendBinaryData(BinaryDataStructure data){    byte[] sendBuf = new byte[sizeof(BinaryDataStructure)];    fixed( byte* basePtr = &sendBuf[0] )    {        BinaryDataStructure* bds =…

0

非同期データ受信のパターン

一つ前のポストで、仮想COMポートのデータ送受信をSerialPortクラスで扱うライブラリを紹介しました。 DXCommPortManagerの処理の流れを簡単に説明しておきます。Start()メソッドをコールすると、受信処理用のスレッド(スレッドA)が動きます。 スレッドAは、以下の流れでNXTから送られてくるデータを受信しています。 予め、SerialPortオブジェクトのDataReceivedイベントにコールバックメソッドを登録しておく ManualResetEventオブジェクトを一つ用意(コードではasyncReceiveEventという名前のオブジェクト)を用意しておく ManualResetEventオブジェクトをResetし、WaitOne()で待ち COMポートにデータを受信し、DataReceivedコールバックがコールされたら、ManualResetEventオブジェクトをSet WaitOne()のブロックが外れるので、SerialPortオブジェクトのRead()を使って受信データを取得し、ReceivedDataリストにデータを登録 3.に戻る SerialPortクラスのRead()メソッドをコールすると、受信データが来るまでブロックされるので、そこで待ってもよいのですが、この方法だと受信するデータの長さが可変の場合、予め受信用に用意しておくバッファの大きさをいくつにすればよいかがわかりません。上に挙げた方法であれば、Read()メソッドコールの際、データ長の長さは分かっているので、そこでバッファを適切なサイズ確保できます。他にも、NXTからのデータ送信単位を切り分ける事も可能です。 コールバックを登録して処理のトリガーをかけ、イベントで待っておいて、コールバック内でそのイベントをセットして、処理を行うパターンは、Windows Phone 7のSocketのサンプルでConnectするときに使われているので、覚えておくと便利です。 スレッドAが蓄積した受信データは、GetReceiveData()メソッドで取り込むことができます。このメソッドをコールするスレッドはスレッドAとは別物なので、ReceivedDataリストにlockをかけて排他しています。 スレッドAはずっとNXTからのデータを受信してReceivedDataに蓄積していくわけですが、この流れに以下の処理を追加することにより、応答付きの同期送受信を付け加える事ができます。 同期送受信である事を示すフラグ(isCurrentSyncing)を用意 同期送受信用のManualResetEvent(syncReceiveEvent)を用意しておく SendSyncData()メソッドがコールされたらフラグをtrueに設定し、SerialPortクラスのWrite()メソッドを使ってデータ送信 syncReceiveEventをReset&WaitOneでブロック SerialPortオブジェクトのDataRecievedコールバック内で、isCurrentSyncingフラグがtrueならsyncReceiveEventをSet syncReceiveEventのWaitOneブロックが外れるので、SendSyncData()メソッドの引数で渡されたresolverを使って、受信したデータの同期性チェック 受信データが応答データならばSendSyncData()メソッドの引数として返し、そうでなければ、ReceivedDataリストに登録 こんな流れになっています。これで非同期・同期の処理を混在させつつ、非同期・同期の区別をつけいます。

0

仮想COMポート通信用ライブラリ

ETロボコンな皆さん。6月5日の盛岡でのセミナー、7月31日の大阪のセミナーで紹介したCOMポート通信用ライブラリをCodePlexで公開しました。ETロボコンの今年の競技規約(PC+Lego Mindstorms NXT)だけでなく、USBやRS232Cなどなど一般の仮想COMポートを使用してWindowsプラットフォームとペリフェラルデバイスで通信が必要なアプリケーションの開発で利用できます。 http://comportcl.codeplex.com/ ダウンロードは、上のURLを開いて下図の様に”Source Code”タブをクリックし、表示されたページの右側の”Download”ボタンをクリックすればZIP形式でダウンロードが可能です。 とり合えず使いたい方、Visual Studio 2010で、WpfAppLegoNXTCommSampleソリューションを開き、WpfAppLegoNXTCommSample プロジェクトを実行します。 NXTをBluetoothでPCと接続し、接続したCOMポートを下図の①のコンボボックスで選択します。次に②をクリックしてNXT接続用のボーレート、パリティなどの設定を行います。③をクリックすれば、COMポートでの接続が開始されます。 後は、NXT上でsample_c4を動かし、④の”DRIVE”をクリックすれば、NXTがスタート(するはず)です。 独自のアプリケーションを開発する場合(C#でござる)、ETRC.CommのDXCommPortManager.csで書かれたDXCommPortManagerクラスを使います。具体的な使い方は、上の図の④の”DRIVE”ボタンをクリックして動作を追っていってもらえればと思いますが、一応簡単に紹介しておきます。 IDataExchangeManager manager=new DXCommPortManager();manager.CurrentPort.BaudRateやParityなどを設定manager.CurrentPort.Open();manager.Start();manager.Send(buf,0,buf.Length); こんな感じ。受信は byte[] received = manager.GetReceivedData(); で。受信データが無い時はnullが返ってきます。 こちら、オープンソースとして公開しているので、開発者として参加したい方は、どんどん御協力ください。ただし、機能追加の際には、なるべく使い勝手がよくて、かつ、新しいトレンドの技術を取り入れて育てていきたいので、先ずは、 ここで希望の機能を先ずは入力してくださいね。 Contributer希望、Welcome!!

0

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ポートアクセス: http://code.msdn.microsoft.com/COM-howto-4b79a479/マルチスレッドプログラミング: http://code.msdn.microsoft.com/COM-howto-b6fada2c/ [C#マネージ]仮想COMポートアクセス: http://code.msdn.microsoft.com/COM-howto-6c7ff269/ ETロボコンに参加しない皆さんも、仮想COMポートにマップされてデータの送受信を行う周辺デバイスは非常に多いので、是非、このレシピを試してみてください。 次以降は、NXTとの通信サンプル、WPFを使った効率的なGUIの作り方、SQL Server(Entity Framework)を使ったデータの蓄積・活用、Excelとの連携などなど、サンプルを(多分このブログから)公開していく予定です。こんな話も聞きたい等ご要望もあれば是非。これから予定されている技術セミナーでも、こういう話をしていく予定なので、近場で開催される場合は是非、お越しくださいね。

0

ETロボコン2010関連情報 – お疲れ様でございます

夏から秋にかけて…組込みエンジニアにとってこの季節はETロボコンの季節です。 今年は、北海道、北陸、沖縄の3地区大会増と、ますます、盛り上がっていますね。私も、南九州地区大会を皮切りに、南関東大会、北陸大会、関西大会、東海大会と、計測システムのフォローでお邪魔しています。懇親会では学生さん向けにDreamSparkを使うための認証コードを配っていますが、学生の皆さんが嬉しそうにもらってくれる姿は、非常に嬉しいですね。是非実際にダウンロードして活用してください。東海大会では、デジタルセンセーション(株)さんによるSilverlight+IIS Ream-time Streamingによる、実況ストリーミングにも出会い、うれしい限りです。 さて、ずいぶん前にETロボコン参加者向けに書いたブログ投稿、大分時間がたって散発的な感じなので、以下のリストにまとめておきますね。チャンピオンシップに参加されるチームの皆さん、来年リベンジするぞという皆さん是非、見てくださいね。 Visual Studio 2010で、NXTのコードを開発する方法 役立ちそうなVisual Studio 2010の新機能 記述したUMLモデルからいろんなものを生成する方法 ETロボコンのSoftware Factoryを作ってみよう DSL Toolkitで自分独自のモデル言語を作ろう(たとえば走行戦略エディターとか) 最後の二つはVS2005で説明していますが、VS2010でも同様なことは可能です。ここで説明している内容は、私もモデル審査員を務めているMDDロボットチャレンジでも活用できるので、そちらのコンテスト参加者も参考にしてみてくださいませ。 他に、ETロボコン向けに計測システムを提供しているわけですが、こちらは、元々ボランティアを集めて大勢で開発していきたいと思っているので、やってみようかな、とか、コードだけでも見てみたいという方は、embedded-george@live.jp までメールをください。ちなみに今は、酒田sAsさん、東海大の学生さんが参加を表明してくれています。使っているテクノロジーは、 WPF: Windows Presentation Foundation WCF: Windows Communication Foundadation Entity Framework MEF: Managed Extension Framework Office InteropによるExcel拡張 Silverlight その他 です。基盤として Windows 7 SQL Server 2008 Excel 2010 を使ってます。 12月のチャンピオンシップに向けて、見栄えの改造や機能の追加をやっていく予定なので、参加してくれるとありがたし。計測システムについては、別途、投稿の予定です(昔もそんなことを書いたような気がするが・・・)計測システム…Azureやリアルタイムストリームと連携して、競技状況とか配信したいんだよね…

0

ETロボコンの開発環境としてVisual Studio 2010を使おう!!

ETロボコンに参加を予定されている皆さん。コーディング&ビルド&ロード環境としてVisual Studio 2010を使ってみませんか?単なるテキストエディターよりずっと使い勝手が良いですよ。 ここで紹介する方法は、Visual Studio 2008やExpress Editionでも使えます。 Visual Studioは、外部ツールをあらかじめ登録しておいて、登録した外部ツールをメニューから起動することができます。また、ソースコード一式をVisual Studioの開発作業単位であるプロジェクトとして作っておけば、便利なC++コードエディタやその他もろもろの便利機能を活用することができます。 ではさっそく使い方を以下に説明しますね。 まず、準備として以下を実行します。 1.メニューの”ツール”→”外部ツール”を選択し、”外部ツールダイアログ”を開く 2.”追加”ボタンをクリック([新しいツール1]と表示される)し、”タイトル”、”コマンド”に下図のように入力し、”出力ウィンドウを使用”にチェックを入れる。そして、”OK”をクリックする。  次に、ソースコードをエディット&ビルド&ロードするためのプロジェクトを作成します。 1.メニューの”ファイル”→“新規作成”→”プロジェクト”を選択 2.Visual Studio C++の”全般”を選択し、表示された”メイクファイルプロジェクト”を選択、”名前”を入力し、”ソリューションのディレクトリを作成”のチェックを外し、”OK”をクリック。表示されたダイアログの”完了”をクリック。  プロジェクト一式が出来上がる。その状態で・・・ 3.メニューの”プロジェクト”→”プロパティ”を選択。  4.左ペインの、”構成”→”VC++ディレクトリ”を選択  5.”インクルードディレクトリ”の欄に、以下を記入。 C:\cygwin\GNUARM\arm-elf\include; C:\cygwin\GNUARM\include; C:\cygwin\nxtOSEK\ecrobot\c; C:\cygwin\nxtOSEK\ecrobot\nxtcommfantom; C:\cygwin\nxtOSEK\ecrobot\nxtway_gs_balancer; C:\cygwin\nxtOSEK\ecrobot\bios; C:\cygwin\nxtOSEK\toppers_osek\include; C:\cygwin\nxtOSEK\toppers_osek\kernel; C:\cygwin\nxtOSEK\lejos_nxj\src\nxtvm\platform\nxt; C:\cygwin\nxtOSEK\toppers_osek\config\at91sam7s-gnu; C:\cygwin\nxtOSEK\toppers_osek\config\at91sam7s-gnu\lego_nxt ※cygwin、nxtOSEKをデフォルトでインストールした場合。 6.mk.cmdの作成 ”ソリューションエクスプローラー”の”ETRoboConNXTプロジェクト”を右クリックし、”追加”→”新しい項目”を選択します。そして、ダイアログの左ペインで、”Visual C++”を選択し、リストから”テキスト”を選択し、”名前”にmk.cmdと記入して”追加”ボタンをクリックします。 mk.cmdをエディタで開き、以下の内容をインプットします。 echo off set path=C:\cygwin\usr\local\bin;C:\cygwin\usr\bin;C:\cygwin\bin del /Q *.rxe make all IF EXIST *.rxe sh rxeflash.sh 7.コンパイル対象ファイル群(ソースコード、ファイル、makefile等)をプロジェクトに追加 ※既存ソースコードの追加は、”ソリューションエクスプローラー”の”ETRoboConNXTプロジェクト”を右クリックし、”追加”→”既存の項目”を選択、表示されたダイアログで、追加したいヘッダーファイル(.h)、ソースファイル(.cpp)を選択。…

0

.NET Framework 4.0のCode Contractsを組込み開発で活用する

今、ある講演向けに、再度、Visual Studio 2010、.NET Framework 4.0の新機能をじっくり見てます。昔私はオブジェクト指向とかモデル駆動型開発とか、CMMとかで組込みソフトウェア開発プロセス改善をやっていたこともあり、ソフトウェアの品質や生産性が上がりそうなトピックスを見ると、直ぐに体が反応してしまいます。 次のポストは、UMLから組込み機器向けのC/C++コードを生成する方法を紹介しようと思っていたのですが、Code Contractに惹きつけられてしまったので、そちらを紹介します。 昔々、Bertrand Meyerさんが、“Design By Contract”(以下DBCと略します)という概念を提唱しました。(所謂、「契約による設計」ってやつですな) DBCを簡単に紹介すると、コードを利用する側に対して、このコードを利用する場合、 事前条件(Pre Condition):こういう条件が整っている時に、このコードは正しく動きますよ。 事後条件(Post Condition):このコードが正しく動いたら、こういう条件になりますよ。 不変条件(Invariant):このコードが動いてもこの条件は変化しないよ。 という表明であり、逆にコードを実装する側にとっては、この3種類の条件を満たすよう実装しなければならない、というプラクティスです。こうすることによって、コードの仕様が明確になる、実装側と利用側のコミュニケーションが良くなる、バグが減って品質が上がり、生産性が上がる、というメリットを得ることができます。よく見かける(見かけないか普通?)、C++やJavaのassertを使って、実装のデバッグの利便性を高めているのは、道具は使っているけれど、DBCではないのでご注意。 そしてDBCを.NET上で積極的に活用できるように、.NET Framework 4.0に、Code Contractsという機能が追加されました。 ちょっと紹介すると、 using System;using System.Diagnostics.Contracts; class CFoo {    ….    [ContractInvariantMethod]    // Invariantを使う場合に必要    public int MethodFoo(int x)    {        Contract.Requires(x!=0&&this.Something>0); // 事前条件。引数は非ゼロ、Somethingプロパティは正        Contract.Ensures(Contract.Result<int>()!=0);// 事後条件。戻り値は、非ゼロ        Contract.Invariant(this.Something!=0);      // Somethingプロパティは非ゼロ        ….    } こんな感じになります。詳細は、http://msdn.microsoft.com/ja-jp/library/dd264808.aspxをご覧いただくとして、Code Contractsを記述すると、以下の3つのケースで、品質を上げるのに寄与することになります。 動的テスト時 静的テスト時 ドキュメンテーション これ、TDDのPracticeを廻すのに凄く便利だと思うのですが、残念ながら、Managedコードでしか使えないんですね。 で、これでこのポストを終わらせてしまうと、タイトルに対して嘘をついたことになってしまうので、これから組込みの濃い世界に踏み込んでいきます。私が思うに、Desktop向けやWeb向けのソフトウェアは、開発環境や実行環境がリッチなので、障害解析は比較的楽なのに対して、組込み機器向けソフトウェアは実行環境が何よりプアなので、DBCの様な仕組みがあれば非常に助かると思うんですよね。 さて、組込み機器開発の場合、Windows目線で分類すると、以下のケースが考えられます。 Windows Embedded…

1