r-gis 入門 - fit.ac.jpkimuro/r-gis/r-gistextbook/r-gistextbookver2.pdf · r-gis 入門. r-gis...

98
R-GIS 入門 R-GIS RT コンポーネントで学ぶ R-GIS(ロボット GIS) Ver. 2.0 2010 12 7 日版 R-GIS コンソーシアム監修

Upload: others

Post on 10-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

R-GIS 入門

R-GIS RT コンポーネントで学ぶ R-GIS(ロボット GIS)

Ver. 2.0

2010 年 12 月 7 日版

R-GIS コンソーシアム監修

Page 2: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

目次 はじめに 第 1 章 R-GIS とは 1.1 GIS の基本 1.2 移動ロボットと GIS~ロボット向け GIS と従来の GIS の違い 1.3 データ構造と機能 1.4 標準について 第 2 章 準備 2.1 インストール 2.2 サンプル環境(地図) 2.3 サンプルロボット 2.4 フリーの GIS 環境 第 3 章 R-GIS サーバ 3.1 RgisOperator RTC 3.2 R-GIS ミニ RTC 第 4 章 R-GIS クライアント 4.1 LEGO NXT 移動機能とセンサ機能 4.2 GIS と接続する移動ロボットシステム 第 5 章 R-GIS 用の地図編集 5.1 GIS ソフト 5.2 GIS データの作り方 5.3 R-GIS データの作り方 第 6 章 次回予告 6.1 応用編 6.1.1 NEDO 知能化プロジェクトの他コンソの利用例 6.1.2 つくばチャレンジ 2009 を実例として 6.1.3 SLAM 研究と R-GIS

Page 3: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

はじめに このテキストは,R-GIS RT コンポーネント(RTC)を用いた R-GIS の入門書です.対象

は,ロボット用の GIS および RTC に興味のある,ロボット工学初心者を想定しています.

ただし,ロボットではなく GIS に主な興味を持たれている方も読み進めることができるよ

うに,ロボット工学自体には,大きく踏み込みません.サンプルのデータやソフト,また,

本テキスト内で紹介しているロボット玩具を試用することで,ロボット工学者に対しては,

ロボットへの GIS 機能の導入の端緒になるように書かれています.一方,GIS ユーザに対

しては,ロボットの内部に深く立ち入らずに,ロボット技術を GIS に利用することができ

るように書かれています. このテキストでは,RT コンポーネントの詳細やロボット(特に移動ロボット)のプロ

グラムについては,深く説明しません.本テキストを読み進める上で,RTC のプログラミ

ングがしたい,移動ロボットの RTC を設計し,実装したいといった興味が湧かれた読者

は,産総研や NEDO 知能化プロジェクト参画メンバが公開している各種情報にアクセス

して頂ければ,本テキストで紹介しているサンプルプログラムやハードウェアを,簡単に

取り換えることができます. 最後に,このような R-GIS テキスト作成の機会と予算を与えてくれました,NEDO 知

能化プロジェクト佐藤知正 PL 他関係者に感謝を述べさせていただくと共に,R-GIS RTCが再利用されることを期待しております.

R-GIS 教科書作成チーム一同

Page 4: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 1 章 R-GIS とは 状況が変化しやすい人間の生活空間において,ロボットがロバストに動作するためには,

ロボットの環境・状況認識能力や自律的な判断能力の向上が必要です.このロボットの能

力を環境の側から補完しようというのが「環境情報構造化」です[1]. 構造化環境が提供する情報としては,いわゆる「地図」だけでなく,カメラなどのセン

サによって獲得されたデータ,人やロボット,障害物の特徴,経路情報などが挙げられま

す.これらは,その情報が取得された地図上の位置との組で記録されることが多いでしょ

う.このような,地理空間における対象事物に対し,その位置や範囲と属性情報が対にな

っている情報を「地理空間情報」と呼びます[2].ロボットが人と共存するための「環境情

報構造化」には,このような地理空間情報を生成,管理する機能が必要となると考えてい

ます. 私たちのグループは,情報構造化環境プラットフォーム「ロボットタウン」の中でロボ

ットに地図情報を提供するしくみについて研究を行ってきました[3].これを発展させ,こ

れまで人間向けの意思決定支援ツールであった GIS(Geographic Information System) の地理空間情報技術とロボットの分野で用いられてきた環境情報技術とを融合し,ロボッ

トが理解可能な形で地理空間情報を提供するロボット GIS(R-GIS)を提案しているとこ

ろです[4].これにより,ロボットはシームレスな実空間で活動し,人間および複数のロボ

ット間で環境・空間情報を共有することができるようになると考えています(図 1).

図 1 Concept of Robotic and Geographic Information System (R-GIS)

このような背景ですが,先ずは,GIS の基本や動向を簡単に紹介していくことにしまし

ょう. 1.1 GIS の基本

Page 5: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

GIS (Geographic Information System 地理情報システム)は,コンピュータ上で,いわ

ゆる地図の情報(地物)やこれに付随するさまざまな属性情報をデータベースとして保持

し,これら地理空間情報の利用,管理,検索、分析、表示などの機能をもったシステムの

総称です.現場の測量・調査結果や人工衛星からのデータを,空間や時間の面から分析・

編集することで,科学的な調査,土地や施設,道路といったインフラ情報の管理などに利

用されています.数百年の昔から紙図面での地物の管理は行われてきましたが,近年のコ

ンピュータの発展に伴い,膨大なデータの取り扱いが簡単になり,リアルタイムでのデー

タ編集やシミュレーション,可視化といった,より高度な処理が可能になってきました.

これ以上の GIS の詳しい説明や利用例は,他書に譲るとして,ここでは,R-GIS を使う上

での最小限の用語や知識について,整理しておきたいと思います. 【データ形式】 GIS で使われるデータは,たくさんあります.建物や道路などの形状を示した図形情報

や航空写真や衛星写真といった画像情報,建物の所有者や住所など地物に関する属性情報,

地図の表示や投影変換で必要となる測地系や投影法に関する情報,縮尺や精度といったメ

タ情報もあります.これらの情報は,その形式もさまざまですが,最近は,XML 形式で

記述されるものも多く,標準仕様に準拠することで相互変換も容易になっています. 【図形情報】 GIS で取り扱うデータはその目的に応じて様々な形式を使用します。それらを大きな区

分で分類するとラスタデータとベクタデータに分けることができます. 【ラスタデータ】 空間を一定間隔の格子状に分割し,その各セルに値を与えるものです.このラスタデー

タを、ロボット分野でほぼ同義としてグリッドマップと呼ぶことが多いようです.地形を

あらわすラスタデータでセル値に標高値持つものを,数値地形モデル(DEM)と呼びます.

また,航空写真や衛星写真といった画像データもラスタデータとして扱われます.画像処

理分野では,TIFF という画像フォーマットがありますが,GIS 分野では,GeoTiff という

空間参照情報をヘッダー部に含んだ TIFF 画像がよく利用されています.なお,航空写真

も衛星写真も光学装置によるひずみや地形の起伏によるひずみを含むため,背景地図とし

て利用するためにはこのひずみを補正する必要があります.このひずみを補正した画像は,

オルソ画像と呼ばれています. 【ベクタデータ】 ベクタデータとは,いくつかの点座標から構成される「ポイント」,「ライン」,「ポリゴ

ン」などで表現されたデータをいいます.ポイントはx、y、(z)座標の対からなる図

形で、ラインとは、複数の点をつないで形成する折れ線をあらわす図形、ポリゴンとは、

Page 6: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

折れ線の始点と終点が同一点になった面をあらわす図形になります。ポリゴンの内部に、

穴となるポリゴンを定義することによって、ドーナツ状のポリゴンを記述することも可能

です。基本的に GIS では、取り扱いたい地物をこれらポイント、ライン、ポリゴンのいず

れかでデータ化していくことになります。 その他、①ライン同士を結節点で接合することで道路や管路をあらわすネットワークデ

ータ、②ポイント・ライン・ポリゴンの空間的な位相関係をデータベース化したトポロジ

ーデータ、③地形の起伏を三角形の面の集合で表した TIN データなど、少し特殊なデータ

形式も存在します。データ利用の目的に応じて使わけが必要になります。 データを作成する際には、地図や図面のトレース,測量や設計等による CAD データの

変換、レーザスキャナ等のセンサデータの加工によって生成することができます. 【測地系】 測地系とは,基準となる地球上の3次元点位置および地球の形状(球面近似や平面近

似)を定めたものです.測地系が異なる場合は、同じ経緯度座標値であっても地球上の違

う場所を指し示すことになります。そこで 2004 年、日本では,日本測地系から世界測地

系へと、国際基準の座標系へと移行する法改正を行ったため、GPS 等で出力される座標値

をそのまま地図の座標として利用することができるようになりました。世界測地系の詳細

は、世界測地系等のキーワードで検索されたい。 【GIS の主な機能】 GIS の主な機能としては,地図の表示や図形の作成・編集,属性の作成・編集,検索や

空間解析などがあります.注意したいことは,GIS の機能の多くは,最終的に,人間が視

覚的に見て判断する意思決定ツールとなることを目的として開発されている点です.ロボ

ットを含む機械が,人間と違う方法で地図を利用するためには、それに合わせた仕組みが

必要になることがあります。 【GIS の動向,ロボット研究の動向】 現在のロボット業界は製造業向けの産業用ロボットが主力となっていますが,今後は,

生活・医療・公共分野で活動するサービスロボットや RT (Robot Technology)システムが

普及し,2025 年には 7.2 兆円規模の市場に成長すると期待されています[6].一方,GIS分野においては,一般向けモバイル地図サービスの普及とともに,従来の静的な地理情報

だけでなく,ユーザが必要とする場所・状況に応じて位置や関連情報を提供する GIS サー

ビスが社会に浸透するよう施策の検討・整備が進められてきています[2]. 地理空間情報の標準化団体 OGC(Open Geospatial Consortium) [7]では,SWE(Sensor Web Enablement)として Web を介してあらゆる種類のセンサ情報を位置情報

と共に交換するためのサービス及びデータ記述の標準化が進められています.また,環境

に配置されたセンサネットワークを利用し,警告の自動発令やリアルタイムな観測情報に

Page 7: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

基づいた意思決定を行える仕組みの実現を目指しています.一方,RT 分野では日本の研

究者が中心となって,ソフトウェア標準化団体 OMG(Object Management Group)にお

いて,特定のセンサやアルゴリズムに依存しないロボット位置情報サービス標準 RLS(Robotic Localization Service)の策定が進められています[8].RLS は ISO の地理情報

標準をベースとしており,ロボットや観測対象の位置は,座標参照系(CRS: Coordinate Reference System)に関連づけられる空間座標・姿勢・時間・識別子・誤差情報で構成さ

れるデータ構造で表現されます. このように GIS の発展動向と RT 分野で求められている方向性は重なる部分が多く,相

互活用によってサービスの幅も広げられる可能性があります.RT 分野と GIS を連携する

ための枠組みや仕組みの開発が急務であると考えられるでしょう. 1.2 移動ロボットと GIS~ロボット向け GIS と従来の GIS の違い ロボット用 GIS ( R-GIS)で取り扱う空間情報は,従来の GIS で取り扱ってきた地理空間

情報と性質を異にする点が多くあります(表 1).また,自律移動ロボットは人間と違い,

デジタルデータの計算処理によって自己位置,障害物や経路の認識・判断を行いますので,

確度を上げるために高精度で詳細な空間情報や位置測位が必要となります.しかし,縮尺

1/100 より詳細な空間情報は,一般に入手や整備が困難なことが多くあります.この他,

本質的に地理空間情報は現実空間を抽象化したものですから,少なからず実世界と地理空

間情報には差異が存在してしまいます.この差異を補間する技術,すなわち不確実な地理

空間情報の処理,ロボットの空間的認識・判断・学習が両分野における課題となっている

わけです.

表 1 GIS とロボットの空間情報の差異 課題 従来の GIS の地図 移動ロボットの地図

対象地物 静的環境 静的環境+動的環境 地図 広域(シームレスな地図管理) 局所域(主にロボット周辺)

データ更新頻度 比較的長期間隔 (年単位,月単位)

リアルタイムの環境変化に応じた

更新 時間の取扱い 年月日または時刻単位,過去

のある時点・期間 ミリ秒単位(センサデータ取得頻

度) 処理速度要求 遅い(数秒~数分) リアルタイムの処理 位置精度 縮尺レベルに応じた精度 数[cm]単位の精度

データの確度の

扱い方 決定的 確率的

利用者 人間 ロボット(制御アルゴリズム)

Page 8: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

座標系 地理座標系 主にロボット作業座標系(GPS 等の

地理座標系も併用)

取り扱う地理空間情報の性質に留意しながら,ロボットの移動経路計画など空間把握に

必要とする空間情報をロボット間で共有する基盤が,R-GIS というわけです.複数のロボ

ットが,システムを利用する一つの方法は,サーバクライアントモデルですが,以下は,

R-GIS サーバとクライアントが実現する機能とその振り分け例を示しています. [R-GIS Server] 空間情報提供: ロボットが必要とする空間情報を各ロボットに応じて抽出し提供する機能 空間情報更新: ロボット搭載のセンサや環境中のセンサによって獲得された情報を集約し,

空間情報をリアルタイムに更新する機能 空間情報融合: 様々なセンサで計測した空間情報を融合し,新しい種類の空間情報を生成

する機能 空間情報処理: 取得した空間情報をロボットの動作計画に利用できる情報や座標系などへ

加工する機能.空間検索や属性検索といった各種検索機能 [R-GIS Client] 空間情報受信: ロボットの移動能力やセンシング能力に応じた空間情報を R-GIS サーバか

ら受信する機能 空間情報送信: ロボットの自己位置やセンサによって獲得した情報を R-GIS に送信する機

能 空間情報保持: ロボットの移動に応じて,必要な空間情報を保持する機能 各機能が,サーバとクライアントのどちらで実現されるかは,ロボットの性能やアプリ

ケーションに依存します.また,各機能モジュール間やロボット間で送受されるマップは,

ベースマップ,環境(センサ)マップ,フィールドマップ,ロボットマップ(人間向けに

はグラフィカルマップ)に分類することができます.(図 2).

Page 9: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 2 R-GIS で扱う地図の種類

また,皆さんご存知のように,ロボットの動作制御では,いくつかの座標系を設定する

必要があります(図 3).移動ロボットの場合は,ロボットの作業空間を定めるワールド座

標系と,ロボットを中心としたロボット座標系です.この他,作業移動型ロボットの場合

は,ツール座標系や対象物毎の座標系もあります.一方,これらのローカルな座標系に対

し,グローバルな座標系としては,測地学の分野において公共座標系として GPS 等で一

般化的している WGS84 測地系に準拠した経緯度座標系や,日本国が定める平面直角座標

系(19 座標系)などの地理座標系があります.図 3 は,これらの間の関係を示したもので

す.なお,図中の CS (Coordinate System) は,座標系(座標軸と距離単位からなる数学的

に定義された座標),CRS は,座標参照系(CS と地球の表面の座標と結びつけるためのも

の)を意味しています.これらの接尾語は,R-GIS を間違いなく使うために重要ですので,

覚えておいてください.

図 3 Geographic, World and Local Coordinate System

Page 10: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

上記のように様々な座標系が考えられますが,地理空間情報をシームレスにつなげるた

めには,各空間情報はグローバルな座標系で表わされる必要があります.一方,人間が情

報を取り扱う場合は,身近な地物を基準としたローカルな座標系を用いることが多いです

ね.ロボット作業座標系も,GPS の普及による経緯度座標系を除いて,ほぼ同様です.

GIS とロボットを取り巻く環境情報を統合するためには,どこで演算を行うかは様々な手

法が考えられるものの,少なくとも,ローカルな座標系とグローバルな座標系を簡単に変

換できなければならないでしょう. 座標変換自体は,ワールド座標系に地理座標系への参照情報(CRS 情報)を付加するこ

とで位置座標の変換を行う仕組みで,これらを組み合わせた単純なものです.ただし,ロ

ボットで用いる場合は,以下の事項を考えるべきでしょう.この詳細については,R-GIS 応用編で説明できればと考えています.

座標系に関するパラメータ(軸や原点)の変化(動的な座標系か否か) 座標系の永続性(一時的な座標系か否か) 座標系の識別手法 座標系の管理手法と管理の粒度 座標系間の相互変換 座標変換に要する計算時間

Page 11: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 2 章 準備 本書では,R-GIS RTC とサンプル地図データ,および移動ロボットサンプルとしての

レゴキットとその RTC を使用して,R-GIS の超簡単な機能を確認し,R-GIS を理解して

もらうことを目的としています. 具体的な課題としては,RgisOperator を使って,GIS データから生成したポテンシャ

ルグリッドによる最小コスト経路探索を行い,それに合わせて,移動ロボットを動作させ

る,というものです. 第 3 章以降から,それぞれの RTC 群を順次,使用していきますが,ここでは,まず,

その準備をします. 2.0 動作環境 OS:Windows VISTA Home Premium(32 ビット) Windows XP Proffesional(32 ビット) Winodws 7 Proffesional (32 ビット) RT ミドルウェア:OpenRTM-aist C++版 0.4.2,python 版 0.4.1,

JAVA 版 0.4.2 開発環境:Microsoft Visual Studio 2008, Python 2.5, JDK 1.5.0.22 (OpenRTM-aist は JDK 1.6 をサポートしていません) RTSystemEditor for OpenRTM-aist 0.4.2 2.1 インストール 【RT ミドルウェアのインストール】 先ず,RT ミドルウェア(RTM)をインストールしましょう.RT ミドルウェアを利用する

ためには,使用するプラットフォームや,RT ミドルウェアの実行に必要な各種ソフトウ

ェアのパッケージをインストールする必要があります. 利用プラットフォームには,Windows 版や Linux 版がありますが,この教科書では,

入門編ということで,皆さんが日常よく使われている Windows/C++/JAVA/PYTHON 版を

使うことにします.また,現時点で,OpenRTM-aist の最新バージョンは,1.0 ですが,

これまでの開発の経緯から,本書では,0.4.2 で記述します. さて,RTM のインストール方法については, OpenRTM-aist 公式ホームページ: http://www.openrtm.org/OpenRTM-aist/html/ [ダウンロード]→[過去のバージョン]→[C++]→"OpenRTM-aist-0.4.2-RELEASE"(Visual Studio 2008 用)をダウンロードして下さい.

Page 12: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

【外部ライブラリのセットアップ】 OpenCV のインストール: OpenRTM-aist のホームページのインストールマニュアルに従って,OpenCV 1.0 をイ

ンストールしておいてください. FWTools のインストール: FWTools で,GIS 関連の主要なオープンソースソフトウェア・ライブラリをまとめて

インストールできます.(FWTools ホームページ http://fwtools.maptools.org/) (1)FWTools 2.4.3 (Windows 32bit) セットアッププログラムをダウンロードします.

http://home.gdal.org/fwtools/FWTools243.exe (2)セットアッププログラムをダウンロードして実行します. (3)環境変数を設定します.¥data 以前は,インストール先に応じて変えてください. 変数:GDAL_DATA 値:"C:¥Program Files¥FWTools2.4.3¥data" (4)インストール先の bin¥proj.dll を同じフォルダ内にコピーして,proj_fw.dll とい

うファイル名にしてください. 【R-GIS サンプルツールキット(コンポーネント)のインストール】 本書に付属のパッケージ「Rgis.zip」をインストールします.このファイルを展開後,

C:¥ にコピーを行って下さい. フォルダー構成は, C:¥Rgis¥binary ¥RgisOperatorTest20090924 となります. 必要なコンポーネント

RgisOperatorComp ActionPlanningRTCComp LocalPathPlanningRTCComp LegoMotorControlComp LegoControllerComp MapManagementRTCComp

Page 13: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

GlobalPathPlanningRTCComp LocalizationDataDistributerRTCComp LegoManagerComp SelfLocalizationComp

【LEGO NXT に関係するセットアップ】 このテキストで使用するレゴは,「教育用レゴ マインドストーム NXT 基本セット

9797」です.教育用レゴには,電源として電池の代わりに充電バッテリーが付属していま

すが,充電用のアダプターは別売りです.「教育用レゴ AC アダプター(NXT 用)」を追

加で購入すると良いでしょう.レゴに関する市販のソフトウェア(教育用レゴ NXT ソフ

トウェアなど)は不要です.また,パソコン側には,レゴとの通信手段として,

Bluetooth が必要になります. (参考)「玩具用レゴ マインドストーム NXT」でも動作します. http://www.afrel.co.jp/tech/otherqa.html レゴは,基本セットのサンプル通りに組み立てていきます.但し,右側のモータは A の

コネクタに,左側のモータは C のコネクタに接続し,超音波センサは,3のコネクタに接

続します.タッチセンサは,使用しないため,接続をしなくても良いです.

Page 14: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 レゴ 組み立て例

組み立てが終わりましたら,LEGO の公式ホームページにある USB driver(1.02 or later)をインストールしましょう(http://mindstorms.lego.com/en-us/support/files/default.aspx#Driver).インストール後,パソコンとレゴを USB ケーブ

ルで接続をします.

図 LEGO MINDSTORM NXT USB Driver のインストール

図 LEGO と PC を USB で接続

次に,JDK 1.5.22 をインストールします( https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-1.5.0_22-oth-JPR@CDS-CDS_Developer).既に,OpenRTM-aist の JAVA のインストールマニュアルで,1.5.15 をインストールされている方は,1.5.22 をインストールする必要はありません.ここでは,

表の通り,いくつかの環境変数を設定します.自分のパソコンの環境を考慮して,値を変

Page 15: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

更して下さい. 表 JAVA に関する環境変数の例 変数 値 PATH C:¥Program Files¥Java¥jdk1.5.0_22¥bin を追加 JAVA_HOME C:¥Program Files¥Java¥jdk1.5.0_22 RTM_JAVA_ROOT C:¥Program Files¥OpenRTM-aist¥0.4 CLASSPATH .; C:¥Program Files¥OpenRTM-aist¥0.4¥jar¥OpenRTM-aist-

0.4.2.jar; C:¥Program Files¥OpenRTM-aist¥0.4¥jar¥commons-cli-1.1.jar

次に,LEJOS 0.85 をインストールします.LEGO と PC は USB で接続したままの状態

で,セットアップを行って下さい.

図 LEJOS セットアップ 1

図 LEJOS セットアップ 2

Page 16: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 LEJOS セットアップ 3

図 LEJOS セットアップ 4

Page 17: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 LEJOS セットアップ 5

図 LEJOS セットアップ 6

Page 18: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 NXT の接続確認 図 「はい」を選択

Page 19: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 ファームウェアの書き換え中 図 「いいえ」を選択する 次に,Bluetooth の設定を行います.接続に関する注意点は,LEGO の公式ホームペー

ジを参 考にして下さい (http://mindstorms.lego.com/en-us/bluetooth/default.aspx) .Windows 標準のデバイスドライバを必ず使用するようにして下さい.Windows7 で,

Cambridge Silicone Radio (CSR)社の USB ドングルを使ったインストール例を挙げます. まず,LEJOS をインストールしたレゴの電源を入れます.NXT がスリープしないよう

に設定を行っておくと安心です.ドングルに付属するドライバ類は,一切,インストール

しないで下さい.まず,USB ドングルを Windows の USB ポートに指します.そうす

ると,自動的にドライバがインストールされます.ドライバがインストールされると,自

動的に「デバイスの追加」が開きます.ここに「NXT」が現れるので,NXT を指定して,

次をクリックします.続いて,ペアリングコードの入力が求められるので,必ず「123

4」を入力して下さい.そうするとペアリングが終了し,レゴと通信が可能になります.

Page 20: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 Windows 標準のドライバがインストールされる

図 デバイスの追加

Page 21: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 ペアリングコード「1234」を入力

図 Bluetooth 接続のプロパティ画面

Page 22: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

2.2 サンプル環境(地図)

サンプル地図データとして,障害物データを1種類,コストデータを1種類,用意して

います.身近さと縮尺の問題がありますが,今回は,移動ロボット研究者にとってよく知

られている,つくば市中央公園の地図データをモデルに,作成,準備しています. 座標系:平面直角座標系 第 9 系(世界測地系)JGD2000 CS IX EPSG:2451 格納形式:ESRI Shapefile (Cost.shp, Wall.shp など) ※ Shapefile 形式は,.shp(形状), .shx(インデックス), .dbf(属性), .prj(空間参照) など複数のファイルで構成されます.

図○.サンプル GIS データ

Page 23: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

ファイル名 形状 内容 obstacles_pt.shp ポイント レーザーレンジファインダなどで検出 した障害物(点) obstacles_ln.shp ライン 段差などの障害物(線) floor_1F_wall.shp ポリゴン 建物の壁などの障害物(面) floor_1F_cost.shp ポリゴン 移動コスト ・floor_1F_cost の数値はコスト値 ・青枠線はグリッド生成範囲 (x=XXXXX, y=-YYYYY) (x=XXXXX, y=-YYYYY) 2.3 サンプルロボット 接続するロボットサンプルとしては,LEGO 社の MINDSTORM NXT 基本セットを利

用します.

Page 24: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版
Page 25: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 3 章 R-GIS サーバ 3.1 RgisOperator RTC

RgisOperator は,GIS(Geographic Information System:地理情報システム)による各

種地理空間データ処理サービスを提供する RT コンポーネント(RTC)である. 位置情報や環境情報(ランドマークの位置,障害物の分布,行動範囲,路面状態の区分な

ど)を,地理座標系を持つ空間データ(フィーチャ:ベクタ形式の形状データ+属性デー

タ,グリッド:ラスタ形式のデータ)として重層的に管理し,経路探索,ロボット位置記

録などの移動ロボット向けサービスを提供する.

図 2-1 RgisOperatorの位置づけ

Page 26: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator の仕様

RT コンポーネントの基本情報

Module name RgisOperator

Module description RgisOperator

Module version 1.0.0

Module vender R-GIS

Module category R-GIS

Component type STATIC

Component’s activity type PERIODIC

Component kind Data Flow

Number of maximum instance 5

Execution type PeriodicExecutionContext

Execution rate 1.0

RT コンポーネントのアクティビティ

アクティビティ 実行する処理

on_initialize GIS ライブラリの初期設定

on_finalize GIS ライブラリの解放

on_activated RgisOperator 設定ファイル(プロジェクトデータ)の読み込

on_deactivated プロジェクトデータの解放

on_execute 何もしない

InPort(データ入力ポート) なし OutPort(データ出力ポート) なし

Rgis Operator

MapService

RouteService

TrackLogService

PlottingService

Page 27: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

サービスポート(Provider)

Port Name Instance Type Instance Name Type Name

MapServicePort RGIS::RTComp::MapService MapService MapService

RouteServicePort RGIS::RTComp::RouteService RouteService RouteService

TrackLogServicePort RGIS::RTComp::TrackLogService TrackLogService TrackLogService

PlottingServicePort RGIS::RTComp::PlottingService PlottingService PlottingService

MapServicePort RgisOperator 設定ファイルに記述されたマップやレイヤ情報の取得,フィ

ーチャの空間検索・属性検索,フィーチャ→ラスタ変換,測地座標系変

換,空間データのファイル出力など,基本的な GIS サービスを提供する.

RouteServicePort 経路探索に関連するサービス(ポテンシャルグリッド生成,最小コスト経路

探索など)を提供する. TrackLogServicePort ロボットの位置情報を空間データベースに記録する. PlottingServicePort 環境情報(観測対象の位置など)を空間データベースに記録する.

サービスポート(Consumer) なし

コンフィギュレーション

パラメータ名 データ型 内容

ProjectFilePath String RgisOperator設定ファイル(.xml)の絶対パス

TemporalDirectory String 一時ディレクトリ

RgisOperator 設定ファイル RgisOperator で使用するマップや経路探索用パラメータなどの各種設定を XML 形式で記

述した「RgisOperator 設定ファイル」を作成し,このファイルのパスを RT コンポーネン

トのコンフィギュレーション"ProjectFilePath"で指定する. 主な設定事項(詳細やサンプルは後述) 各種サービスの設定 RouteService などのサービスの実行に必要な設定を記述する. マップの設定 RgisOperator からアクセスする各種空間データソースを,マップ内の各レイヤとして登録

する. 座標参照系の設定 RgisOperator で取り扱う各種空間データの座標参照系を登録する.座標参照系を変換する

際に必要となる.

Page 28: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

サービス定義:

RGIS::RTComp::MapService boolean getMapInfo(out RGIS::Geo::MapInfoC mapInfo)

RgisOperator設定ファイルで設定されたマップ情報を取得する.

[引数]

• mapInfo:結果として返されるマップ情報

[戻り値]取得の成否

boolean getLayerInfoByName(out RGIS::Geo::LayerInfoC layerInfo, in string layerName)

RgisOperator設定ファイルで設定されたレイヤ情報を取得する.

[引数]

• layerInfo:結果として返されるレイヤ情報

• layerName:対象レイヤ名

[戻り値]取得の成否

boolean addFeature(in string layerName, in RGIS::Geo::FeatureC feature)

フィーチャレイヤにフィーチャを追加する

[引数]

• layerName:対象レイヤ名

• feature:追加するフィーチャ

[戻り値]追加の成否

boolean getFeature(out RGIS::Geo::FeatureC feature, in string layerName, in long idx)

フィーチャレイヤからフィーチャを取得する

[引数]

• feature:結果として返されるフィーチャ

• layerName:対象レイヤ名

• idx:フィーチャのインデックス番号

[戻り値]取得の成否

boolean queryFeatures(out RGIS::Geo::FeaturesC features, in string layerName, in string

whereClause)

フィーチャレイヤからフィーチャを属性データで検索する

[引数]

• features:結果として返されるフィーチャ群

• layerName:対象レイヤ名

• whereClause:検索式(SQL WHERE文)

[戻り値]検索の成否

boolean getFeaturesAt(out RGIS::Geo::FeaturesC features, in string layerName, in PntC pt, in

double tolerance)

フィーチャレイヤから,指定した位置にあるフィーチャを取得する.点レイヤの場合は,指定位置か

らtorelance内の距離にあるフィーチャを検索する.

[引数]

• features:結果として返されるフィーチャ群

• layerName:対象レイヤ名

• pt:位置

• tolerance:検索半径

[戻り値]検索の成否

boolean getGridData(out RGIS::Geo::GridC gridData, in string layerName);

ラスタレイヤからグリッドデータを取得する

[引数]

• gridData:結果として返されるグリッドデータ

• layerName:対象レイヤ名

[戻り値]取得の成否

boolean createGridFromFeatureLayer(out RGIS::Geo::GridC gridData, in string layerName, in

RGIS::Geo::GridInfoC gridInfo, in string fieldName, in double fixedValue, in double bgValue)

Page 29: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

フィーチャレイヤからグリッドデータを生成する

[引数]

• gridData:結果として返されるグリッドデータ

• layerName:対象レイヤ名

• gridInfo:グリッドのセルサイズ等の設定

• fieldName:フィーチャが存在する領域のセル値を属性値から設定する場合,属性名を指定する

• fixedValue:フィーチャが存在する領域のセル値を一定値にする場合,そのセル値を指定する

• bgValue:フィーチャが無い背景領域のセル値

[戻り値]生成の成否

boolean exportToFile(in string layerName, in string filePath, in string sourceType, in string

options)

フィーチャレイヤをファイルに出力する.メモリレイヤに一時的に蓄積されたフィーチャを保存する

場合などに使用.

[引数]

• layerName:対象レイヤ名

• filePath:出力するファイルの絶対パス

• sourceType:出力形式.GDAL/OGRで定義されている対応フォーマットの名称で指定する.

• options:出力オプション.GDAL/OGRで定義されている出力オプションパラメータで設定する.

[戻り値]出力の成否

boolean exportToFileWithQuery(in string layerName, in string filePath, in string sourceType,

in string options, in string whereClause);

フィーチャレイヤから属性データで検索したフィーチャをファイルに出力する.

[引数]

• layerName:対象レイヤ名

• filePath:出力するファイルの絶対パス

• sourceType:出力形式.GDAL/OGRで定義されている対応フォーマットの名称で指定する.

• options:出力オプション.GDAL/OGRで定義されている出力オプションパラメータで設定する.

• whereClause:検索式(SQL WHERE文)

[戻り値]出力の成否

boolean projectPoint(out PntC resultPt, in PntC sourcePt, in string crsFrom, in string crsTo)

点をある座標系から別の座標系に座標変換する.座標系はproj4形式のパラメータ文字列で指定する.

[引数]

• resultPt:結果として返される変換後の座標

• sourcePt:変換元の座標

• crsFrom:変換元の座標参照系

• crsTo:変換先の座標参照系

[戻り値]変換の成否

boolean projectPointByName(out PntC resultPt, in PntC sourcePt, in string crsNameFrom, in

string crsNameTo)

点をある座標系から別の座標系に座標変換する.座標系はRgisOperator設定ファイルで設定した名称

で指定する.

[引数]

• resultP:結果として返される変換後の座標

• sourcePt:変換元の座標

• crsFrom:変換元の座標参照系の名称

• crsTo:変換先の座標参照系の名称

[戻り値]変換の成否

boolean exportGridToTiff (in RGIS::Geo::GridC grid, in string filePath)

グリッドデータを GeoTIFF(位置情報付き TIFFファイル)に出力する.

[引数]

• grid:出力するグリッド

• filePath:出力するファイルの絶対パス(.tif)

[戻り値]出力の成否

boolean exportGridToJpeg (in RGIS::Geo::GridC grid, in string filePath, in long quality, in

boolean withWorldFile)

Page 30: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

グリッドデータをJPEGファイルに出力する.

[引数]

• grid:出力するグリッド

• filePath:出力するファイルの絶対パス(.jpg)

• quality:出力する jpeg画像の品質(10~100の間の数値)

• withWorldFile:trueにすると,位置情報(.wrlファイル)も出力する.

[戻り値]出力の成否

void setMapExtent(in BoxC ext)

グリッドマップのデフォルトの範囲を設定する.

[引数]

• ext:マップの範囲

RGIS::RTComp::RouteService long createCostGrid(out RGIS::Geo::GridC resultGrid, in BoxC extent)

RgisOperator設定ファイルで指定したフィーチャレイヤから,コストグリッドを生成する.

[引数]

• resultGrid:結果として返されるコストグリッド

• extent:生成するグリッドの範囲.縦または横のサイズが 0 になる場合は,デフォルトの範囲を

使用する.

[戻り値]結果パラメータ.成功の場合は 0を返す.

long createObstacleGrid(out RGIS::Geo::GridC resultGrid, in BoxC extent)

RgisOperator設定ファイルで指定したフィーチャレイヤから,障害物グリッドを生成する.

[引数]

• resultGrid:結果として返される障害物グリッド

• extent:生成するグリッドの範囲.縦または横のサイズが 0 になる場合は,デフォルトの範囲を

使用する.

[戻り値]結果パラメータ.成功の場合は 0を返す.

long createPotentialGrid(out RGIS::Geo::GridC resultGrid, in PntC destinationPt, in BoxC

extent)

RgisOperator 設定ファイルで指定したフィーチャレイヤから,目的地までの移動ポテンシャルグリッ

ドを生成する.

[引数]

• resultGrid:結果として返されるポテンシャルグリッド

• destinationPt:目的地の座標(extentの内部に設定すること)

• extent:グリッドを生成する範囲

[戻り値]結果パラメータ.成功の場合は 0を返す.

long createPotentialGridByGrid(out RGIS::Geo::GridC resultGrid, in RGIS::Geo::GridC costGrid,

in RGIS::Geo::GridC obstacleGrid, in PntC destinationPt)

障害物グリッドとコストグリッドを使って,目的地までの移動ポテンシャルグリッドを生成する.(各

種設定については,別記 RgisOperator設定ファイル仕様を参照)

[引数]

• resultGrid:結果として返されるポテンシャルグリッド

• costGrid:コストグリッド

• obstacleGrid:障害物(進入禁止)グリッド

• destinationPt:目的地の座標(extentの内部に設定すること)

[戻り値]結果パラメータ.成功の場合は 0を返す.

long getShortestPathFromGrid(out RGIS::Geo::LineStringC routeOut, in RGIS::Geo::GridC

potentialGrid, in PntC fromPt)

ポテンシャルグリッドを使って最小コスト経路を探索する.(各種設定については,別記

RgisOperator設定ファイル仕様を参照)

[引数]

• routeOut:結果として返される経路のノード

• potentialGrid:探索に使うポテンシャルグリッド

Page 31: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

• fromPt:出発地の座標

[戻り値]結果パラメータ.成功の場合は 0を返す.

long getNetworkRoute(out RGIS::Geo::LineStringC resultNodes, in PntC fromPt, in PntC toPt)

ネットワークデータから経路を探索する.(ネットワークデータの格納と処理のため pgRouting による

ネットワークデータベース構築が必要.)

[引数]

• resultNodes:結果として返される経路(折れ線)

• fromPt:出発地の座標

• toPt:目的地の座標

[戻り値]結果パラメータ.成功の場合は 0を返す.

RGIS::RTComp::RouteServiceInfoC getRouteServiceInfo()

経路サービス情報を取得する

[戻り値]経路サービス情報

void setRouteServiceInfo(in RGIS::RTComp::RouteServiceInfoC info)

経路サービス情報を設定する

[引数]

• info:経路サービスの設定情報

RGIS::RTComp:: TrackLogService boolean saveLocation(in LocationC loc)

ロボット等の位置・姿勢などを空間データベースに追加する.追加先などは RgisOperator 設定ファイ

ルで設定しておく.

[引数]

• loc:ロボットの位置情報

[戻り値]追加の成否

RGIS::RTComp:: PlottingService boolean saveObjectLocation(in string layerName, in LocationC loc)

観測対象物等の位置・姿勢などを空間データベースに追加する.保存先などはプロジェクトファイル

で設定する.

[引数]

• layerName:追加先のレイヤ名

• loc:対象物の位置情報

[戻り値]追加の成否

対応する空間データフォーマット

フィーチャデータ ESRI Shapefile(広く使われている GIS データ格納形式)

PostGIS(PostgreSQL の GIS データ拡張)

メモリ(RT コンポーネントが Active 状態のときのみ.一時データ用)

グリッドデータ GeoTIFF(位置情報付き TIFF)

Page 32: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

必要な外部ライブラリ

FWTools 2.4.7 GIS ライブラリ

http://fwtools.maptools.org/

(1)Web サイトからセットアッププログラムをダウンロードして実行する.

(2)下記のように環境変数を設定する.\data 以前はインストール先に応じて

変更する.

変数:GDAL_DATA 値:”C:\Program Files\FWTools2.4.7\data”

(3)インストール先の bin\proj.dll を同じフォルダ内にコピーして,proj_fw.dll

というファイル名にする.

OpenCV 1.0 画像処理ライブラリ

http://sourceforge.net/projects/opencvlibrary/

RgisOperator のファイル構成

・ クライアント RTC 開発用

RgisCommon.idl

RgisGeo.idl

RgisOperator.idl

・ 実行ファイル群

RgisOperatorComp.exe(RgisOperator RTC の本体)

R-GIS 内部ライブラリの dll 群

・ 設定ファイル群 (ユーザが編集)

rtc.conf(RT コンポーネント動作設定ファイル)

RgisOperatorRTC.conf(RgisOperatorRTC コンフィギュレーションファイル)

←rtc.conf で指定した場所に格納

rgis_project.xml(RgisOperator 設定ファイル)←RgisOperatorRTC.conf または

RTC インスタンスの ProjectFilePath コンフィギュレーションで指定した場所

に格納

Page 33: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator RTC によるポテンシャルグリッド経路探索 ポテンシャルグリッドによる最小コスト経路探索

RgisOperator の RouteService が 提 供 す る サ ー ビ ス createPotentialGrid() やgetShortestPathFromGrid()によって,障害物グリッドと移動コストグリッドから生成し

た目的地までのポテンシャルグリッド(累積コストグリッド)を使って,グリッド内のあ

る地点から目的地までの最小コスト経路探索を行う.

図 街区レベルの建物形状データを用いてグリッドマップ生成・経路探索を実行した例

RgisOperator RTC 障害物フィーチャレイヤ (建物形状)

移動コストフィーチャレイヤ

障害物グリッド

移動コストグリッド

ソースグリッド

ポテンシャルグリッド・経路探索

Page 34: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 屋内データを用いてグリッドマップ生成・経路探索を実行した例

(1)障害物フィーチャレイヤ(茶:

壁,紫:板,赤:物体)と,移動コス

トフィーチャレイヤ(水色)

(2)障害物グリッド(厚み有) (3)コストグリッド

(4)ソースグリッド(バッファ

有) (5)ポテンシャルグリッド

(6)経路探索結果 (7)経路線 (1)と重ねてみたもの

目的地

目的地

出発地

(8)拡大図 経路の単純化なし

[RouteService設定]

出発地 (x=16905, y=-34540)

目的地 (x=16913, y=-34581)

cellSize = 0.2

bufferSize = 0.4

routeTolerance = 0

withObstacleThickening = 1

Page 35: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

障害物グリッド 壁や危険箇所など,進入不可能な領域をグリッドマップで設定する. RgisOperator 設定ファイルで rgis:obstacleLayerName を指定すれば,そのフィーチャレ

イヤから障害物グリッドが自動生成される.指定されていない場合は,障害物がないもの

として処理される. レーザレンジファインダなどで検出した障害物(点),段差等の障害物(線),壁や柱等の

障害物(面)など,複数の障害物フィーチャレイヤを登録できる. 移動コストグリッド 移動にかかるコストの分布をグリッドマップで設定する.移動しにくいところや避けたい

領域などに,1~254 の整数でコスト値を与える.値が大きいほどコストが大きくなる.デ

フォルト値は1. RgisOperator 設定ファイルで rgis:costLayerName を指定すれば,そのレイヤから移動コ

ストグリッドが自動生成される.各コスト領域フィーチャには,rgis:costFieldName で指

定する属性フィールドに 1~254 の整数でコスト値を設定しておく.その他領域のコスト

値 は rgis: defaultCostValue で 設 定 す る ( デ フ ォ ル ト の コ ス ト 値 は 1 ).

rgis:costLayerName が指定されていない場合は,全セルにデフォルトのコスト値が設定

されたグリッドが生成される. ソースグリッド 移動コストグリッドに障害物位置を描画したもの.RgisOperator 内部で処理される. 経路が障害物にぶつからないように,RgisOperator 設定ファイルの rgis:bufferSize で,

障害物の周囲に座標系の単位で緩衝幅(バッファ)を指定できる.バッファが不要な場合

は 0 にする.バッファ領域には,移動コスト 254 が与えられる. ポテンシャルグリッド ソースグリッドの障害物以外の各セルについて,目的地に位置するセルからの累積移動コ

ストを計算したもの.createPotentialGrid()の結果として取得できる. in:障害物グリッド in:移動コストグリッド out:ポテンシャルグリッド

データ型 RGIS::Geo::GridC

セルの

データ型

unsigned char

符号無し 8 ビット整数

double

倍精度浮動小数点数

セル値 0: 背景

255: 障害物

1~254: コスト値

(デフォルトは 1)

(0, 255 は設定不可)

0: 目的地

0<x<double の最大値: 累積コスト値

double の最大値: 障害物

注意点 縦・横のセル数,セルサイズ,グリッドの位置いずれも同

一であること.

セル数などは移動コストグリッドと同一

Page 36: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

最小コスト経路探索 • ポテンシャルグリッド内のあるセルから,隣接する値が最も小さいセルを辿っていく

と,最小コスト経路が生成される.

• ポテンシャルグリッドから求められた最小コスト経路は,折れ線(点列)データと

して返される.縦横方向に直進する区間以外はセルの中心ごとに頂点が与えられる

ので,斜め方向に進む箇所は頂点が多くなってしまう.そこで,RgisOperator 設定フ

ァイルの rgis:routeTolerance に 0 を超える距離を設定すれば,その距離ごとに頂点を

置くように経路を単純化することができる.ただし,あまり大きな値にすると,経

路が単純化されすぎて障害物と重なってしまう恐れがある.セルサイズの 2 倍程度

で試してみること.

• グリッドの範囲外や,障害物が存在するセルからは経路探索できない.

Page 37: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator のポテンシャルグリッド経路探索の利用手順 (1) GIS アプリケーション等で,ロボットの移動領域の空間データを作成する. 障害物フィーチャレイヤ: 障害物や立ち入り禁止区域など,移動できない領域をポリゴンで描画する.このポリゴン

に重なるセルは,移動コスト計算から除外される. 移動コストフィーチャレイヤ: ロボットが移動できる領域において,移動コスト別にポリゴンを描画し,属性情報として

1(低)~254(高)の整数でコスト値を設定する.

(2) RgisOperator 設定ファイルを準備する. rgis:map に(1)で作成したデータをレイヤとして登録する. rgis:routeService を設定する.(グリッドのセルサイズやセル個数,障害物の周りに設け

るバッファの指定など)

(3) RgisOperator RTC を利用するクライアント RTC を作成する. RgisOperator RTC の RouteService ポートにサービスコンシューマとして接続する RTC(クライアント RTC)を作成する.

(4) クライアント RTC から経路探索サービス(メソッド)を利用する. まず,指定範囲における目的地までのポテンシャルグリッドを createPotentialGrid()で生

成する.(extent の縦または横の距離が 0 になる場合は,RgisOperator 設定ファイルの

rgis:map/rgis:extent の設定が適用される.) 生成したポテンシャルグリッドを用いて,getShortestPathFromGrid ()で,ある地点から

の経路を求める.

Page 38: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator 設定ファイル XML 定義 ※中列の記号:(1)必ず 1 回だけ出現,(?)0 回か 1 回出現,(+)1 回以上出現,(*)0 回以上出

rgis:project 要素

rgis:robotInfo rgis:robotInfo(1) ロボットの情報

rgis:routeService rgis:routeService(?) 経路探索サービスの設定

rgis:trackLogService rgis:trackLogService(?) ロボット軌跡記録サービスの設定

rgis:plottingService rgis:plottingService(?) 対象物位置記録サービスの設定

rgis:map rgis:map(1) マップの設定

rgis:crsList rgis:crsList(?) 座標参照系の登録

rgis:robotInfo 属性

rgis:id string(1) ロボットの ID

rgis:name string(1) ロボットの名称

要素

rgis:bodySize float(?) ロボット本体の平面サイズ(直径)

rgis:routeService 要素

rgis:obstacleLayerName string(?) 障害物フィーチャレイヤの名称.","で区

切って複数レイヤを指定可能.

rgis:costLayerName string(?) 移動コストフィーチャレイヤの名称(指

定できるレイヤは 1つのみ)

rgis:costFieldName string(?) 移動コスト値を格納している属性フィー

ルド名

rgis:bufferSize float(?) 障害物の周囲に設定する緩衝幅の半径.0

にすると,緩衝帯を生成しません.デフ

ォルトは 0

rgis:cellSize float(1) 経路探索処理で使うグリッドのセルサイ

ズ.縦横同じサイズ.

rgis:routeTolerance float(?) 経路探索結果の折れ線の頂点の間隔.頂

点を間引く際に使用.間引かない場合は 0

を設定.デフォルトは 0

rgis:withObstacleThickening int(?) 0 or 1 小さい・細い障害物の形状を確実にグリ

ッドマップ化するために厚みを持たせる

かどうか.0 の場合は何もせず,1 の場合

は厚みを持たせる.

rgis:defaultCostValue int(?) 1<=n<=254 デフォルトの移動コスト値.デフォルト

は 1.

Page 39: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

rgis:networkService 要素

rgis:arcLayerName string(1) アークレイヤ名

rgis:arcIdFieldName string(1) アーク ID を格納している属性フィールド

rgis:costFieldName string(1) アークの移動コスト値を格納している属性

フィールド名

rgis:sourceNodeIdFieldName string(1) アークの始点ノード ID を格納している属

性フィールド名

rgis:targetNodeIdFieldName string(1) アークの終点ノード ID を格納している属

性フィールド名

rgis:arcFilter string(1) 使用するアークを属性検索で抽出する場

合,条件を SQL Where文で指定.

rgis:nodeLayerName string(1) ノードレイヤ名

rgis:nodeIdFieldName string(1) ノード ID を格納している属性フィールド

rgis:nodeBufferRadius float(?) 出発地や目的地の最寄りノードの検索半径

rgis:routeTolerance float(?) 経路探索結果の折れ線の頂点の間隔.頂点

を間引く際に使用.間引かない場合は 0 を

設定.デフォルトは 0

rgis:trackLogService 要素

rgis:layerName string(1) ロボット位置情報を記録するレイヤ名

rgis:idFieldName string(1) ロボット IDを記録する属性フィールド名

rgis:timeStampFieldName string(?) 時間を記録する属性フィールド名

rgis:rollFieldName string(?) 姿勢情報(roll)を記録する属性フィールド

rgis:pitchFieldName string(?) 姿勢情報(pitch)を記録する属性フィールド

rgis:yawFieldName string(?) 姿勢情報(yaw)を記録する属性フィールド名

rgis:plottingService 要素

rgis:layerName string(1) 対象物の位置情報を記録するレイヤ名

rgis:idFieldName string(1) 対象物の IDを記録する属性フィールド名

rgis:timeStampFieldName string(?) 時間を記録する属性フィールド名

rgis:geometryType string(1) 地 物 形 状 の タ イ プ ( 面 :Polygon ,

線:LineString,点:Point)

rgis:map 属性

rgis:name string(1) マップの名称

要素

rgis:crsName string(?) マップ全体の座標参照系(ワールド座標系)

の名称

rgis:crsList に 登 録 し た rgis:crs の

Page 40: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

rgis:nameを設定する.

rgis:extent float(minX,minY,minZ,maxX

, maxY, maxZ) (?)

マップの範囲をワールド座標系で記述する.

グリッド範囲のデフォルト値となる.

rgis:layers rgis:layers (?) レイヤの登録

rgis:layers 要素

rgis:layer rgis:layer(*) レイヤ情報

rgis:layer 属性

rgis:id string(1) レイヤの ID

rgis:name string(1) レイヤの名称.

シェープファイルの場合はファイル名から

拡張子(.shp)を除いたものを記述するこ

と.

PostGIS の場合は,テーブル名を記述する

こと.

要素

rgis:layerType string(1) レ イ ヤ の 種 別 ( 面 : Polygon , 線 :

LineString,点:Point,ラスタ:Raster)

rgis:crsName string(?) このレイヤの座標参照系の名称

rgis:attributeFilter string(?) フィーチャ抽出用の属性フィルタ文字列

rgis:openMode string(?) レイヤデータへの接続元の設定(サーバか

ら接続:Server,クライアントから接続:

Client)

rgis:dataSource rgis:dataSource(1) データソースの設定

rgis:dataSource 属性

rgis:name (1) データソースの名称

要素

rgis:source string(?) データソースの接続先を GDAL/OGR 形式で

記述

(シェープファイルの場合は.shp への絶

対パス,PostGIS の場合はデータベースへ

の接続文字列)

rgis:sourceType string(?) データソースの種別を GDAL/OGR のフォー

マットコードで記述

(シェープファイル:ESRI Shapefile,

PostGIS:PostgreSQL,メモリ:Memory,

など)

rgis:option string(?) データソース接続時のオプション設定文

字列.設定は OGRに準拠.

rgis:updatable int(?) レイヤが更新可能かどうか(不可:0,可

能:1)

rgis:vectorDataSource rgis:vectorDataSource(?) ベクタデータソースの設定.(ベクタ形式

の場合のみ)

Page 41: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

rgis:rasterDataSource rgis:rasterDataSource(?) ラスタデータソースの設定(ラスタ形式

の場合のみ)

rgis:vectorDataSource 要素

rgis:geometryType string(1) ベクタ形式の地物の種別(面:Polygon,

線:LineString,点:Point)

rgis:rasterDataSource 未定義

rgis:crsList 要素

rgis:crs rgis:crs(*) 座標参照系

rgis:crs 属性

rgis:name string(1) 座標参照系の名称

rgis:srid int(?) この座標参照系に該当する EPSG コード(該

当するコードがなければ空欄)

要素

crsParam string(?) 地図投影変換ライブラリ proj4 の形式で記

述された座標参照系パラメータ.(設定例は

別記3を参照)

Page 42: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator 設定ファイル サンプル

<?xml version="1.0" encoding="UTF-8"?>

<rgis:project xmlns:rgis="http://www.engisinc.com/R-GIS">

<rgis:robotInfo rgis:id="Robot01" rgis:name="robo">

<rgis:bodySize>0.8</rgis:bodySize>

</rgis:robotInfo>

<rgis:routeService>

<rgis:obstacleLayerName>buildings2</rgis:obstacleLayerName>

<rgis:costLayerName>cost</rgis:costLayerName>

<rgis:costFieldName>cost</rgis:costFieldName>

<rgis:bufferSize>2</rgis:bufferSize>

<rgis:cellSize>1</rgis:cellSize>

<rgis:routeTolerance>2</rgis:routeTolerance>

</rgis:routeService>

<rgis:trackLogService>

</rgis:trackLogService>

<rgis:plottingService>

</rgis:plottingService>

<rgis:map rgis:name="Map0">

<rgis:crsName>JGD2000_02</rgis:crsName>

<rgis:extent>-60761,65517,0,-60468,65851,0</rgis:extent>

<rgis:layers>

<rgis:layer rgis:id="1" rgis:name="cost">

<rgis:layerType>Polygon</rgis:layerType>

<rgis:crsName>JGD2000_02</rgis:crsName>

<rgis:attributeFilter></rgis:attributeFilter>

<rgis:openMode>Server</rgis:openMode>

<rgis:dataSource rgis:name="dsBase">

<rgis:source>D:\share3\R-GIS\simulation\momochi\cost.shp</rgis:source>

<rgis:sourceType>ESRI Shapefile</rgis:sourceType>

<rgis:option></rgis:option>

<rgis:updatable>0</rgis:updatable>

<rgis:vectorDataSource>

<rgis:geometryType>Polygon</rgis:geometryType>

</rgis:vectorDataSource>

</rgis:dataSource>

</rgis:layer>

<rgis:layer rgis:id="2" rgis:name="buildings2">

<rgis:layerType>Polygon</rgis:layerType>

<rgis:crsName>JGD2000_02</rgis:crsName>

<rgis:attributeFilter></rgis:attributeFilter>

<rgis:openMode>Server</rgis:openMode>

<rgis:dataSource rgis:name="dsObst">

<rgis:source>D:\share3\R-GIS\simulation\momochi\buildings2.shp</rgis:source>

<rgis:sourceType>ESRI Shapefile</rgis:sourceType>

<rgis:option></rgis:option>

<rgis:updatable>0</rgis:updatable>

<rgis:vectorDataSource>

<rgis:geometryType>Polygon</rgis:geometryType>

</rgis:vectorDataSource>

</rgis:dataSource>

</rgis:layer>

</rgis:layers>

</rgis:map>

<rgis:crsList>

<rgis:crs rgis:name="WGS84" rgis:srid="4326">

<rgis:crsParams>+init=epsg:4326</rgis:crsParams>

</rgis:crs>

<rgis:crs rgis:name="JGD2000_02" rgis:srid="2444">

<rgis:crsParams>+init=epsg:2444</rgis:crsParams>

Page 43: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

</rgis:crs>

<rgis:crs rgis:name="Momochi">

<rgis:crsParams>+proj=ortho +datum=wgs84 +lat_0=33.59323500 +lon_0=130.35599500 +x_0=0

+y_0=0 +towgs84=0,0,0,0,0,0,0 +units=m</rgis:crsParams>

</rgis:crs>

</rgis:crsList>

</rgis:project>

Page 44: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

座標参照系(CRS)設定例 名称(任意) rgis:crsParam(proj4形式のパラメータ) 備考・適用範囲

WGS84 +init=epsg:4326 GPS などで用いられる一般的な

経緯度座標系

JGD2000_deg +init=epsg:4612 日本の世界測地系による経緯度

座標系.WGS84 と差はほとんど

ない.

JGD2000_01 +init=epsg:2443 日本の世界測地系による平面直

角座標系第 1 系.公共測量に使

われる.単位はメートル.長崎

県,鹿児島県の一部.

JGD2000_02 +init=epsg:2444 平面直角座標系第 2 系.第 1 系

以外の九州.

JGD2000_03 +init=epsg:2445 平面直角座標系第 3 系.山口,

島根,広島

JGD2000_04 +init=epsg:2446 平面直角座標系第 4系.四国

JGD2000_05 +init=epsg:2447 平面直角座標系第 5 系.兵庫,

鳥取,岡山

JGD2000_06 +init=epsg:2448 平面直角座標系第 6 系.京都,

大阪,福井,滋賀,三重,奈

良,和歌山

JGD2000_07 +init=epsg:2449 平面直角座標系第 7 系.石川,

富山,岐阜,愛知

JGD2000_08 +init=epsg:2450 平面直角座標系第 8 系.新潟,

長野,山梨,静岡

JGD2000_09 +init=epsg:2451 平面直角座標系第 9 系.東京,

福島,栃木,茨城,埼玉,千

葉,群馬,神奈川

JGD2000_10 +init=epsg:2452 平面直角座標系第 10 系.青森,

秋田,山形,岩手,宮城

JGD2000_11 +init=epsg:2453 平面直角座標系第 11 系.北海度

西部

JGD2000_12 +init=epsg:2454 平面直角座標系第 12 系.北海道

中部

JGD2000_13 +init=epsg:2455 平面直角座標系第 13 系.北海道

東部

JGD2000_14 +init=epsg:2456 平面直角座標系第 14 系.小笠原

諸島

JGD2000_15 +init=epsg:2457 平面直角座標系第 15系.沖縄

JGD2000_16 +init=epsg:2458 平面直角座標系第 16 系.先島

諸島

JGD2000_17 +init=epsg:2459 平面直角座標系第 17 系.南大東

島・北大東島

JGD2000_18 +init=epsg:2460 平面直角座標系第 18 系.沖ノ鳥

JGD2000_19 +init=epsg:2461 平面直角座標系第 19系.南鳥島

sample01 +proj=tmerc +lat_0=33.59 +lon_0=130.35 +k=0.

999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=

0,0,0,0,0,0,0 +units=m

任意の経緯度(北緯 33.59,東

経 130.35)を原点にした平面直

角座標系の例.原点から東西

130kmまでの範囲向け.

sample02 +proj=ortho +datum=wgs84 +lat_0=33.59 +lon_0

=130.35 +x_0=1.2 +y_0=3.1 +towgs84=0,0,0,0,

0,0,0 +units=m

任意の経緯度(北緯 33.59,東

経 130.35)から西に 1.2m,南に

3.1m 平行移動したところを原点

にしたメートル単位の座標系の

Page 45: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

例.数 km程度の狭い領域向け.

Page 46: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator.idl #ifndef _RGIS_RGISOPERATOR_IDL

#define _RGIS_RGISOPERATOR_IDL

#include "RgisGeo.idl"

module RGIS{

module RTComp{

struct RouteServiceInfoC{ //経路サービスの設定情報

sequence<string> obstacleLayerNames; //障害物レイヤ名

string costLayerName; //コスト領域レイヤ名

string costFieldName; //コスト値を格納した属性フィールド名

double bufferSize; //障害物の周りの緩衝域の幅

double routeTolerance; //経路折れ線を単純化する際のノード間許容距離

double cellSize; //セルサイズ

boolean withObstacleThickening; //小さな障害物を確実にセル化するかどうか

octet defaultCostValue; //デフォルトのコスト値

};

interface MapService{

boolean getMapInfo(out RGIS::Geo::MapInfoC mapInfo);

boolean getLayerInfoByName(out RGIS::Geo::LayerInfoC layerInfo, in string layerName);

boolean addFeature(in string layerName, in RGIS::Geo::FeatureC feature);

boolean getFeature(out RGIS::Geo::FeatureC feature, in string layerName, in long idx);

boolean queryFeatures(out RGIS::Geo::FeaturesC features, in string layerName,

in string whereClause);

boolean getFeaturesAt(out RGIS::Geo::FeaturesC features, in string layerName,

in PntC pt, in double tolerance);

boolean getGridData(out RGIS::Geo::GridC gridData, in string layerName);

boolean createGridFromFeatureLayer(out RGIS::Geo::GridC gridData, in string layerName,

in RGIS::Geo::GridInfoC gridInfo, in string fieldName, in double fixedValue, in

double bgValue);

boolean exportToFile(in string layerName, in string filePath, in string sourceType,

in string options);

boolean exportToFileWithQuery(in string layerName, in string filePath,

in string sourceType, in string options, in string whereClause);

boolean projectPoint(out PntC resultPt, in PntC sourcePt, in string crsFrom, in string

crsTo);

boolean projectPointByName(out PntC resultPt, in PntC sourcePt, in string crsNameFrom,

in string crsNameTo);

boolean exportGridToTiff(in RGIS::Geo::GridC grid, in string filePath);

boolean exportGridToJpeg(in RGIS::Geo::GridC grid, in string filePath, in long quality,

in boolean withWorldFile);

void setMapExtent(in BoxC ext);

Page 47: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

};

interface RouteService{

long createCostGrid(out RGIS::Geo::GridC resultGrid, in BoxC extent);

long createObstacleGrid(out RGIS::Geo::GridC resultGrid, in BoxC extent);

long createPotentialGrid(out RGIS::Geo::GridC resultGrid, in PntC destinationPt, in BoxC

extent);

long createPotentialGridByGrid(out RGIS::Geo::GridC resultGrid,

in RGIS::Geo::GridC costGrid, in RGIS::Geo::GridC obstacleGrid, in PntC

destinationPt);

long getNetworkRoute(out RGIS::Geo::LineStringC resultNodes, in PntC fromPt, in PntC

toPt);

long getShortestPathFromGrid(out RGIS::Geo::LineStringC routeOut,

in RGIS::Geo::GridC potentialGrid, in PntC fromPt);

RGIS::RTComp::RouteServiceInfoC getRouteServiceInfo();

void setRouteServiceInfo(in RGIS::RTComp::RouteServiceInfoC info);

};

interface TrackLogService{

boolean saveLocation(in LocationC loc);

};

interface PlottingService{

boolean saveObjectLocation(in string layerName, in LocationC loc);

};

};

};

#endif

RgisGeo.idl #ifndef _RGIS_GEO_IDL

#define _RGIS_GEO_IDL

#include "RgisCommon.idl"

module RGIS{

module Geo{

struct AttributeC{ //属性情報

string name; //属性名

any value; //属性値

Page 48: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

ValueTypeC::Code valType; //属性のデータ型

};

interface GeometryTypeC{ //地物形状の種別

enum Code{

rgisGeomUnknown, //不明

rgisGeomPoint, //ポイント(点)

rgisGeomLineString, //ライン(線)

rgisGeomPolygon, //ポリゴン(面)

rgisGeomMultiPoint, //マルチポイント

rgisGeomMultiLine, //マルチライン

rgisGeomMultiPolygon, //マルチポリゴン

rgisGeomGeometryCollection //集合

};

};

typedef PntC PointC; //形状(点)

typedef sequence<PointC> LineStringC; //形状(線)

typedef sequence<LineStringC> PolygonC; //形状(面)

typedef sequence<PointC> MultiPointC; //形状(点群)

typedef sequence<LineStringC> MultiLineC; //形状(線群)

typedef sequence<PolygonC> MultiPolygonC; //形状(面群)

union GeometryDataC switch (GeometryTypeC::Code) { //形状

case GeometryTypeC::rgisGeomPoint:

PointC point;

case GeometryTypeC::rgisGeomLineString:

LineStringC linestring;

case GeometryTypeC::rgisGeomPolygon:

PolygonC polygon;

case GeometryTypeC::rgisGeomMultiPoint:

MultiPointC multi_point;

case GeometryTypeC::rgisGeomMultiLine:

MultiLineC multi_line;

case GeometryTypeC::rgisGeomMultiPolygon:

MultiPolygonC multi_polygon;

};

struct GeometryC{ //空間図形

GeometryDataC geomData; //形状

CrsInfoC crsInfo; //空間参照系

};

struct FeatureC{ //フィーチャ

GeometryC geometry; //空間図形

sequence<AttributeC> attrs; //属性情報

};

typedef sequence<FeatureC> FeaturesC; //フィーチャ群

struct GridInfoC{ //グリッド設定情報

long numCellsW; //横方向のセル数

long numCellsH; //縦方向のセル数

long numBands; //バンド数(=1にしてください)

ValueTypeC::Code valType; //セル値の型

double noDataVal; //NoData値

boolean useNoData; //NoData値を使うかどうか

Page 49: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

double valScale; //値のスケール(=1にしてください)

double cellWidth; //セル 1つの幅

double cellHeight; //セル 1つの高さ

PntC position; //グリッド左上の位置座標

RotationC rotation; //グリッドの回転(=0にしてください)

CrsInfoC crsInfo; //空間参照系

};

struct GridC{ //グリッド

GridInfoC info; //グリッド設定情報

sequence<octet> data; //グリッドデータ

};

interface SpatialDataTypeC{ //空間データの種類

enum Code{

rgisSpatialDataUnknown, //不明

rgisSpatialDataFeature, //フィーチャデータ

rgisSpatialDataRaster //ラスタデータ

};

};

struct DataSourceInfoC{ //データソース情報

string name; //名称(DBの場合はテーブル名)

string source; //データソースの場所(ファイルパス,DB接続文字列)

string option; //データソース接続時のオプション

string sourceType; //データソースの種類(GDAL/OGR のデータフォーマットコード)

SpatialDataTypeC::Code spatialDataType; //空間データの種類

boolean updatable; //更新可能かどうか

RGIS::DB::FieldInfosC fields; //属性フィールド情報

};

struct FeatureDataSourceInfoC{ //フィーチャデータソース情報

DataSourceInfoC basicInfo; //基本情報

string geometryType; //形状の種類

boolean hasZ; //Z 値を持つかどうか

};

struct RasterDataSourceInfoC{ //ラスタデータソース情報

DataSourceInfoC basicInfo; //基本情報

GridInfoC gridInfo; //グリッド設定情報

};

struct LayerInfoC{ //空間レイヤ情報

long index; //レイヤの順番

string name; //名称

long layerType; //レイヤの種類(0:不明,1:ポイント,2:ライン,3:ポリゴン,4:ラスタ)

string attributeFilter; //属性情報でフィルタリングする際の文字列

any dataSourceInfo; //データソース情報

CrsInfoC crsInfo; //レイヤの空間参照系

long openMode; //データソースをどこで開くか(0:未定,1:クライアント側,2:サーバ側)

};

struct MapInfoC{ //マップ情報

string name; //名称

sequence<LayerInfoC> layerInfos; //空間レイヤ情報群

BoxC extent; //デフォルトのマップ範囲

CrsInfoC crsInfo; //マップの空間参照系

};

struct GeoProjectC{ //プロジェクト情報

MapInfoC mapInfo; //マップ情報

};

Page 50: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

};

};

#endif

-------------以前の内容 begin --------------- GIS の各種処理サービスを提供する RTC です.GIS データからポテンシャルグリッド

を生成したり,最小コスト経路を求めたりします.RgisOperator 設定ファイルで,GIS データの格納先や経路探索パラメータを設定します.RTC のコンフィギュレーションで

一時ディレクトリを設定すれば,ポテンシャルグリッド生成の際に作成される障害物グリ

ッドやコストグリッドを GeoTIFF ファイルとして保存できます.

表 Functions of RgisOperator RTC 空間情報提供 地図情報ベクトルデータをロボットに提供する機能.地図情報グ

リッドデータをロボットに提供する機能 空間情報更新 地図情報ベクトルデータをデータベースに登録する機能.ロボッ

トの位置情報をデータベースに登録する機能 空間情報処理 地図情報ベクトルデータから地図情報グリッドデータを生成する

機能.座標変換・換算機能.現在地・目的地間のポテンシャルグ

リッドマップを生成する機能.経路ネットワークデータから経路

を求める機能.

-----------------end-------------------------------

Page 51: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

3.2 R-GIS ミニ RTC 【PositionFromTo】 出発地と目的地の座標を送出するためのサンプル RTC です.座標入力用の GUI を表

示します.出発地の座標を GUI の fromX, fromY に,目的地の座標を toX, toY に入力し

てください. [OutPort]fromToPos [型]RTC.TimedDoubleSeq(data = [fromX, fromY, toX, toY]) GUI の OK ボタンを押すと,出発地と目的地の座標を出力します. [InPort]message [型]RTC.TimedString メッセージ文字列を受信し,コンソールに表示します. 【RoutePlannerTest】 出発地・目的地の座標を受信し,ポテンシャルグリッドの生成と最小コスト経路探索サ

ービスをテストするためのサンプル RTC です.後述のコンフィグによって,ポテンシャ

ルグリッドを GeoTIFF ファイルに,経路座標を CSV ファイルに保存できます. [InPort]fromToPos [型]RTC.TimedDoubleSeq(data = [fromX, fromY, toX, toY]) 出発地(fromX, fromY)と目的地(toX, toY)の座標を受け取ります. [OutPort]message [型]RTC.TimedString 処理結果などを通知します [OutPort]routeGrid [型]RGIS.Geo.GridC 結果として受け取ったポテンシャルグリッドを出力します.また,コンフィギュ

レーションで指定した場所に GeoTIFF ファイルとして保存します. [OutPort]routeLine [型]RGIS.Geo.LineStringC 結果として受け取った経路データを出力します.また,コンフィギュレーション

で指定した場所に csv ファイルとして保存します. 3.3 実習のための各種設定の変更と実行

Page 52: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RgisOperator 設定ファイルの変更: ¥rtc¥rgis_project.xml で,RgisOperator の経路探索パラメータや GIS データの設定

を行います.このファイルは RgisOperator が Activate されたときに読み込まれます. rgis:routeService の設定: rgis:bufferSize(0<=x) 障害物に近づかないための緩衝帯のサイズを設定します.サンプルファイルのデフォル

ト値は 0.4(メートル)です. 0 にすると,緩衝帯を生成しません. rgis:cellSize(0<) グリッド内の1セルの大きさを設定します.縦横同じサイズになります.サンプルファ

イルのデフォルト値は 0.2(メートル)です.0 にはしないでください. rgis:routeTolerance(0<=x) 経路点の間隔を,指定した値(メートル)以上になるように広げます.経路の細かいジ

グザグが解消されますが,単純化しすぎると経路が障害物にぶつかる恐れもあります.ご

注意下さい.なお,0 の場合は間隔を広げません. rgis: withObstacleThickening(0 or 1) 0:物体の形状をそのままで処理します.グリッド処理時間が短縮されます.セルサイ

ズと比べて小さい・細い物体が障害物グリッドに反映されない恐れがあります. 1:セルサイズと比べて小さい・細い物体を確実に障害物グリッドに反映できるように,

物体の形状に少し厚みを持たせます.処理時間が数秒~10 数秒かかるようになります. rgis:layer の設定: rgis:dataSource/rgis:source(GIS データの格納先) 必要に応じてシェープファイル(.shp)のパスを書き換えてください. RTC コンフィグファイルの変更: RgisOperator 設定ファイルの場所や一時データ出力先を RTC のコンフィギュレーシ

ョンファイル(コンフィグファイル)に記述しておくと便利です.必要に応じてそれぞれ

のパスを書き換えてください. ¥rtc¥RoutePlannerTest¥RoutePlannerTest.conf(パス書式:¥) PotentialGridFilePath ポテンシャルグリッド(.tif ファイル)の出力先の絶対パス 例)C:¥temp¥RoutePlannerTest.tif RouteResultFilePath 経路座標データ(.csv)の出力先の絶対パス

Page 53: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

例)C:¥temp¥RoutePlannerTest.csv ¥rtc¥RgisOperator¥RgisOperator.conf(パス書式:¥¥) ProjectFilePath RgisOperator 設定ファイル(.xml)の絶対パス 例)C:¥¥Rgis¥¥rtc¥¥rgis_project.xml TemporalDirectory ポテンシャルグリッド生成の際に障害物グリッドなどの内部 生成データをファイルに出力したい場合は,その格納ディレクトリを指定. 出力したくない場合は none と記述しておきます. 例)C:¥¥temp¥¥ サンプル RTC 群起動ファイル(run.bat)の変更: OpenCV と FWTools の イ ン ス ト ー ル 先 に 応 じ て , FWTOOLS_PATH と

OPENCV_PATH のパスを書き換えてください. set FWTOOLS_PATH=C:¥Program Files¥FWTools2.4.3 set OPENCV_PATH=C:¥Program Files¥OpenCV 【RTC 起動手順】 1. ネーミングサービスを起動します.rtc.conf を環境に合わせて設定しておきます. 2. ¥rtc¥run.bat を実行します. 3. RTSystemEditor などで下図のようにポートを接続します. 4. RgisOperator RTC や RoutePlannerTest RTC のコンフィギュレーションセット

"sim3" を選択します. 5. 全コンポーネントを Activate します. 6. PositionFromTo のフォームに座標を入力して OK ボタンを押します.(設定によっ

ては処理完了まで 5 秒前後かかります) 座標値は,前述のサンプル GIS データ図中

に記載した範囲内にしてください. 7. 経路探索が成功なら[OK],失敗なら[Error]が PositionFromTo RTC のコンソールに

表示されます.ポテンシャルグリッドの GeoTIFF ファイルや経路の csv ファイルが

正しく出力されているか確認してください. 【サンプル RTC 実行例(デフォルト設定で)】

1. 元の GIS データ 2. 障害物グリッド(厚み有) ObstacleGridTest0.tif 3. コストグリッド CostGridTest0.tif 4. ソースグリッド(バッファ有) SourceGridTest0.tif 5. ポテンシャルグリッド AccCostGridTest0.tif RoutePlannerTest.tif

Page 54: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

6. 経路探索結果 RoutePlannerTest.csv 7. 経路線元データと重ねてみたもの 8. 拡大図 経路の単純化なし

[RouteService 設定] 出発地 (x=16905, y=-34540) 目的地 (x=16913, y=-34581) cellSize = 0.2 bufferSize = 0.4 routeTolerance = 0 withObstacleThickening = 1

Page 55: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 4 章 R-GIS クライアント 4.0 MapManagement RTC

概要: R-GIS のロボット側クライアントモジュール. 特徴: • R-GIS のサーバモジュールである RgisOperatorRTC とロボットの各モジュールを接

続し,環境情報のやりとりを行う. • ロボットの各モジュールからのリクエストに応じて,RgisOperatorRTC からポテン

シャルグリッドマップを取得・提供する. • ロボットの各モジュールからのリクエストに応じて,RgisOperatorRTC からウォー

ルグリッドマップを取得・提供する. • ロボットが推定した自己位置姿勢情報を RgisOperatorRTC に提供する. インターフェイス: データポート

ポート名 種類 型名 説明

RobotPositionIn IN TimedLocalizationData ロボットが推測した自己位置姿勢情報

Page 56: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

サービスポート サービス名 種類 説明

MapManagementService Provider ポテンシャルグリッドマップおよびウォールグリッドマップ

の提供

MapService Consumer RgisOperatorRTC からの地図情報の取得(未利用)

RouteService Consumer RgisOperatorRTC からの経路情報の取得

TrackLogService Consumer RgisOperatorRTC にロボットの位置姿勢情報を提供

必要システム構成 当該モジュール

図 MapManagement RTC の接続例

動作内容: • ポテンシャルグリッドマップの提供 • ポテンシャルグリッドマップの要求を受理 • RgisOperatorRTC にポテンシャルグリッドマップを要求 • 生成されたポテンシャルグリッドマップを要求元モジュールに提供 • ウォールグリッドマップの提供 • ウォールグリッドマップの要求を受理 • RgisOperatorRTC が 扱 う 最 大 範 囲 の ポ テ ン シ ャ ル グ リ ッ ド マ ッ プ を

RgisOperatorRTC に要求

Page 57: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

• ポテンシャルグリッドマップからウォールグリッドマップを生成(なお,ここで生成

したウォールグリッドマップを保存しておき,2回目以降の要求にはこれを用いる) • 必要な範囲のウォールグリッドマップを切り出し,要求元モジュールに提供

(注)現時点の RgisOperatorRTC にはウォールグリッドマップを生成する機能が

ないため,本モジュールでポテンシャルグリッドマップからウォールグリッドマッ

プを生成する • ロボットの位置姿勢情報の提供 • ロボットが推定した位置姿勢情報を受信 • あらかじめ決められた周期で RgisOperatorRTC にロボットの位置姿勢情報を提供

Page 58: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

地図管理モジュール MapManagement RTC は,R-GIS クライアントであり,移動ロ

ボットが,R-GIS に接続し,処理の要求や結果を受信するためのインタフェースモジュー

ルです.主な機能としては,目的地に応じたポテンシャルグリッドマップや各種空間情報

を取得する空間情報受信機能,ロボットの自己位置や位置情報を持つセンサデータを提供

する空間情報送信機能の2種類となっています.実際には,個々の移動ロボットの RTCを含むシステム構成に応じて,個別に再設計することで,R-GIS に接続することができる

ようになります. 次節では,この「個別に再設計」という部分も含めて,実際に R-GIS RTC 群を使う方

法について説明していきます.

Page 59: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

LocalizationData.idl

コンフィグレーション パラメータ 型 デフォルト 説明 EXTENTION_SIZE double 5 Extension Size for potential grid

module ISIT

{

module Localization

{

struct LocalizationData

{

string crs; // 座標参照系(epsg code / original code)

double x; // x[m]

double y; // y[m]

double z; // z[m]

double pitch; // pitch 角[rad]

double roll; // roll 角[rad]

double yaw; // yaw 角[rad]

};

struct TimedLocalizationData

{

RTC::Time time; // 位置・姿勢データの時刻

LocalizationData data;

};

};

};

Page 60: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

4.1 LEGO NXT 移動機能とセンサ機能

4.1.1 RgisNXT LEGO NXT で動かすプログラムです.これは RTC ではありません.モーターコントロ

ール、ソニックセンサ、タコセンサの3つのスレッドが NXT で動きます.このプログラ

ムは, Bluetooth で通信を行い,RgisLegoManager と通信を行います.サーバであるパ

ソコンでコンパイルを行い,LEGO へプログラムを転送します. 付属のコンパイル済みファイルを以下の方法で転送します. nxj LegoNXT 転送後,LEGO 側でプログラムを実行させます.Files -> LegoNXT.nxj を指定 -> Set

as Default に設定します.その後 , Run Default でボタンを押すと,自動的に LegoNXT.nxj が起動します.

RTC 群を deactivate した場合,RgisNXT を LEGO 側で再起動する必要があります.

NXT 本体のキャンセルボタンを押し,プログラムを終了後,再度,LegoNXT を起動して

下さい.RgisLegoManager と一度,接続をしない限り,プログラムのキャンセルボタン

を押しても,プログラムが終了しません.間違ってプログラムを起動した場合は,電池を

抜くか RgisLegoManager を一度,activate を行って,プログラムを終了させて下さい. LEGO 本体のディスプレーには,MotorControler からの指示値(MotorA と MotorC

Page 61: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

の角速度)が表示されます. 4.1.2 RgisLegoManager

LEGO NXT 上で実行をしている RgisNXT と通信を行う RTC です.モータ制御やソニ

ックセンサ情報の取得を行うコンポーネントです.入力は,左右車輪の目標累積回転角度,

目標角速度,出力は,左右車輪の累積回転角度,超音波センサ値です. データ入力ポート ポート名 型 説明 rotatoTo TimedLongSeq[4] [0]:MotorA の回転角速度(degree/sec)[0~900]

[1]:MotorA の累積回転角度(degree) [2]: MotorC の回転角速度(degree/sec)[0~900] [3]:MotorC の累積回転角度(degree)

motorSpeed TimedLongSeq[2] [0]:MotorA の回転角速度(degree/sec) [-900~900] [1]:MotorA の回転角速度(degree/sec) [-900~900]

但し,[0]と[2]の値を同時に「0」に設定するとモータがストップする. データ出力ポート ポート名 型 説明 wheelStatus TimedLongSeq[2] [0] : MotorA の累積回転角度(degree)

[1] : MotorC の累積回転角度(degree) sonarDatta TimedLongSeq[1] [0] : 超音波センサ値[cm](255:障害物なし)

Page 62: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

4.2 GIS と接続する移動ロボットシステム 4.2.1 ActionPlanning 概要: ロボットの行動管理 特徴: ロボットユーザから指示されたシナリオにしたがって,ロボットの次の行動を決定する. インターフェイス: サービスポート

サービス名 種類 説明

ActionRequestService Provider ユーザからの行動指示(現在は移動のみ)の受領

ActionReportService Consumer 指示された行動の終了を通知

GlobalPathPlanningService Consumer ユーザからの移動指示を通知

ArrivalNotificationgService Provider 指示した移動の終了通知を受領

動作内容: • ActionRequestServicePort でロボットの行動に関する指示を受領(現時点では移動の

みに対応) • 行動を実現するためのシナリオ(状態遷移グラフとしてあらかじめ作成・保持)にし

たがって,GlobalPathPlanningServicePort に移動を指示 • ArrivalNotificationPort で移動の終了を受領 • 2~3 を繰り返し,指示された行動が終了(=最終目的地に到着)したら,

ActionReportService に行動終了を通知 4.2.2 GlobalPathPlanning 概要: ロボットの大域的な移動管理. 特徴: 指示された最終目的地に移動するために,適切な中間目的地を設定し,そこへの移動指示

を繰り返す.局所的な移動管理を行う RTC(例えば,LocalPathPlanning RTC など)へ

の中間目的地の指令を出すことを目的としており,中間目的地の設定方法は,ユーザに委

ねられる.このため,本 RTC は,現時点では,中間目的地を設定することはできず,い

きなり最終目的地への移動指示を出す. データ入力ポート ポート名 型 説明

Page 63: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

RobotPosition TimedLocalizationData ロボットが推測した自己位置姿勢情報 サービスポート サービス名 種類 説明 GlobalPathPlanningService Provider ユーザからの移動指示通知を受領 LocalArrivalNotificationService Provider 指示した中間目的地への移動終了通知を

受領

ArrivalNotificationService Consumer 指示された移動の終了を通知 LocalPathPlanningService Consumer 中間目的地への移動を指示

MapManagementService Consumer 中間目的地へのポテンシャルグリッドマ

ップを取得

動作内容: • GlobalPathPlanningServicePort でロボットの移動に関する指示(最終目的地)を受

領 • MapManagementService から現在地から最終目的地までのポテンシャルグリッドマ

ップを取得 • LocalPathPlanningService にポテンシャルグリッドマップを出力することで,最終

目的地までの移動を指示 • LocalArrivalNotificationService で最終目的地までの移動の終了通知を受領 • ArrivalNotificationService に移動終了を通知

Page 64: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

4.2.3 LocalPathPlanning

GlobalPathPlanning からポテンシャルグリッドマップを受け取り、ロボットの位置姿勢

情報から、サブゴールを算出します.正面 120 度の範囲にサブゴールがあれば,サブゴ

ール座標値をそのまま出力しますが,それ以外の範囲にサブゴールがあった場合,

(SUGGOAL_MOVING_RANGE*cellSize, 0)のサブゴール座標値を出力します.cellSize は,

RgisOperator の初期設定ファイルである xml に記述されています.また,コンフィグレ

ーションのパラメータ SUBGOAL_MOVING_RANGE と SUBGOAL_SEARCH_RANGE

は変更する場合は,同じ値にすると良いでしょう.

正面120度サブゴールへ

X

Y

その場,回転

(SUBGOAL_MOVING_RANGE*cellSize, SUBGOAL_MOVING_RANGE*cellSize)(SUBGOAL_SEARCH_RANGE*cellSize, SUBGOAL_SEARCH_RANGE*cellSize)

(-SUBGOAL_MOVING_RANGE*cellSize, -SUBGOAL_MOVING_RANGE*cellSize)

(-SUBGOAL_SEARCH_RANGE*cellSize,-SUBGOAL_SEARCH_RANGE*cellSize)

0

コンフィグレーション パラメータ 型 デフォルト 説明 GOAL_IN_DISTANCE_TH double 0.1 ゴールしたと判定する正方形の範

囲(単位:m) GOAL_TIME int 0 デバッグ用で強制的にゴールした

と判定を下すまでの時間(単位:

繰り返し数) SUBGOAL_MOVING_RANGE int 20 次のサブゴールを提示する範囲

(単位:セル数)

Page 65: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

SUBGOAL_SEARCH_RANGE int 20 サブゴールを探す範囲 正方形の1辺のセル数

データ入力ポート ポート名 型 説明 TimedObstacleInfomation TimedDoubleSeq センサが取得した障害物情報 RobotPosition TimedLocalizationData ロボットが推測した自己位置姿

勢情報 データ出力ポート ポート名 型 説明 SubGoal TimedDoulbleSeq [0]:x 座標[m]

[1]:y 座標[m] Service Port サービス名 種類 説明 LocalPathPlanningService Provider 中間目的地への移動を指示 LocalArrivalNotificationService Consumer 指示した中間目的地への移動終了通

知を受領 4.2.4 LegoController R-GIS ミニ RTC の PositionFromTo RTC に相当し,LEGO 実験環境で,移動ロボッ

トサンプル RTC 群を制御する(スタートさせる)RTC です.初期値と目的地を入力し,

[START]ボタンを押すと,レゴが目的地に向かって動きます. [RESET]を押すとレゴが

止まります.座標系は,RgisOperator で指定された平面直角座標を使用し,その座標の

上方向を Z 軸の正とする.Z 軸周りの回転を YAW 角とし,右ネジの方向(反時計回りの

方向)を正としています.初期値に入れる YAW 角は,-180~180 度の範囲で入力をして

下さい. LegoController は,SelfLocalization へ LEGO の初期位置を登録し,ActionPlanning との間で,ゴール座標の設定及びゴール判定を行っています. ServicePort サービス名 種類 説明 ActionRequestService Provider String 型

・Goto+座標系+ゴール X 座標(double)+ゴール Y 座

標(double)+ゴール Z 座標(double) 例)Goto LEGODEMO 1.40 1.40 0.0

Page 66: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

・Stop 例)Stop

ActionReportService Consumer String 型 例)WaitForGoto

InitialPositionService Provider TimedLocalizationData 目的地に到達した場合,ActionPlanning から「WatiForGoto」の文字列が送られてくる. データ入力ポート ポート名 型 説明 robot_position TimedLocalizationData ロボットが推測した自己位置姿勢情報

図 レゴコントローラ 4.2.4 MotorControl

LocalPathPlanning からサブゴール座標値を貰い,その地点へ向かうようにレゴを制御

します.サブゴールは,レゴローカル座標系になります.

Page 67: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 レゴローカル座標系

このコンポーネントは,サブゴールを仮想的なターゲットとし、そのターゲットを追尾

する制御を取り入れています. 参照 URL(仮想的なターゲット追尾)

http://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/robotics/wheelrobot.html#BVNX0F0mCHN8fB

サブゴールが正面120度の範囲にある場合は,サブゴールに向かって進みます.それ

以外の角度にサブゴールがある場合は,その場回転を行い,正面120度の範囲に入った

時点でサブゴールに向かって進みます.この120度の値は,LocalPathPlanning で指定

されています.

正面120度サブゴールへ

X

Y

その場,回転

(SUBGOAL_MOVING_RANGE*cellSize, SUBGOAL_MOVING_RANGE*cellSize)(SUBGOAL_SEARCH_RANGE*cellSize, SUBGOAL_SEARCH_RANGE*cellSize)

(-SUBGOAL_MOVING_RANGE*cellSize, -SUBGOAL_MOVING_RANGE*cellSize)

(-SUBGOAL_SEARCH_RANGE*cellSize,-SUBGOAL_SEARCH_RANGE*cellSize)

0

Page 68: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

θTLT

VR = V +ΔV VL = V –ΔV V = KV・LT ΔV = KT・θT LT = (ターゲットまでの距離) θT = (ターゲットとの角度)

コンフィグレーション パラメータ 型 デフォルト 説明 Kt int 38 回転半径パラメータ Kv int 350 スピードパラメータ MaxSpeed int 150 (degree/sec) 最大直進角速度 RotateSpeed int 60(degree/sec) 回転角速度 データ入力ポート ポート名 型 説明 subgoal TimedLocalizationData ロボットが推測した自己位置姿勢情報 データ出力ポート ポート名 型 説明 motorSpeed TimedLongSeq [0]:MotorA のスピード(degree/sec)

[1]:MotorC のスピード(degree/sec) 4.2.5 SelfLocalization

Page 69: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

左右の累積回転角度から自己位置を推定します.この処理は,OpenINVENT-4.0.0 の

Odometry を参考にして作成されています.

コンフィグレーション パラメータ 型 デフォルト 説明 WheelDistance double 0.1134(m) 車輪間隔 WheelDiameter double 0.056(m) タイヤの直径 データ入力ポート ポート名 型 説明 wheelStatus TimedLongSeq [0]:MotorA の累積回転角度(degree)

[1]:MotorC の累積回転角度(degree) データ出力ポート ポート名 型 説明 robot_position TimedLocalizationData ロボットが推測した自己位置姿勢情報 Service Port サービス名 種類 説明 InitialPositionService Consumer TimedLocalizationData 4.2.6 ObstacleDetection 未実装 データポート ポート名 型 説明 sonarDatta TimedLongSeq[1] [0] : 超音波センサ値[cm](255:障害物なし) データ出力ポート ポート名 型 説明 DirectionVector TimedDoubleSeq[]

Page 70: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 5 章 R-GIS 用の地図編集 5.1 フリーの GIS ソフト 本書では,地図データの作成及び編集にフリーの GIS ソフト,Quantum GIS を使用し

ます(http://www.qgis.org/).使用したバージョンは,1.4.0 Enceladus (Windows - Standalone / QGIS-1.4.0-1-No-GrassSetup.exe)です.ホームページからソフトをダウン

ロードし,インストールを行って下さい.メニュー類は日本語化されています. 新しく Quantum GIS 1.6.0 が公開されました.1.4.0 ではなく,1.6.0 の Standalone

Installer 版をインストールして下さい.基本操作は,1.4.0 と同じです.

図 QUANTUM GIS 1.5 インストール・オプション

そ れ で は , 添 付 の “lego.qgs” を 開 い て み ま し ょ う

(C:¥Rgis¥RgisOperatorTest20090924¥lego¥lego.qgs).この地図データには,障害物デ

ータ(Wall)とコストデータ(Cost)がレイヤに存在します.障害物データは,ロボットが物

理的に通れない壁や物などを指します.コストデータは,ロボットを出来るだけ通行させ

たくない場所を指定します.但し,現時点で,コストデータの中身は空です.もし,

lego.qgs のファイルが正常に開くことができなかった場合,「レイヤ」→「ベクタレイヤ

の追加」でソースタイプ(ファイル),エンコーディング(System)で,「ブラウズ」ボタ

ンを押し,C:¥Rgis¥RgisOperatorTest20090924¥lego の Cost.shp と Wall.shp を選択

し,オープンして下さい.

Page 71: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 leog.qgs

座標系は,本来は公共座標を用いますが,今回は便宜上,1)室内で扱う.2)原点の

座標がサンプル地図上の分かりやすい位置にあると嬉しい3)方位を任意の向きに設定し

たい等の理由で,任意の座標系に設定しました.この場合でも,地図データには座標系の

指定は必要ですので,以下の通りに設定しています. 座標系:JGD2000 / Japan Plane Rectangular CS II (EPSG:2444) GIS では東西方向を X 軸,南北方向を Y 軸で表します.サンプル地図に X 軸,Y 軸,

原点などを便宜上書き込んだものが下図です.サンプル地図では,壁の内側の左下の角を

原点(0, 0)とし,右上の角の内側を(4, 3)としました(単位:m).また,壁で囲まれた内側

に長方形のオブジェを2個,配置しています.

Page 72: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 LEGO 用サンプル GIS データ

地図のレイヤにある障害物データとコストデータは,シェープファイル(ベクタデー

タ)で記述されています.それぞれ,ポリゴン形式のデータになっています.このサンプ

ル地図を編集してみましょう. 主に使用するモードは,3つです. 1)新規に Wall や Cost(ポリゴン)を作成する(ポリゴンを入力) 2)Wall や Cost(ポリゴン)を移動する(地物を移動する) 3)Wall や Cost(ポリゴン)の形を修正する(ノードツール) まず,レイヤの Wall を選択し,編集モード変更(鉛筆印,赤枠で表示)をクリックし

ます.

Page 73: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 編集モード

新規に障害物を作成した場合,そのポリゴンに識別子である ID を付けます.重複しな

いように正の値の整数で番号を割り振って下さい.編集モードを終了すると,「Wall レイ

ヤの変更を保存しますか?」という確認が出ますので,変更を破棄しない限り,必ず「保

存」をして下さい.RgisOperator では,Wall と Cost のシェープファイルのみを使用し

ます(lego_project.xml に記載). 詳しい使い方は,QuantumGIS ホームページからマニュアルをダウンロードして,参照

をして下さい.

Page 74: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

5.2 QuantumGIS と R-GIS ミニ RTC を用いた練習 先程のサンプル地図に含まれる2つのシェープファイル(Wall, Cost)を使用し,R-GISミニ RTC を用いてテストをしてみましょう.レゴのサイズは小さいため,パラメータを

調整します(bodySize, bufferSize, cellSize). 添付ファイル lego_projext.xml の一部です.

PostitionFromTo を用いて,スタート座標(0.3, 0.7)からゴール座標(1.4, 1.8)へ移動す

るようにして見ましょう. ・使用する3つのコンポーネント -C:¥Rgis¥RgisOperatorTest20090924¥rtc

¥RoutePlannerTest¥PositionFromToComp.py ¥RoutePlannerTestComp.py ¥run.bat

です.まず,ネームサーバー(rtm-namijng.py)を起動し,そして,上記3つのファイルを

ダブルクリックで,起動させます.エクリプセを立ち上げ,SystemEditor で配線を行い,

activate して下さい.

<rgis:robotInfo rgis:id="Robot01" rgis:name="robo"> <rgis:bodySize>0.2</rgis:bodySize> </rgis:robotInfo> <rgis:routeService> <rgis:obstacleLayerName>Wall, Cost</rgis:obstacleLayerName> <rgis:costLayerName>Cost</rgis:costLayerName> <rgis:costFieldName>Cost</rgis:costFieldName> <rgis:bufferSize>0.15</rgis:bufferSize> <rgis:cellSize>0.01</rgis:cellSize> <rgis:routeTolerance>0</rgis:routeTolerance> <rgis:withObstacleThickening>0</rgis:withObstacleThickening> </rgis:routeService>

Page 75: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 コンフィグレーションは,lego を使用する

図 QuantumGIS と R-GIS ミニ RTC を用いた例

デフォルトでは,C:¥Rgis¥RgisOperatorTest20090924¥tempTC に,以下の2つのフ

ァイルが出来ます.一つが座標情報や投影法が埋め込まれた GeoTIFF 形式のファイルと

ルート座標が書かれた CSV ファイルです. RoutePlannerTest.tif RoutePlannerTest.csv この結果を QuantumGIS に表示させてみましょう.新しくできた GeoTIFF 画像を図のよ

うにラスタレイヤの追加で指定します.

Page 76: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 ラスタレイヤの追加

そして,レイヤに追加された RoutePlannerTest を右クリックまたはダブルクリックで,

プロパティを開きます.そして,シンボルの中にあるシングルバンドのプロパティの中に

ある「カラーマップ」を“原色”に,「標準偏差を使用」を“0.7”ぐらいの値に設定する

と,グリッドマップが表示されます.

Page 77: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 RoutePlannerTest.tif の結果

次に,RoutePlannerTest.csv を表示させてみましょう.これは,カンマ区切りで,idx

(識別子),x 座標,y 座標,z 座標(単位:m)で表される経路データの座標値が記述さ

れたファイルです.この CSV データを表示させるためには,QuantumGIS に新たにプラ

グインを使えるようにする必要があります.そのプラグインは,「デリミテッドテキスト

レイヤを追加する」です.プラグインマネージャで,以下の図の通りに設定を行って下さ

い.

Page 78: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 プラグインの設定

Page 79: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

それでは,デリミティッドテキストレイヤの追加で,CSV データを表示させてみましょう.

先程の,RoutePlannerTest.csv を指定し,区切り文字を「,」,X フィールドを「x」,Yフィールドを「y」に指定し,最後に「OK」を押して下さい.

図 RoutePlannerTest.csv の読み込み画面

Page 80: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 RoutePlannerTest.tif の結果

次に,コストレイヤに新たにポリゴンデータを追加してみましょう.このポリゴンデー

タは,ロボットをできるだけで通行させたくない場所に設置します.鉛筆印の「編集モー

ド」をクリックし,「ポリゴンを入力」をクリックします.マウスの左クリックで,ポリ

ゴンを作成し,再生終了後に,右クリックします.そうすると,属性を指定するウィンド

ウが表示されますので,ID(正の int 型)と Cost(正の int 型で 1~254 までの値)を指定しま

す.Cost の値が大きくなるほど,そのポリゴン範囲は,ロボットが通りにくくなります.

ポリゴンの追加が終わったら,最初にクリックした鉛筆印の「編集モード」をクリックし

て,編集を終了します.この時,レイヤの変更を保存して下さい.

Page 81: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 コストレイヤの編集

図 ポリゴンを入力

Page 82: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 属性の指定

Page 83: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 地物の削除方法

Page 84: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

それでは,新しくコストデータを追加した状態で,もう一度,RgisOperator で経路情報

を作成してみましょう.全てのコンポーネントを deactive し,再度,activate しましょ

う.activate 毎に,lego_project.xml がリロードされ,レイヤ情報も更新されます.

activate 後に,PositionFromTo の「OK」を押し,新たな経路データを作成します.そし

て,RoutePlannerTest.tif と RoutePlannerTest.csv を先程と同様に,レイヤに追加して

下さい.デフォルトでは,レイヤの透過率は,0%です.上手く表示されない場合は,レイ

ヤの並び順も確認して下さい. コストレイヤのポリゴンを配置した箇所を避けたルートが表示されました.このように

コストレイヤを上手に使うことで,ロボットが通る経路を変更することが可能となります.

図 cost 追加後

Page 85: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

また,コストの値は,下図のようにコストレイヤの属性テーブルを開き,編集モード

(属性テーブル・ウィンドウにある鉛筆印)にすると,値を変更できます.

図 属性テーブルの開き方

図 属性値の変更方法

Page 86: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第 6 章 レゴを動かしてみよう 6.1 起動方法

図 レゴ結線図

RTC は,Windows Visual C++ と java で作られています.添付のバッチファイルで起動

します. C:¥Rgis¥binary¥runall.bat をダブルクリックして下さい.そして,レゴ結線図を参考に結線をします.

Page 87: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 結線図

Page 88: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

結線が終われば,コンフィグレーションを変更します. RgisOperator config lego MapManagementRTC name value EXTENSION_SIZE 5 LocalPathPlanningRTC name value GOAL_IN_DISTANCE_TH 0.1 GOLA_TIME 0 SUBGOAL_MOVING_RANGE 18 SUBGOAL_SEARCH_RANGE 18 コンフィグレーションを変更後,activate し,問題がなければ,LEGO Contoroller で

初期値と目的地を入力して,[START] ボタンを押してみましょう.無事に動作すること

が確認できるでしょう.もし,レゴが暴走などで操作を止める時は,LEGO Controller の「STOP」を押し,その後,「RESE」を押すと停止します.

図 レゴコントローラ

Page 89: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

第6章 その他 6.1 拡張編 6.1.1 トータルステーションモジュールによる自己位置推定

トータルステーション(Total Station:TS)とは,レーザ測距儀と測角器を備えた測量

機器であり(図 7 左),全方位再帰性プリズムまでの距離と位置を計測することができま

す.TS RTC 群は,TOPCON 製 TS GPT-9000A シリーズを制御する RTC と,ロボット

位置計算用 RTC からなり,これにより,精密位置計測を実現しています(図 6).主な機

能としては, ロボット作業座標系または公共座標系での移動ロボットの位置計測を行う機能 任意のロボットの位置計測要求に応じ,そのロボットを探索し,位置計測を行う

機能 があります.この位置計測性能は,移動中のロボットの場合,誤差 10 [mm],ロボットが

静止状態であれば,誤差 0.2 ~ 1.0 [mm]で計測可能となっています.また,測定範囲は,

5 ~ 600 [m]です.このような特性から,このモジュールは,屋外環境で GPS を使用せ

ずにロボットの自己位置測定を行うことや,将来の測量ロボットでの使用を想定していま

す. 6.1.2 車いすロボット 現在,私たちは,実験用ロボットとして,車いす型の二輪駆動自律移動ロボットを使っ

Page 90: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

ています(図 7 右).制御システムも RTC 群で構成されており,MapManagement RTCを介して R-GIS を利用することができるようになっています(図 8).ロボットの位置座

標は,前述の TS モジュールを利用する場合,本体上部にプリズムを設置し,これを TSモジュールで追跡しつつ取得することになります.これとデッドレコニングで得られる情

報を合わせて,ロボットの自己位置・姿勢を推定することができるわけです.この他にも,

GPS や電子タグを用いた位置推定やパーティクルフィルタ等によるセンサ情報に基づく位

置推定モジュールも開発しています. 自動操縦と手動操縦の切り替えモードや,TS を用いた自己位置推定モジュールなどの

違いはありますが,第3章,第4章で説明したサンプルモジュールとほぼ同じ構成である

ことが分かると思います.

図 7 Wheelchair robot and Total station

Page 91: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 8 Wheelchair Robot RTCs

Page 92: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

6.1.3 実証実験例

R-GIS コンソーシアムでは,「ロボットタウンの実証的研究」でも用いた福岡市の埋立地

(アイランドシティ)内の中央公園(約 156,000 [m2])を R-GIS 実証実験フィールドと定

め,IC チップを内蔵したインテリジェント基準点[9]の設置や公園内部の詳細な GIS デー

タの構築など,環境整備と公開準備を進めています(図 9).この環境では,移動ロボット

は,R-GIS が提供する RTC 群および空間情報 DB を利用することで,環境情報を共有・享受

して動作することができるようになっています.ここでは,2009 年 9 月に実施した R-GIS

RTC の動作検証実験を紹介しましょう.

図 9 Intelligent control point and map

【座標系の設定とデータ準備】

実験では,R-GIS サーバは,空間情報と地図データを公共座標系で管理し,移動ロボッ

トは,ローカル空間の座標系(以下,ワールド座標系)で,動作計画や移動を行うことと

しました.この公共座標系とワールド座標系との相互変換は,次のようにして行われます.

公共座標系での座標が既知の点(例えば,図 9 のインテリジェント基準点)とロボット作

業座標系の原点および空間中の任意の 1 点を TS で計測し,それぞれのワールド座標系で

の位置と公共座標系での座標を求めます.これにより,公共座標系とワールド座標系の対

応付けが行われ,座標系の変換が可能となります.この変換に関する情報が,R-GIS に座

標の識別子と組にして登録され,座標変換が必要になったときに,随時利用されるわけで

す.

ロボット向け地図データとしては,進入できない領域を示す「障害物領域データ」や,

Page 93: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

通行できるが極力避けて通りたい領域を示した「移動コスト領域データ」を作成しました.

具体的には,園路の外側の植え込み等は障害物ポリゴンとして,園路の端や点字ブロック

などのロボットが通行しにくい,または避けた方が望ましい場所は,移動コストを高く設

定した移動コスト領域ポリゴンとして GISデータを作成しています.

【ロボット位置計測】

移動ロボットに設置された全方位再帰性プリズムを TS で追跡します.この情報とデッ

ドレコニングの情報を合わせたものを車いすの自己位置・姿勢情報として用いています.

なお,前述の準備により,ロボットが用いているワールド座標系での自己位置は,R-GIS

サーバ上では,公共座標系で管理されています

【ロボットの移動】

車いすロボットは,図 8 に示す RTC 群の構成により,自律と手動の 2 つの動作モードを

切り替えながら動作させます(図 10).ジョイスティックモジュール(Joystick RTC)は,

ジョイスティックの自律手動切替ボタンが押されたことを行動計画モジュール

(ActionPlanning RTC)に知らせるものです.この情報に基づき,行動計画モジュールが

ロボットの自律と手動の切り替えを行なうわけです.手動モードにおいては,ロボットは,

ジョイスティックの入力に応じて動作しますが,一方,自律モードでは,次のような流れ

でロボットを自律動作させています.

(a)ロボットの呼出し (b)GUIで目的地設定

(c)目的地まで自律移動 (d)手動操作

Page 94: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

(e) 任意の地点で乗り捨て (f)次の地点へ自律移動

図 10 R-GISによるタウンコミュータ実験

Step1: ロボット管理者は,R-GIS サーバに接続されたロボット管理用画面(図 11)上で,

目的地を指定します.指定された目的地の情報は,ユーザリクエスト管理モジュール

(UserRequestManager RTC)を経由し,行動計画モジュールに送られます.この際,目的

地の情報は,R-GIS の機能により,公共座標系からワールド座標系(ロボット作業座標

系)に自動的に変換され,ロボットに送られることになります.

Step.2: 行動計画モジュールは,送られてきた目的地の情報を大域経路計画モジュール

(Global Path Planning RTC)に送ります.大域経路計画モジュールは,経路計画に必要

な地図を地図情報管理モジュール(Map Management RTC)に要求します.地図情報管理モ

ジュールはこの要求を受け,R-GIS 機能モジュール(RgisOperator RTC)へ経路計画用グ

リッドマップを要求することになります.

Step.3: R-GIS 機能モジュールは,この要求に応じて,進入不可領域や傾斜などといった

空間 DB 中の GIS 情報に基づいてコスト計算を行い,図 12 に示すような経路計画用グリッ

ドマップ(ポテンシャルグリッドマップ)を生成します.生成されたグリッドマップは,

地図情報管理モジュールを介して,大域経路計画モジュールに送られ,自己位置情報を元

にした移動戦略を立てます.

Step.4: 移動戦略が局所経路計画モジュール(Local Path Planning RTC)に送られるこ

とで,モータの制御情報に変換され,ロボットが自律動作するわけです.なお,ロボット

の自己位置の情報は,地図情報管理モジュールを介して,R-GIS 機能モジュールに送るこ

とで,逐次,空間 DB に登録(ロギング)することができるのも一つの特徴になっていま

す.

Page 95: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 11 GUI

6.2 応用編 6.2.1 NEDO 知能化プロジェクトの他コンソの利用例 6.2.2 つくばチャレンジ 2009 を実例として 人々が生活している空間の中で,ロボットが確実に自律的に動き回って働くための技術

を競う「つくばチャレンジ」という競技会が 2007 年から,つくば市にて毎年開催されて

います.2009 年の大会では,つくば市中央公園を周回する 1 [km]強のコースを自律移動

する課題が設定され,日本全国から 72 チームが技術を結集したロボットで参戦しました. R-GIS コンソーシアムは,今回初出場の福岡大学フューチャービジョンチームと連携し,

「試走会に一度も実機で参加することなく,本番で完走する」を目標に,GIS を活用した

ロボット移動環境マップの作成や RgisOperator RTC による経路計画などの技術支援を行

いました[10].ロボット本体は,独立2輪駆動,センサは,GPS コンパス,ロータリエン

コーダ,LRF の 3 つのみであり,自律ナビゲーションと障害物回避を並列に実行し,移動

するものです(図 13).本走行では,コースアウトによるリタイアとなったものの,前日

のトライアル走行では,全チーム中9位の好タイムで通過するなど,今後の発展が期待で

きる成果を上げたと考えています. 今回のチャレンジでは,ロボット用の地図データ構築には,市販の GIS ソフトを使用し

ています.走行コースの平面図をトレースするところから始め,現地にて VRS-GPS を用

いた詳細な測量を行いつつ,地図の修正を繰り返しました(図 14).この地図データを基

に RgisOperator RTC によりグリッドマップを自動生成し,移動ロボットの経路計画に投

入しました.ロボットの動作戦略において,局所的な動作計画と大域的な動作計画とに分

け,GIS の技術を用いて実際のフィールドの地図データの修整を行い,移動ロボットに投

進入不可領域

ロボット位置

低コスト領域

高コスト領域

Page 96: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

入するという試みは,新しい GIS の利用分野の可能性が感じられるものでした.

(a)R-GIS 移動ロボットマッパーマッパー

(b)コース図および結果

図 13 つくばチャレンジ 2009

Page 97: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

図 14 つくば市中央公園データ

Page 98: R-GIS 入門 - fit.ac.jpkimuro/R-GIS/R-GIStextbook/R-GIStextbookVer2.pdf · r-gis 入門. r-gis rtコンポーネントで学ぶr-gis(ロボットgis) ver. 2.0 . 2010 年12 月7 日版

参考文献 [1] 長谷川: 環境プラットフォーム「ロボットタウン」 ",日本ロボット学会誌,vol.26,

no.5,pp.23-26,2008. [2] ``地理空間情報活用推進基本法'',http: //www.gsi.go.jp/ kihonhou.html, 2007. [3] 村上, 長谷川, 木室, 千田, 家永, 有田, 倉爪:``情報構造化環境における情報管理の一

手法'',日本ロボット学会誌,vol.26, no.2, pp.192-199, 2008. [4] 木室, 荒屋, 有田, 家永, 村上, 楊:"ロボット地理空間情報システム R-GIS" , 日本ロボ

ット学会誌, Vol.27, No.8, pp.868-876, 2009. [5] RT-Middleware: Distributed Component Middleware for RT (Robot Technology)",

International Conference on Intelligent Robots and Systems, pp.3555-3560, 2005. [6] "「次世代ロボットビジョン懇談会」報告書", 経済産業省, 2004. [7] "Welcome to the OGC R.Website", http: //www. opengeospatial. org/. [8] ``Robotic Localization Service'', http: //www.omg.org/ docs/robotics/ 08-05-02.pdf,

2008. [9] イ ン テ リ ジ ェ ン ト 基 準 点 仕 様 " , http: //www.mlit.go.jp/ seisakutokatsu/

jiritsu/siyousho/070323/990 J006.pdf,2007. [10] 松岡:"屋外用自律移動ロボットの開発",つくばチャレンジ 2009 開催記念シンポジウム

参加レポート集, pp. 106-107, 2009.