SlideShare a Scribd company logo
1 of 97
Download to read offline
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTコンポーネント
作成応用編
サービスポートの作り方
株式会社SSR × 早大基幹理工表現工学科尾形研究室
菅 佑樹
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
サービスポートの概念
OpenRTM-aistの機能
RTCに関数呼び出しのインターフェースを付加
引数でデータを渡す
返り値でデータを受け取る
データポートと比べて
データを要求することができる
データの送受信の結果が得られる(成否など)
データの送受信に関わらない処理を実現できる
reset, initializeなど
若干実装が面倒
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
サービスポートの概念
• サービスポートは「インターフェース」を
持つ
• インターフェースには極性 (Polarity) が
ある
• 提供 (Provided)
• リソースを提供する.関数が呼ばれ
る側.
• 要求 (Required)
• リソースを利用する.関数を呼ぶ側
.
• 一つのサービスポートが複数の提供・要求
インターフェースを持つことができる
• インターフェースのタイプが合えば接続で
き,利用できる.
RTC1 RTC2
ProvidedRequired
Service Port
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
サービスポート作成の流れ
• サービスポートを追加
• 設定項目
• サービスポート名
• インターフェースを追加
• 設定項目
• インターフェース名*
• インスタンス名
• 極性 (Polarity)
• インターフェース型
• 注意!
• インターフェース名が違うと繋げるのが面倒になる!
• インターフェース型を定義するファイルを作成 (IDLファイル)
RTC
Interface Name : Interface Type
Port Name
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Interface Definition Language
サービスポートの関数やデータ型を宣言するためのファイル形式 (.idlファイル)
CORBAやDDSなどの分散処理実現のために使われる
Javaに似た形式
オブジェクト指向
IDLファイルをコンパイルすると,C++やJava, Pythonのプログラムのスケルト
ンが生成される
IDLは中間言語
C++やJavaなどの実装言語に変換すると,各言語ごとに若干利用方法が変わ
るが,関数名などは変わらない
今回はC++版を少しだけ解説
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLの書き方
• moduleで名前空間を定義
• 後述のインターフェース名は同じ名前になりがちな
ので名前空間で分ける
• interfaceでインターフェース名を定義
• 機能をグループ化
• interface内で関数を定義
• 返り値,引数リスト,Javaとほぼ同じ構文
• 引数にin/outを設定
• in ・・・インターフェース提供側に引数を渡す (値
渡し)
• out ・・・インターフェース提供側が引数にデータ
を設定する (参照渡し)
• inout ・・・インターフェース提供側に引数データ
を渡し,提供側がさらにそれを変更する
// 行コメント
// moduleはC++のネームスペースに似た概念
module my_module {
// interfaceはJavaのインターフェース,
// C++の仮想クラスに似ている.
// メンバ関数を定義する
interface MyInterface {
// 返り値でデータを受け取るタイプの関数
long getLongData();
// 引数でデータを与えるタイプの関数
void setLongData(in long data);
// 引数に参照渡しでデータを
// 受け取ることもできる
void getDataByArg(out long data);
};
};
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLの書き方
• structで構造体を定義できる
• 異なるタイプのデータの集
まり
• 引数にも,返り値にも使える
• structでデータ型を定義できれ
ば,データポートの独自データ
型作成ができる
• 参考: http://ysuga.net/?p=213
module my_module {
// 構造体を宣言することでプログラムを構造化できる
struct MyData {
long data1;
long data2;
double data3;
};
interface MyInterface {
// 返り値でデータを受け取るタイプの関数
MyData getMyData();
// 引数でデータを与えるタイプの関数
void setMyData(in MyData data);
// 引数に参照渡しでデータを受け取ることもできる
void getMyDataByArg(out MyData data);
};
};
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLの書き方
• typedefでデータ型の名称変更
• enumで定数を作る
• sequenceで可変長のデータを
作成できる
// typedef を使ってラベルを変更できる.
typedef long ERROR_CODE;
// enumを使って数にラベルを付けられる
enum MY_STATE {
STATE_RUNNING,
STATE_HALT,
STATE_ERROR
};
enum RETURN_CODE {
RETURN_OK,
RETURN_ERROR
};
struct MyData {
ERROR_CODE errorCode;
My_STATE state;
sequence<double> data;
// sequenceを使うと可変長の配列を使う
};
interface MyInterface {
// 引数でデータを与えるタイプの関数
// 返り値で処理の成否を返すことができる
RETURN_CODE setMyData(in MyData data);
// 引数に参照渡しでデータを受け取ることもできる
// 返り値で処理の成否を返すことができる
RETURN_CODE getMyDataByArg(out MyData data);
};
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTC Builderの使い方
Eclipseのプラグインのアップデートが必要
メニュー > Help > 「Install New
Software」
起動したダイアログの「Add」を押す
Locationに「
http://openrtm.org/pub/openrtp/stable/update
s/ 」と入力
OpenRTP 1.1.0 を選択して「Next」から
インストールする
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTC Builder
• 「サービスポート」タブ選択
• 「Add Port」でポート追加
• 「ポート名」を設定
• 「Add Interface」でインターフェース追加
• 「インターフェース名」「方向」「インスタ
ンス名」「変数名」を設定
• 「IDLファイル」の「Browse」ボタンでIDL
を読み込む
• 「インターフェース型」を選択
• 「IDLパス」は「IDLファイルがあったフォ
ルダを選択」
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ビルド方法
CMake
RTCBuilderが古いと失敗する
Visual Studio
この中でomniidlというコマンドでIDLをコンパイルするが,Python版がインストールされていると問題が
起こることがある
PATHの設定によっては,Python版のomniidlが優先して見つかるため,C++にコンパイルできない
→ PATHの最初にC++版のomniidl.exeのPATHを設定しなおす
IDLはビルドできてる (** Not Foundのようなエラーは無い) のにコンパイルできない
サービスポートを簡易に実行するためのヘルパークラスが生成されるが,独自のIDLパーサーを使って
いるため問題が多い
→ 最初は構造体などをあまり使わずに
→ openrtmのメーリングリストに通報
→ IDLコンパイルでidlファイル名.hhというファイルが生成される.その中のインターフェースをヘ
ルパークラスがオーバーライドしているので,返り値の型などを手動で直すとコンパイルできること
がある
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
コーディング方法例 (提供側)
my_module::RETURN_CODE MyInterfaceSVC_impl::setMyData(const my_module::MyData& data)
{
my_module::RETURN_CODE result;
if (data.errorCode == 0) {
result = my_module::RETURN_OK;
} else {
result = my_module::RETURN_ERROR;
}
for(int i = 0;i < data.data.length();i++) {
std::cout << "Data " << i << " is " << data.data[i] << std::endl;
}
return result;
}
my_module::RETURN_CODE MyInterfaceSVC_impl::getMyDataByArg(my_module::MyData_out data)
{
my_module::RETURN_CODE result = my_module::RETURN_OK;
my_module::MyData_var myData = new my_module::MyData;
myData->state = my_module::STATE_RUNNING;
myData->errorCode = 0;
myData->data.length(4);
myData->data[0] = 0.1;
myData->data[1] = 0.3;
myData->data[2] = 0.5;
myData->data[3] = 0.7;
data = myData._retn();
return result;
}
module my_module {
// typedef を使ってラベルを変更できる.
typedef long ERROR_CODE;
// enumを使って数にラベルを付けられる
enum MY_STATE {
STATE_RUNNING,
STATE_HALT,
STATE_ERROR
};
enum RETURN_CODE {
RETURN_OK,
RETURN_ERROR
};
struct MyData {
ERROR_CODE errorCode;
My_STATE state;
sequence<double> data;
// sequenceを使うと可変長の配列を使う
};
interface MyInterface {
// 引数でデータを与えるタイプの関数
// 返り値で処理の成否を返すことができる
RETURN_CODE setMyData(in MyData data);
// 引数に参照渡しでデータを受け取ることもできる
// 返り値で処理の成否を返すことができる
RETURN_CODE getMyDataByArg(out MyData data);
};
};
シンプルな関数呼び出しになる
out型引数は_var型を使う
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
コーディング方法例 (要求側)
my_module::MyData data;
data.errorCode = 0;
data.state = my_module::STATE_HALT;
data.data.length(3);
data.data[0] = 1.2;
data.data[1] = 1.4;
data.data[2] = 1.8;
if(m_variableName->setMyData(data) != my_module::RETURN_OK) {
std::cout << "[YourModule] setMyData failed." << std::endl;
}
my_module::MyData_var yourData = new my_module::MyData();
if(m_variableName->getMyDataByArg(yourData) != my_module::RETURN_OK) {
std::cout << "[YourModule] getMyData failed." << std::endl;
}
std::cout << "[YourModule] getMyData succeeded." << std::endl;
std::cout << " errorCode : " << yourData->errorCode << std::endl;
std::cout << " state : " << yourData->state << std::endl;
std::cout << " data : [";
for(int i = 0;i < yourData->data.length();i++) {
std::cout << yourData->data[i] << ", ";
}
std::cout << "]" << std::endl;
module my_module {
// typedef を使ってラベルを変更できる.
typedef long ERROR_CODE;
// enumを使って数にラベルを付けられる
enum MY_STATE {
STATE_RUNNING,
STATE_HALT,
STATE_ERROR
};
enum RETURN_CODE {
RETURN_OK,
RETURN_ERROR
};
struct MyData {
ERROR_CODE errorCode;
My_STATE state;
sequence<double> data;
// sequenceを使うと可変長の配列を使う
};
interface MyInterface {
// 引数でデータを与えるタイプの関数
// 返り値で処理の成否を返すことができる
RETURN_CODE setMyData(in MyData data);
// 引数に参照渡しでデータを受け取ることもできる
// 返り値で処理の成否を返すことができる
RETURN_CODE getMyDataByArg(out MyData data);
};
};
シンプルな関数呼び出しになる
out型引数は_var型を使う
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
サービスポートの接続
• インターフェース名が同じであ
れば,問題なく接続できる.
• インターフェース名が違う場合
は,「接続できるインターフェ
ースがない」と言われるが,詳
細ダイアログで接続するインタ
ーフェースを選択すると接続で
きるようになる.
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
まとめ
サービスポートについて紹介
サービスポートの作成方法について紹介
IDLについて紹介
C++版のサービスポートの実装方法について紹介
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTM対応 移動ロボット
ナビゲーション
フレームワーク
株式会社SSR × 早大基幹理工表現工学科尾形研究室
菅 佑樹
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTM対応 移動ロボット
ナビゲーションフレームワーク
台車型移動ロボットのナビゲーションが目的
すべてオープンソース
マップ作成
SLAMのみ
地図を用いたナビゲーション
レーザーレンジセンサーを用いた位置推定
軌道計画
軌道追従
機能ごとにモジュール化しており,インターフェースを共通化して,入替えが可能
例:独自の移動ロボットを適用
例:独自のプランニング・パスフォロワーを適用
基本操作が可能なGUIを準備
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTM対応 移動ロボット
ナビゲーションフレームワーク
MRPT版
環境
C++版
OpenRTM-aist 1.1.0 C++ VC2010版
MRPT 1.0.2 for Visual Studio 2010版
Visual C++ 2010
その他,OpenRTM-aist開発に必要なツール
Java版
OpenRTM-aist 1.1.0 RC1
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
フレームワークの特徴
上位のインターフェースはすべてサービスポート
処理の成功・失敗を返り値で受け取ることができる
サービスロボットの上位処理はデータフロー的では
なく,イベント的
MobileRobot.idlでインターフェースを定義済み
これをインポートすればコンシューマ側は簡単に
作成できる
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
MobileRobot.idl
移動ロボットナビゲーションに関わるインターフェ
ースやデータ型を定義
OpenRTM-aist同梱のExtendedDataTypes.idlや
InterfaceDataTypes.idlを再利用
統一されたインターフェース設計思想
値渡しでデータを渡し,参照渡しでデータを受け
取る.返り値で処理の成否を受け取る
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイル#include "BasicDataType.idl"
#include "ExtendedDataTypes.idl"
#include "InterfaceDataTypes.idl"
module RTC {
/*!
* @struct OCMap
* @brief OccupancyGridMap Data
*/
struct OGMap
{
/// Time stamp.
Time tm;
/// OccupancyGridMap Configuration
OGMapConfig config;
/// OccupancyGridMap Data
OGMapTile map;
};
/*!
* @struct OGMapConfig
* @brief Configuration of a occupancy-grip map.
*/
struct OGMapConfig
{
/// Scale on the x axis (metres per cell).
double xScale;
/// Scale on the y axis (metres per cell).
double yScale;
/// Number of cells along the x axis.
unsigned long width;
/// Number of cells along the y axis.
unsigned long height;
/// Pose of the cell at (0, 0) in the real world.
Pose2D origin;
};
/*!
* @typedef OGMapCells
*/
typedef sequence<octet> OGMapCells;
/*!
* @struct OGMapTile
* @brief A tile from an occupancy-grid map.
*/
struct OGMapTile
{
/// X coordinate of the (0, 0) cell of this tile in the whole map.
unsigned long column;
/// Y coordinate of the (0, 0) cell of this tile in the whole map.
unsigned long row;
/// Number of cells along the x axis in this tile;
unsigned long width;
/// Number of cells along the y axis in this tile;
unsigned long height;
/// Tile cells in (row, column) order.
OGMapCells cells;
OGMapはマップデータ
OGMapConfig型や
OGMapTile型は
InterfaceDataTypes.idl
で定義されている
MobileRobot.idl
InterfaceDataTypes.idl
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイルenum RETURN_VALUE {
// COMMON
RETVAL_OK,
RETVAL_INVALID_PARAMETER,
RETVAL_EMPTY_MAP,
RETVAL_INVALID_PRECONDITION,
RETVAL_NOT_IMPL,
RETVAL_UNKNOWN_ERROR,
RETVAL_NOT_FOUND,
RETVAL_ODOMETRY_INVALID_VALUE,
RETVAL_ODOMETRY_TIME_OUT,
RETVAL_RANGE_INVALID_VALUE,
RETVAL_RANGE_TIME_OUT,
RETVAL_EMERGENCY_STOP,
RETVAL_OUTOF_RANGE
};
enum MAPPER_STATE {
MAPPER_STOPPED,
MAPPER_MAPPING,
MAPPER_SUSPEND,
MAPPER_ERROR,
MAPPER_UNKNOWN
};
enum FOLLOWER_STATE {
FOLLOWER_STOPPED,
FOLLOWER_FOLLOWING,
FOLLOWER_SUSPEND,
FOLLOWER_ERROR,
FOLLOWER_UNKNOWN
enumで返り値の基本値 (RETURN_VALUE) や,
MapperやFollowerの状態み関する変数が定義されている
MobileRobot.idl
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイル/*!
* @interface OGMapper
* @brief Occupancy Grid Map Builder Service Interface
*/
interface OGMapper {
/// Initialize Current Build Map Data
RETURN_VALUE initializeMap(in OGMapConfig config, in Pose2D initialPose);
RETURN_VALUE startMapping();
RETURN_VALUE stopMapping();
RETURN_VALUE suspendMapping();
RETURN_VALUE resumeMapping();
RETURN_VALUE getState(out MAPPER_STATE state);
/// Request Current Build Map Data
RETURN_VALUE requestCurrentBuiltMap(out OGMap map);
};
OGMapperはマップ作成用インターフェース
startMappingでマップ作成開始
stopMappingでマップ作成終了
requestCurrentBuiltMapで現在のマップ要求
/*!
* @interface OGMapServer
* @brief Occupancy Grid Map Service Interface
*/
interface OGMapServer {
/// Request Current Build Map Data
RETURN_VALUE requestCurrentBuiltMap(out OGMap map);
};
OGMapServerはマップを単純に配信するための
インターフェース
requestCurrentBuiltMapでマップを取得
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイル
struct PathPlanParameter {
//Environmental Map
OGMap map;
/// Location of the goal.
Pose2D targetPose;
/// Location of Robot.
Pose2D currentPose;
/// How far away from the waypoint is considered success (radius in metres).
double distanceTolerance;
/// How much off the target heading is considered success (in radians).
double headingTolerance;
/// Target time to arrive at the waypoint by.
Time timeLimit;
/// Maximum sped to travel at while heading to the waypoint.
Velocity2D maxSpeed;
};
interface PathPlanner {
/// Plan Path from PathPlanParater.
RETURN_VALUE planPath(in PathPlanParameter param, out Path2D outPath);
};
interface PathFollower {
RETURN_VALUE followPath(in Path2D path);
RETURN_VALUE getState(out FOLLOWER_STATE state);
RETURN_VALUE followPathNonBlock(in Path2D path);
};
PathPlannerは軌道計画のためのインターフェース
planPathで軌道計画をする
PathPlanParameterは,PathPlannerに
渡すためのパラメータ構造体
PathFollowerは軌道追従のためのインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイル/*!
* @struct Waypoint2D
* @brief A waypoint in 2D space, including constraints.
*/
struct Waypoint2D
{
/// Location of the waypoint.
Pose2D target;
/// How far away from the waypoint is considered success (radius in metres).
double distanceTolerance;
/// How much off the target heading is considered success (in radians).
double headingTolerance;
/// Target time to arrive at the waypoint by.
Time timeLimit;
/// Maximum sped to travel at while heading to the waypoint.
Velocity2D maxSpeed;
};
/*!
* @typedef Waypoint2DList
*/
typedef sequence<Waypoint2D> Waypoint2DList;
/*!
* @struct Path2D
* @brief A time-stamped path in 2D space.
*/
struct Path2D
{
/// Time stamp.
Time tm;
/// The sequence of waypoints that make up the path.
Waypoint2DList waypoints;
};
Path2DはWaypoint2Dの配列
Waypointは,目標位置姿勢,
距離・角度許容差,
タイムリミットや最大速度が入る
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
IDLファイル全文 (MobileRobot.idl)
#include "BasicDataType.idl"
#include "ExtendedDataTypes.idl"
#include "InterfaceDataTypes.idl"
module RTC {
/*!
* @struct OCMap
* @brief OccupancyGridMap Data
*/
struct OGMap
{
/// Time stamp.
Time tm;
/// OccupancyGridMap Configuration
OGMapConfig config;
/// OccupancyGridMap Data
OGMapTile map;
};
enum RETURN_VALUE {
// COMMON
RETVAL_OK,
RETVAL_INVALID_PARAMETER,
RETVAL_EMPTY_MAP,
RETVAL_INVALID_PRECONDITION,
RETVAL_NOT_IMPL,
RETVAL_UNKNOWN_ERROR,
RETVAL_NOT_FOUND,
RETVAL_ODOMETRY_INVALID_VALUE,
RETVAL_ODOMETRY_TIME_OUT,
RETVAL_RANGE_INVALID_VALUE,
RETVAL_RANGE_TIME_OUT,
RETVAL_EMERGENCY_STOP,
RETVAL_OUTOF_RANGE
};
enum MAPPER_STATE {
MAPPER_STOPPED,
MAPPER_MAPPING,
MAPPER_SUSPEND,
MAPPER_ERROR,
MAPPER_UNKNOWN
};
enum FOLLOWER_STATE {
FOLLOWER_STOPPED,
FOLLOWER_FOLLOWING,
FOLLOWER_SUSPEND,
FOLLOWER_ERROR,
FOLLOWER_UNKNOWN
/*!
* @interface OGMapper
* @brief Occupancy Grid Map Builder Service Interface
*/
interface OGMapper {
/// Initialize Current Build Map Data
RETURN_VALUE initializeMap(in OGMapConfig config,
in Pose2D initialPose);
RETURN_VALUE startMapping();
RETURN_VALUE stopMapping();
RETURN_VALUE suspendMapping();
RETURN_VALUE resumeMapping();
RETURN_VALUE getState(out MAPPER_STATE state);
/// Request Current Build Map Data
RETURN_VALUE requestCurrentBuiltMap(out OGMap map);
};
/*!
* @interface OGMapServer
* @brief Occupancy Grid Map Service Interface
*/
interface OGMapServer {
/// Request Current Build Map Data
RETURN_VALUE requestCurrentBuiltMap(out OGMap map);
};
struct PathPlanParameter {
//Environmental Map
OGMap map;
/// Location of the goal.
Pose2D targetPose;
/// Location of Robot.
Pose2D currentPose;
/// How far away from the waypoint is
/// considered success (radius in metres).
double distanceTolerance;
/// How much off the target heading
/// is considered success (in radians).
double headingTolerance;
/// Target time to arrive at the waypoint by.
Time timeLimit;
/// Maximum sped to travel
/// at while heading to the waypoint.
Velocity2D maxSpeed;
struct PathPlanParameter {
//Environmental Map
OGMap map;
/// Location of the goal.
Pose2D targetPose;
/// Location of Robot.
Pose2D currentPose;
/// How far away from the waypoint is considered
/// success (radius in metres).
double distanceTolerance;
/// How much off the target heading is considered
/// success (in radians).
double headingTolerance;
/// Target time to arrive at the waypoint by.
Time timeLimit;
/// Maximum sped to travel at while heading to the waypoin
Velocity2D maxSpeed;
};
interface PathPlanner {
/// Plan Path from PathPlanParater.
RETURN_VALUE planPath(in PathPlanParameter param,
out Path2D outPath);
};
interface PathFollower {
RETURN_VALUE followPath(in Path2D path);
RETURN_VALUE getState(out FOLLOWER_STATE state);
RETURN_VALUE followPathNonBlock(in Path2D path);
};
};
#endif
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
マップの作成
• ロボットに北陽URG等のレーザース
キャナを搭載
• ロボットの移動情報 (オドメトリ)
とスキャン情報からマップを作成
• ロボットの移動はジョイスティック
などで指令を送る
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
マップ作成用フレームワーク
(基本的な使い方)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
全RTC起動し図のように接続
Mapper_ALL.batで起動
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
コンフィグレーションの設定
• UrgRTCのCOMポートをコンフィグ
レーション (port_name) で指定
• geometry_x, y, zで,ロボットの座
標系 (車軸中心) からのオフセットを
指定 (単位[m])
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
全RTC起動をアクティブ化
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIの利用
• Start Mappingボタンでマッピ
ング開始
• NavigationManagerの
targetVelocityポートを接続し
ていれば,右図のGUIジョイス
ティックが起動
• ジョイスティック (黄色い円)
を上に引っ張ると,ロボットが
前進
• 別のジョイスティックRTCを使
うことも可能
GUIジョイスティック
Startボタン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIの利用
• Save Mapでマップを保存
• マップデータは二つのファイルで保存さ
れる
• ****.png : グリッドマップのデータ
• ****.yaml : マップの原点やピクセル
/長さの比の情報
Saveボタン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
マップ作成用フレームワーク
(操作とRTシステムとの関係)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Start Mapping時
GUI
SLAM
マッピング開始命令
GUIからSLAMモジュールにマッピング開始を指示
*OGMapperインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Mapping中
スキャンデータ
SLAM
オドメトリ
レンジスキャナのデータとロボットのオドメトリからマップを作成
ロボット
レンジセンサ
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Mapping中の表示
スキャンデータ
SLAM
推定自己位置
ロボットの自己位置とスキャンデータをデータポートから取得
サービスポートで現在のマップデータを取得.重ねて表示
現在のマップデータを
要求し取得
レンジセンサ
*OGMapperインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIジョイスティックでの操作
GUI
SLAM
目標速度指令
targetVelocityをGUIから指示
ロボット
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Save Map時
SLAM
サービスポートで現在のマップデータを取得.保存.
現在のマップデータを
要求し取得
GUI
*OGMapperインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
マップ作成用フレームワーク
(各RTCの解説)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
北陽電機 URG
• 主なコンフィグレーション
• スキャナのロボット座標系での位
置,オフセット [m]
• geometry_x
• geometry_y
• geometry_z
• COMポート番号 (COM3とか)
• port_name
• レーザーセンサ URGのRTC
• 出力ポート
• range : RangeData
• レーザースキャナ出力
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
YPSpur対応RTC
• 主なコンフィグレーション
• 最大加速度 (activate時に更新) [m/s^2]
• max_acc
• max_rot_acc
• 最大速度 (activate時に更新) [m/s]
• max_vel
• max_rot_vel
• YPSpur対応RTコンポーネント
• 入力ポート
• targetVelocity : TimedVelocity2D
• 目標速度
• poseUpdate : TimedPose2D
• 現在位置の更新
• 出力ポート
• currentVelocity : TimedVelocity2D
• 現在速度
• currentPose : TimedPose2D
• 推定自己位置 (オドメトリ)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Mapper_MRPT
• SLAMモジュール (MRPTを利用)
• 入力ポート
• range : RangeData
• LiDAR入力
• odometry : TimedPose2D
• オドメトリ入力
• 出力ポート
• estimatedPose : TimedPose2D
• スキャンマッチ後の推定自己位置
• サービスポート
• gridMapper : RTC::OGMapper (Provided)
• マッピング開始・終了,マップ取得などの
操作
• 主なコンフィグレーション
• x_max, x_min : X軸方向のマップ広さ初期値
[m]
• y_max, y_min : Y軸方向のマップ広さ初期値
[m]
• resolution : グリッドの解像度 [m]
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
NavigationManager
• ナビゲーション用GUI
• 入力ポート
• currentPose : TimedPose2D
• ロボットの自己位置 (表示用)
• range : RangeData
• LiDAR入力 (表示用)
• camera : CameraImage
• カメラ画像表示
• 出力ポート
• targetVelocity : TimedVelocity2D
• GUIジョイスティックでの操作時に接続
• サービスポート
• mapperService : RTC::OGMapper (Required)
• SLAMモジュールを接続.マッピングの開始・
終了・マップ取得
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーション
• ロボットに北陽URG等のレーザース
キャナを搭載
• ロボットの移動情報 (オドメトリ)
とスキャン情報をマップとマッチン
グして自己位置を高精度に推定
• マップ情報から軌道計画を自動化
• 計画した軌道への自動的な追従
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーション用フレームワーク
(基本的な使い方)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
全RTCを起動し図のように接続
Navi_ALL.batで起動
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
コンフィグレーションの設定
• UrgRTCのCOMポートをコンフ
ィグレーション (port_name)
で指定
• geometry_x, y, zで,ロボッ
トの座標系 (車軸中心) からの
オフセットを指定 (単位[m])
• MapServerのマップファイル
のファイル名を設定
• ****.yamlを設定すること
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
全RTCをActivate
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIの利用
• MapServerにマップが読み込
まれていれば,マップが表示さ
れ,ロボットの位置とレンジセ
ンサのデータが表示される
• マップ上の目標位置をクリック
するとゴールを指定できる
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIの利用
• マップ上のゴールを指定すると
,ゴールの姿勢を選択するダイ
アログが表示される
• 赤い円内をクリックすると,ゴ
ール姿勢 (マップ座標系での姿
勢) を指定できるので,OKす
る
• マップ上に指定した姿勢でのゴ
ールが出現する (円の中心が位
置,直線の伸びている方向がロ
ボットのX方向)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
GUIの利用
• Plan Pathボタンでパスプラン
ニング
• Followボタンでロボットが追
従開始
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーション用フレームワーク
(操作とRTシステムとの関係)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Activate時 (自己位置推定)
まず,MapServerにマップを要求して取得
オドメトリとスキャンデータからマップ内での自己位置を推定
ロボット
スキャンデータ
レンジセンサ
オドメトリ マップデータを要求
*OGMapServerインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Activate時 (表示)
GUIはまず,MapServerにマップを要求して取得
推定自己位置とスキャンデータをマップに重ねて表示
自己位置推定
スキャンデータ
レンジセンサ
推定自己位置
マップデータを要求
GUI
*OGMapServerインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ゴール設定時
GUI内で処理は完結.クリックした位置を表示したマップ上の位置
に変換して記録
自己位置推定
マップデータを要求
GUI
*OGMapServerインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Plan Path時
ロボットの位置をスタート,指定されたゴール,MapServerから取得したマップ,パスフォロー
の許容誤差等のパラメータを用いてPathPlannerにプランニングを要求し,Pathを取得・表示
自己位置推定RTC
レンジセンサ
推定自己位置
GUI
軌道計画
*PathPlannerインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Follow時
目標軌道を引数として,軌道追従要求をPathFollowerに要求.成功・失敗を返り値として得る
ロボットの自己位置と軌道を照らし合わせながら,ロボットの目標速度を送信
自己位置推定RTC
推定自己位置
GUI
軌道追従要求
ロボットへの速度指令
軌道追従RTC
*PathFollowerインターフェース
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーション用フレームワーク
(各RTCの説明)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
北陽電機 URG
• 主なコンフィグレーション
• スキャナのロボット座標系での位
置,オフセット
• geometry_x
• geometry_y
• geometry_z
• COMポート番号
• port_name
• レーザーセンサ URGのRTC
• 出力ポート
• range : RangeData
• レーザースキャナ出力
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
YPSpur対応RTC
• 主なコンフィグレーション
• 最大加速度 (activate時に更新)
• max_acc
• max_rot_acc
• 最大速度 (activate時に更新)
• max_vel
• max_rot_vel
• YPSpur対応RTコンポーネント
• 入力ポート
• targetVelocity : TimedVelocity2D
• 目標速度
• poseUpdate : TimedPose2D
• 現在位置の更新
• 出力ポート
• currentVelocity : TimedVelocity2D
• 現在速度
• currentPose : TimedPose2D
• 推定自己位置 (オドメトリ)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
NavigationManager
• ナビゲーション用GUI
• 入力ポート
• currentPose : TimedPose2D
• ロボットの自己位置 (表示用)
• range : RangeData
• LiDAR入力 (表示用)
• camera : CameraImage
• カメラ画像表示
• 出力ポート
• targetVelocity : TimedVelocity2D
• GUIジョイスティックでの操作時に接続
• サービスポート
• mapServer : RTC::OGMapServer
• マップ配信モジュールを接続.マップ取得
• pathPlanner : RTC::PathPlanner
• 軌道計画モジュールを接続
• pathFollower : RTC::PathFollower
• 軌道追従モジュールを接続
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
MapServer
• マップデータを管理・出力
• サービスポート
• mapServer : MapServer
• マップデータの出力
• 主なコンフィグレーション
• filename
• マップデータのファイル名.Yamlファイルを指定す
ること.
• Yamlファイルとpngファイルは同じフォルダに配置
すること
• 実行ディレクトリからの相対パスか,絶対パスで指
定.
• よくわからなければC:¥map¥my_may.yamlな
どが無難
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
Localization_MRPT
• モンテカルロ法による自己位置推定
• 入力ポート
• range : RangeData
• LiDAR入力
• odometry : TimedPose2D
• オドメトリ
• 出力ポート
• estimatedPose : TimedPose2D
• 推定自己位置
• サービスポート
• mapServer : MapServer
• マップデータの取得
• 主なコンフィグレーション
• Dieter Fox,KLD-sampling: Adaptive
particle filters. In Advances in Neural
Information Processing Systems 14,2002
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
PathPlanner_MRPT
• パスプランニング (MRPT使用)
• サービスポート
• pathPlanner : PathPlanner
• パスプランニング
• 主なコンフィグレーション
• 円柱型ロボット(と仮定した場合)の半径
• robotRadius
• 軌道追従の位置・姿勢許容差
• pathDistanceTolerance
• pathHeadingTolerance
• 最終ゴール地点の位置・姿勢許容差
• goalDistanceTolerance
• pathHeadingTolerance
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
SimplePathFollower
• Path2D型の経路への追従
• 入力ポート
• currentPose : TimedPose2D
• 現在位置
• 出力ポート
• velocity : TimedVelocity2D
• 目標速度
• サービスポート
• pathFollower : PathFollower
• パス追従命令取得
• 主なコンフィグレーション
• distanceToTranslationGain
• Pathとの位置のズレと並進移動速度のゲイン
• distanceToRotationGain
• Pathとの位置のズレと回転移動速度のゲイン
• directionToTranslationGain
• Pathとの向きのズレと並進移動速度のゲイン
• directionToRotationGain
• Pathとの向きのズレと回転移動速度のゲイン
• approachDistanceGain
• 最後の終着点との距離と速度のゲイン
• approachDirectionGain
• 最後の終着点の方向と回転速度のゲイン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
SimplePathFollowerアルゴリズム
• 最近傍のパスを選ぶ (右図では1-2間)
• 着目したパスとの有効距離をΔX,パス
とロボットの向きの差分をΔHとする
• ゲインから速度を計算する
• Vx = K1 * ΔX + K2 * ΔH
• Va = K3 * ΔX + K4 * ΔH
• 近傍点のdistanceTolerannceよりもΔX
が大きい場合は,OUT_OF_RANGEエ
ラーを返してFollow終了
• ΔHが近傍点のheadingToleranceより
も大きい場合は,Vxをゼロにする
1
0
3
2
4
ΔX
ΔH
• コンフィグレーションとの対応
• distanceToTranslationGain = K1
• Pathとの位置のズレと並進移動速度のゲイン
• directionToTranslationGain = K2
• Pathとの向きのズレと並進移動速度のゲイン
• distanceToRotationGain = K3
• Pathとの位置のズレと回転移動速度のゲイン
• directionToRotationGain = K4
• Pathとの向きのズレと回転移動速度のゲイン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
SimplePathFollowerアルゴリズム
• 最近傍パスがゴールを含む場合はゴールア
プローチモードになる
• まずゴール点まで移動
• ゴールとロボットとの距離をΔX
• ゴール・ロボット間の直線とロボットの
向きとの差分をΔH
• Vx = K5 * ΔX
• Va = K6 * ΔH
• ゴール点のdistanceTolerance内で停止
• ゴール点の姿勢までその場で回転し,
headingToleranceに収まればゴール到達
m
l n
ΔX
ΔH
• 主なコンフィグレーションとの対応
• approachDistanceGain = K5
• 最後の終着点との距離と速度のゲイン
• approachDirectionGain = K6
• 最後の終着点の方向と回転速度のゲイン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーションフレームワーク応用
フレームワークのカスタマイズ例
独自RTCによるフレームワークの利用
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ナビゲーション機能の
カスタマイズ
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTCごとの入れ替え
インターフェースが共通であれば,入れ替えは容易
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ロボットRTCの入替え
独自ロボットへのナビゲーション機能の実装
TimedVelocity2D入力,TimedPose2D出力
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
軌道計画RTCの改良
軌道計画アルゴリズムを改良
RRT-CONNECTなどの実装
PathPlannerサービスポート (Provided) を実装
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
既存RTCの強化
外部のRTCと接続するインターフェースが共通であ
れば,新たな入出力を追加することは可能
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
軌道追従RTCの改良案
Urgからのスキャンデータを使って障害物を回避
ロボットの接触センサ情報を使って衝突時の緊急停止機能を追加
PathFollowerサービスポート (Provided) を実装
ロボットの自己位置 (TimedPose2D) を受け取って,速度指令 (TimedVelocity2D) を出力
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTCの追加による
フレームワーク機能強化
外部のRTCと接続するインターフェースが共通であ
れば,新たな入出力とRTCを追加することが可能
フィルタリング
センサーの増設とセンサーフュージョン
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
自己位置同定の改良
IMUのRTCを使い,カルマンフィルタを実装して,レンジセンサを使わずに自己位置を出力
GPSを使って自己位置同定を改良
TimedVelocity2Dを受け取りロボットを動かし,TimedPose2Dでロボットの位置を送信
KF
IMU
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
フレームワーク管理
RTCの追加
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
一番やりたいのはココですよね?
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
移動ロボットへの指令を変更
• 例えば・・・
• 音声で「○○に行け」と言ったら,ゴールを自動的に指定して軌道
計画,追従を行う
• 環境センサで状況を判断して自動的に○○を取ってくるロボット
• 上位のサービスの設計をしましょう
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
StringNavigationCommander
• 文字列命令からゴール位置を設定して,軌道計画・
追従を指令するコンポーネント
• 入力ポート
• command : TimedString
• GOTO_Xのように指令文字列を受け取る
• currentPose : TimedPose2D
• 自己位置を取得 (軌道計画で必要)
• サービスポート
• mapServer : MapServer (Required)
• マップを要求・取得
• pathPlanner : PathPlanner (Required)
• 軌道計画を要求
• pathFollower : PathFollower (Required)
• 軌道追従を要求
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
StringNavigationManagerを
簡単に作成
• C:¥idlフォルダにIDLファイルをコピー
• BasicDataType.idl
• InterfaceDataTypes.idl
• ExtendedDataTypes.idl
• MobileRobot.idl
• RTC Builderで新規プロジェクトを作成
• StringNavigationManagerフォルダのRTC.xmlをインポート
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ポートの設定
• commandデータ入力ポート
• currentPoseデータ入力ポート
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ポートの設定
• mapServerサービスポート
• Required
• PathPlannerサービスポート
• Required
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
ポートの設定
• pathFollowerサービスポート
• Required
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
一旦,通常のビルドを行い
接続を確認
CMakeしてVC++2010でビルド
ナビゲーション用RTC群を起動して,サービスポー
トの接続を確認しておく
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
if (自己位置データ受信してたら) {
自己位置を取得();
}
if (文字列コマンド受信してたら) {
文字列コマンド取得();
if (コマンド == “GOTO_A”) {
ゴール = (1.0, 0.0, 1.57);
} else (コマンド == “GOTO_B”) {
ゴール = (1.0, 1.0, 3.14);
} else {
return RTC::RTC_OK; // 何もせず終了
}
マップ = マップ要求();
軌道 = 軌道計画要求(マップ, ゴール, 自己位置, その他のパラメータ);
軌道追従要求(軌道);
}
return RTC::RTC_OK;
}
…自己位置取得①
…文字列コマンド取得②
…ゴール位置設定③
…マップ要求④
…軌道計画要求⑤
…軌道追従要求⑥
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
1. 自己位置データ取得
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
// 現在のロボットの位置を取得
if (m_currentPoseIn.isNew()) {
m_currentPoseIn.read();
}
…
通常のデータポートの方法でデータを取得
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
2. 文字列コマンド取得
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
…
// 文字列コマンドを取得
if (m_commandIn.isNew()) {
m_commandIn.read(); // m_commandにデータが格納される
std::string data = m_command.data; // string型に変換
std::cout << "[RTC::StringCommander] Receive Command (" << data << ")" << std::endl;
…
通常のデータポートの方法でデータを取得
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
3. ゴール位置設定
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
…
// Goalを設定する
Pose2D goal;
if (data == "GOTO_A") { // string型は==演算子が使える
goal.position.x = 1.0;
goal.position.y = 1.0;
goal.heading = 1.57;
} else if (data == "GOTO_B") {
goal.position.x = 1.0;
goal.position.y = 0.0;
goal.heading = 0.0;
} else { // 知らないコマンドはエラーメッセージを表示
std::cout << "[RTC::StringCommander] Error. Unknown Command (" << data << ")" << std::endl;
return RTC::RTC_OK; // onExecuteから通常終了
}
// 現在地と目的地が定まる
std::cout << "[RTC::StringCommander] Current Pose = (" << m_currentPose.data.position.x << ", "
<< m_currentPose.data.position.y << ", " << m_currentPose.data.heading << ")" << std::endl;
std::cout << "[RTC::StringCommander] Goal Pose = (" << goal.position.x << ", "
<< goal.position.y << ", " << goal.heading << ")" << std::endl;
…
取得文字列からゴールを自動設定
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
4. マップ要求
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
…
// マップを要求する
RTC::OGMap_var outMap; // マップを格納するための変数
RTC::RETURN_VALUE retval = this->m_OGMapServer->requestCurrentBuiltMap(outMap);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) {
std::cout << "[RTC::StringCommander] Map Request OK." << std::endl;
} else {
std::cout << "[RTC::StringCommander] Map Request Unknown Error Code =" << retval << std::endl;
return RTC::RTC_ERROR;
}
…
サービスポートを使ってマップを取得
out型引数の使い方の例
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
5. 軌道計画
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
…
// 軌道計画の為のパラメータを調整
RTC::PathPlanParameter param;
param.map = outMap; // マップ
param.currentPose = this->m_currentPose.data; // スタート
param.targetPose = goal; // ゴール
param.distanceTolerance = 1.0; // 軌道からの位置のずれの許容差
param.headingTolerance = 1.0; // 軌道からの角度のずれの許容差
param.maxSpeed.vx = 5.0; param.maxSpeed.vy = 0.0; param.maxSpeed.va = 1.0; // 最大速度
param.timeLimit.sec = 9999; param.timeLimit.nsec = 0; // 許容時間
RTC::Path2D_var outPath; // 軌道を格納するための変数
retval = m_pathPlanner->planPath(param, outPath);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功
std::cout << "[RTC::StringCommander] Path Plan OK." << std::endl;
} else if (retval == RTC::RETURN_VALUE::RETVAL_NOT_FOUND) { // 見つからない (通常終了)
std::cout << "[RTC::StringCommander] Path Plan No Path Found" << std::endl;
return RTC::RTC_OK;
} else {
std::cout << "[RTC::StringCommander] Path Plan Unknown Error Code =" << retval << std::endl;
return RTC::RTC_ERROR;
}
…
サービスポートを使って軌道を取得 (out型引数)
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
6. 軌道追従
RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id)
{
…
// 軌道追従を要求.終了するまでfollowPathはブロックする
retval = m_pathFollower->followPath(outPath);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功
std::cout << "[RTC::StringCommander] Follow OK." << std::endl;
} else { // 失敗も通常終了
std::cout << "[RTC::StringCommander] Follow Unknown Error Code =" << retval << std::endl;
return RTC::RTC_OK;
}
} // if (m_commandIn.isNew()) に対応
followPathで起動追従.追従終了までブロック
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
{
// 現在のロボットの位置を取得
if (m_currentPoseIn.isNew()) {
m_currentPoseIn.read(); // m_currentPoseにデータが格納される
}
// 文字列コマンドを取得
if (m_commandIn.isNew()) {
m_commandIn.read(); // m_commandにデータが格納される
std::string data = m_command.data; // string型に変換
std::cout << "[RTC::StringCommander] Receive Command (" << data << ")" << std::endl;
// Goalを設定する
Pose2D goal;
if (data == "GOTO_A") { // string型は==演算子が使える
goal.position.x = 1.0;
goal.position.y = 1.0;
goal.heading = 1.57;
} else if (data == "GOTO_B") {
goal.position.x = 1.0;
goal.position.y = 0.0;
goal.heading = 0.0;
} else { // 知らないコマンドはエラーメッセージを表示
std::cout << "[RTC::StringCommander] Error. Unknown Command (" << data << ")" << std::endl;
return RTC::RTC_OK; // onExecuteから通常終了
}
// 現在地と目的地が定まる
std::cout << "[RTC::StringCommander] Current Pose = (" << m_currentPose.data.position.x << ", "
<< m_currentPose.data.position.y << ", " << m_currentPose.data.heading << ")" << std::endl;
std::cout << "[RTC::StringCommander] Goal Pose = (" << goal.position.x << ", "
<< goal.position.y << ", " << goal.heading << ")" << std::endl;
// マップを要求する
RTC::OGMap_var outMap; // マップを格納するための変数
RTC::RETURN_VALUE retval = this->m_OGMapServer->requestCurrentBuiltMap(outMap);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) {
std::cout << "[RTC::StringCommander] Map Request OK." << std::endl;
} else {
std::cout << "[RTC::StringCommander] Map Request Unknown Error Code =" << retval << std::endl;
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
// 軌道計画の為のパラメータを調整
RTC::PathPlanParameter param;
param.map = outMap; // マップ
param.currentPose = this->m_currentPose.data; // スタート
param.targetPose = goal; // ゴール
param.distanceTolerance = 1.0; // 軌道からの位置のずれの許容差
param.headingTolerance = 1.0; // 軌道からの角度のずれの許容差
param.maxSpeed.vx = 5.0; param.maxSpeed.vy = 0.0; param.maxSpeed.va = 1.0; // 最大速度
param.timeLimit.sec = 9999; param.timeLimit.nsec = 0; // 許容時間
RTC::Path2D_var outPath; // 軌道を格納するための変数
retval = m_pathPlanner->planPath(param, outPath);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功
std::cout << "[RTC::StringCommander] Path Plan OK." << std::endl;
} else if (retval == RTC::RETURN_VALUE::RETVAL_NOT_FOUND) { // 見つからない (通常終了)
std::cout << "[RTC::StringCommander] Path Plan No Path Found" << std::endl;
return RTC::RTC_OK;
} else {
std::cout << "[RTC::StringCommander] Path Plan Unknown Error Code =" << retval << std::endl;
return RTC::RTC_ERROR;
}
// 軌道追従を要求.終了するまでfollowPathはブロックする
retval = m_pathFollower->followPath(outPath);
if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功
std::cout << "[RTC::StringCommander] Follow OK." << std::endl;
} else { // 失敗も通常終了
std::cout << "[RTC::StringCommander] Follow Unknown Error Code =" << retval << std::endl;
return RTC::RTC_OK;
}
} // if (m_commandIn.isNew()) に対応
return RTC::RTC_OK;
}
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
さらなる改良案
ゴール名とゴール位置・姿勢を外部ファイルにして
読み込む
yamlファイルなどが使い易い
ファイル名をコンフィグレーションにする
文字列を音声認識で出力する (OpenHRIを使う)
GOTO_A : [1.0, 1.0, 0.0],
GOTO_B : [1.0, 0.0, 1.57],
GOTO_C : [1.0, -1.0, 0.0]
日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日
菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室
まとめ
台車移動ロボットナビゲーション用フレームワーク
の紹介
ナビゲーション用フレームワークのカスタマイズ方
法の紹介
今後もアップデートを続けていきます
ソースコードのダウンロードもこちらから
http://ogata-lab.jp/ja/technology_ja.html

More Related Content

What's hot

Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)openrtm
 
Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)openrtm
 
Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部openrtm
 
2015 summercamp 05
2015 summercamp 052015 summercamp 05
2015 summercamp 05openrtm
 
Robomec2014 rtm講習会第2部
Robomec2014 rtm講習会第2部Robomec2014 rtm講習会第2部
Robomec2014 rtm講習会第2部openrtm
 
OpenRTM概要
OpenRTM概要OpenRTM概要
OpenRTM概要openrtm
 
Robomec2015講習会 150517 01
Robomec2015講習会 150517 01Robomec2015講習会 150517 01
Robomec2015講習会 150517 01openrtm
 
2013 summercamp 04
2013 summercamp 042013 summercamp 04
2013 summercamp 04openrtm
 
Rtm・ros相互運用プログラミング環境
Rtm・ros相互運用プログラミング環境Rtm・ros相互運用プログラミング環境
Rtm・ros相互運用プログラミング環境openrtm
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会openrtm
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04openrtm
 
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会openrtm
 
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組みopenrtm
 
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017openrtm
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)openrtm
 
130522 01
130522 01130522 01
130522 01openrtm
 
ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1openrtm
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 openrtm
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会openrtm
 
130522 00
130522 00130522 00
130522 00openrtm
 

What's hot (20)

Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)
 
Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)
 
Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部
 
2015 summercamp 05
2015 summercamp 052015 summercamp 05
2015 summercamp 05
 
Robomec2014 rtm講習会第2部
Robomec2014 rtm講習会第2部Robomec2014 rtm講習会第2部
Robomec2014 rtm講習会第2部
 
OpenRTM概要
OpenRTM概要OpenRTM概要
OpenRTM概要
 
Robomec2015講習会 150517 01
Robomec2015講習会 150517 01Robomec2015講習会 150517 01
Robomec2015講習会 150517 01
 
2013 summercamp 04
2013 summercamp 042013 summercamp 04
2013 summercamp 04
 
Rtm・ros相互運用プログラミング環境
Rtm・ros相互運用プログラミング環境Rtm・ros相互運用プログラミング環境
Rtm・ros相互運用プログラミング環境
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04
 
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
 
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
 
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)
 
130522 01
130522 01130522 01
130522 01
 
ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会
 
130522 00
130522 00130522 00
130522 00
 

Viewers also liked

Rtmsc2015 group5
Rtmsc2015 group5Rtmsc2015 group5
Rtmsc2015 group5openrtm
 
Rtmsc2015 group2
Rtmsc2015 group2Rtmsc2015 group2
Rtmsc2015 group2openrtm
 
Rtmsc2015 group3
Rtmsc2015 group3Rtmsc2015 group3
Rtmsc2015 group3openrtm
 
Rtmsc2015 group4
Rtmsc2015 group4Rtmsc2015 group4
Rtmsc2015 group4openrtm
 
2015 summercamp 06
2015 summercamp 062015 summercamp 06
2015 summercamp 06openrtm
 
2015 summercamp 07
2015 summercamp 072015 summercamp 07
2015 summercamp 07openrtm
 
Rtmsc2015 group1
Rtmsc2015 group1Rtmsc2015 group1
Rtmsc2015 group1openrtm
 
2015 summercamp 03
2015 summercamp 032015 summercamp 03
2015 summercamp 03openrtm
 
2015 summercamp 02
2015 summercamp 022015 summercamp 02
2015 summercamp 02openrtm
 
2015 summercamp 10
2015 summercamp 102015 summercamp 10
2015 summercamp 10openrtm
 
グループ1最終プレゼン資料
グループ1最終プレゼン資料グループ1最終プレゼン資料
グループ1最終プレゼン資料openrtm
 
グループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだグループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだopenrtm
 
2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組みopenrtm
 
2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法openrtm
 
グループ4 ロボットで福笑い
グループ4 ロボットで福笑いグループ4 ロボットで福笑い
グループ4 ロボットで福笑いopenrtm
 
グループ2 Gprese
グループ2 Gpreseグループ2 Gprese
グループ2 Gpreseopenrtm
 
2016 summercamp rtshell入門
2016 summercamp rtshell入門2016 summercamp rtshell入門
2016 summercamp rtshell入門openrtm
 

Viewers also liked (17)

Rtmsc2015 group5
Rtmsc2015 group5Rtmsc2015 group5
Rtmsc2015 group5
 
Rtmsc2015 group2
Rtmsc2015 group2Rtmsc2015 group2
Rtmsc2015 group2
 
Rtmsc2015 group3
Rtmsc2015 group3Rtmsc2015 group3
Rtmsc2015 group3
 
Rtmsc2015 group4
Rtmsc2015 group4Rtmsc2015 group4
Rtmsc2015 group4
 
2015 summercamp 06
2015 summercamp 062015 summercamp 06
2015 summercamp 06
 
2015 summercamp 07
2015 summercamp 072015 summercamp 07
2015 summercamp 07
 
Rtmsc2015 group1
Rtmsc2015 group1Rtmsc2015 group1
Rtmsc2015 group1
 
2015 summercamp 03
2015 summercamp 032015 summercamp 03
2015 summercamp 03
 
2015 summercamp 02
2015 summercamp 022015 summercamp 02
2015 summercamp 02
 
2015 summercamp 10
2015 summercamp 102015 summercamp 10
2015 summercamp 10
 
グループ1最終プレゼン資料
グループ1最終プレゼン資料グループ1最終プレゼン資料
グループ1最終プレゼン資料
 
グループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだグループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだ
 
2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み
 
2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法
 
グループ4 ロボットで福笑い
グループ4 ロボットで福笑いグループ4 ロボットで福笑い
グループ4 ロボットで福笑い
 
グループ2 Gprese
グループ2 Gpreseグループ2 Gprese
グループ2 Gprese
 
2016 summercamp rtshell入門
2016 summercamp rtshell入門2016 summercamp rtshell入門
2016 summercamp rtshell入門
 

Similar to 2015 summercamp 04

Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)NTT DATA OSS Professional Services
 
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~Dai Iwai
 
ソフトウエアジャパン2017 IT Forum AITC(6)
ソフトウエアジャパン2017 IT Forum AITC(6)ソフトウエアジャパン2017 IT Forum AITC(6)
ソフトウエアジャパン2017 IT Forum AITC(6)aitc_jp
 
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣aslead
 
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版Tomoaki Sawada
 
クラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポートクラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポートMasayuki KaToH
 
Extending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanExtending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanShigeru Hanada
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1openrtm
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaHidenori Fujioka
 
150629 02
150629 02150629 02
150629 02openrtm
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大openrtm
 
130719 02
130719 02130719 02
130719 02openrtm
 
ロボットサービス開発の現場から
ロボットサービス開発の現場からロボットサービス開発の現場から
ロボットサービス開発の現場からKohei Kojima
 
伊藤・坂村先生ディスカッション資料
伊藤・坂村先生ディスカッション資料伊藤・坂村先生ディスカッション資料
伊藤・坂村先生ディスカッション資料Masaki Ito
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBMToshiki Tsuboi
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化耕二 阿部
 

Similar to 2015 summercamp 04 (20)

Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
 
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
 
ソフトウエアジャパン2017 IT Forum AITC(6)
ソフトウエアジャパン2017 IT Forum AITC(6)ソフトウエアジャパン2017 IT Forum AITC(6)
ソフトウエアジャパン2017 IT Forum AITC(6)
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
 
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣
Mattermostが働き方を劇的改善!NRIの働き方改革の秘訣
 
Example using LattePanda
Example  using LattePandaExample  using LattePanda
Example using LattePanda
 
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版
プライベートクラウドの動向とIT業へのインパクト(インタリオセミナー072409)最終版
 
クラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポートクラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポート
 
なぜ今OSGiか
なぜ今OSGiかなぜ今OSGiか
なぜ今OSGiか
 
Extending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanExtending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 Japan
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by Iida
 
IoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL EdgeIoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL Edge
 
150629 02
150629 02150629 02
150629 02
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
130719 02
130719 02130719 02
130719 02
 
ロボットサービス開発の現場から
ロボットサービス開発の現場からロボットサービス開発の現場から
ロボットサービス開発の現場から
 
伊藤・坂村先生ディスカッション資料
伊藤・坂村先生ディスカッション資料伊藤・坂村先生ディスカッション資料
伊藤・坂村先生ディスカッション資料
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化
 

More from openrtm

ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部openrtm
 
ピッキングシステム
ピッキングシステムピッキングシステム
ピッキングシステムopenrtm
 
GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画openrtm
 
まねっこロボット
まねっこロボットまねっこロボット
まねっこロボットopenrtm
 
商品自動補充ロボットシステム
商品自動補充ロボットシステム商品自動補充ロボットシステム
商品自動補充ロボットシステムopenrtm
 
RTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptxRTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptxopenrtm
 
SysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfSysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfopenrtm
 
RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfopenrtm
 
NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部openrtm
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)openrtm
 
4.総合演習(1)
4.総合演習(1)4.総合演習(1)
4.総合演習(1)openrtm
 
3.RTCプログラミング演習
3.RTCプログラミング演習3.RTCプログラミング演習
3.RTCプログラミング演習openrtm
 
2.プログラミングの基礎
2.プログラミングの基礎2.プログラミングの基礎
2.プログラミングの基礎openrtm
 
1.コース概要
1.コース概要1.コース概要
1.コース概要openrtm
 
Slam実習
Slam実習Slam実習
Slam実習openrtm
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門openrtm
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門openrtm
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦openrtm
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1openrtm
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2openrtm
 

More from openrtm (20)

ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部
 
ピッキングシステム
ピッキングシステムピッキングシステム
ピッキングシステム
 
GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画
 
まねっこロボット
まねっこロボットまねっこロボット
まねっこロボット
 
商品自動補充ロボットシステム
商品自動補充ロボットシステム商品自動補充ロボットシステム
商品自動補充ロボットシステム
 
RTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptxRTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptx
 
SysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfSysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdf
 
RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdf
 
NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)
 
4.総合演習(1)
4.総合演習(1)4.総合演習(1)
4.総合演習(1)
 
3.RTCプログラミング演習
3.RTCプログラミング演習3.RTCプログラミング演習
3.RTCプログラミング演習
 
2.プログラミングの基礎
2.プログラミングの基礎2.プログラミングの基礎
2.プログラミングの基礎
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
 
Slam実習
Slam実習Slam実習
Slam実習
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (12)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

2015 summercamp 04

  • 1. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTコンポーネント 作成応用編 サービスポートの作り方 株式会社SSR × 早大基幹理工表現工学科尾形研究室 菅 佑樹
  • 2. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 サービスポートの概念 OpenRTM-aistの機能 RTCに関数呼び出しのインターフェースを付加 引数でデータを渡す 返り値でデータを受け取る データポートと比べて データを要求することができる データの送受信の結果が得られる(成否など) データの送受信に関わらない処理を実現できる reset, initializeなど 若干実装が面倒
  • 3. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 サービスポートの概念 • サービスポートは「インターフェース」を 持つ • インターフェースには極性 (Polarity) が ある • 提供 (Provided) • リソースを提供する.関数が呼ばれ る側. • 要求 (Required) • リソースを利用する.関数を呼ぶ側 . • 一つのサービスポートが複数の提供・要求 インターフェースを持つことができる • インターフェースのタイプが合えば接続で き,利用できる. RTC1 RTC2 ProvidedRequired Service Port
  • 4. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 サービスポート作成の流れ • サービスポートを追加 • 設定項目 • サービスポート名 • インターフェースを追加 • 設定項目 • インターフェース名* • インスタンス名 • 極性 (Polarity) • インターフェース型 • 注意! • インターフェース名が違うと繋げるのが面倒になる! • インターフェース型を定義するファイルを作成 (IDLファイル) RTC Interface Name : Interface Type Port Name
  • 5. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Interface Definition Language サービスポートの関数やデータ型を宣言するためのファイル形式 (.idlファイル) CORBAやDDSなどの分散処理実現のために使われる Javaに似た形式 オブジェクト指向 IDLファイルをコンパイルすると,C++やJava, Pythonのプログラムのスケルト ンが生成される IDLは中間言語 C++やJavaなどの実装言語に変換すると,各言語ごとに若干利用方法が変わ るが,関数名などは変わらない 今回はC++版を少しだけ解説
  • 6. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLの書き方 • moduleで名前空間を定義 • 後述のインターフェース名は同じ名前になりがちな ので名前空間で分ける • interfaceでインターフェース名を定義 • 機能をグループ化 • interface内で関数を定義 • 返り値,引数リスト,Javaとほぼ同じ構文 • 引数にin/outを設定 • in ・・・インターフェース提供側に引数を渡す (値 渡し) • out ・・・インターフェース提供側が引数にデータ を設定する (参照渡し) • inout ・・・インターフェース提供側に引数データ を渡し,提供側がさらにそれを変更する // 行コメント // moduleはC++のネームスペースに似た概念 module my_module { // interfaceはJavaのインターフェース, // C++の仮想クラスに似ている. // メンバ関数を定義する interface MyInterface { // 返り値でデータを受け取るタイプの関数 long getLongData(); // 引数でデータを与えるタイプの関数 void setLongData(in long data); // 引数に参照渡しでデータを // 受け取ることもできる void getDataByArg(out long data); }; };
  • 7. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLの書き方 • structで構造体を定義できる • 異なるタイプのデータの集 まり • 引数にも,返り値にも使える • structでデータ型を定義できれ ば,データポートの独自データ 型作成ができる • 参考: http://ysuga.net/?p=213 module my_module { // 構造体を宣言することでプログラムを構造化できる struct MyData { long data1; long data2; double data3; }; interface MyInterface { // 返り値でデータを受け取るタイプの関数 MyData getMyData(); // 引数でデータを与えるタイプの関数 void setMyData(in MyData data); // 引数に参照渡しでデータを受け取ることもできる void getMyDataByArg(out MyData data); }; };
  • 8. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLの書き方 • typedefでデータ型の名称変更 • enumで定数を作る • sequenceで可変長のデータを 作成できる // typedef を使ってラベルを変更できる. typedef long ERROR_CODE; // enumを使って数にラベルを付けられる enum MY_STATE { STATE_RUNNING, STATE_HALT, STATE_ERROR }; enum RETURN_CODE { RETURN_OK, RETURN_ERROR }; struct MyData { ERROR_CODE errorCode; My_STATE state; sequence<double> data; // sequenceを使うと可変長の配列を使う }; interface MyInterface { // 引数でデータを与えるタイプの関数 // 返り値で処理の成否を返すことができる RETURN_CODE setMyData(in MyData data); // 引数に参照渡しでデータを受け取ることもできる // 返り値で処理の成否を返すことができる RETURN_CODE getMyDataByArg(out MyData data); };
  • 9. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTC Builderの使い方 Eclipseのプラグインのアップデートが必要 メニュー > Help > 「Install New Software」 起動したダイアログの「Add」を押す Locationに「 http://openrtm.org/pub/openrtp/stable/update s/ 」と入力 OpenRTP 1.1.0 を選択して「Next」から インストールする
  • 10. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTC Builder • 「サービスポート」タブ選択 • 「Add Port」でポート追加 • 「ポート名」を設定 • 「Add Interface」でインターフェース追加 • 「インターフェース名」「方向」「インスタ ンス名」「変数名」を設定 • 「IDLファイル」の「Browse」ボタンでIDL を読み込む • 「インターフェース型」を選択 • 「IDLパス」は「IDLファイルがあったフォ ルダを選択」
  • 11. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ビルド方法 CMake RTCBuilderが古いと失敗する Visual Studio この中でomniidlというコマンドでIDLをコンパイルするが,Python版がインストールされていると問題が 起こることがある PATHの設定によっては,Python版のomniidlが優先して見つかるため,C++にコンパイルできない → PATHの最初にC++版のomniidl.exeのPATHを設定しなおす IDLはビルドできてる (** Not Foundのようなエラーは無い) のにコンパイルできない サービスポートを簡易に実行するためのヘルパークラスが生成されるが,独自のIDLパーサーを使って いるため問題が多い → 最初は構造体などをあまり使わずに → openrtmのメーリングリストに通報 → IDLコンパイルでidlファイル名.hhというファイルが生成される.その中のインターフェースをヘ ルパークラスがオーバーライドしているので,返り値の型などを手動で直すとコンパイルできること がある
  • 12. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 コーディング方法例 (提供側) my_module::RETURN_CODE MyInterfaceSVC_impl::setMyData(const my_module::MyData& data) { my_module::RETURN_CODE result; if (data.errorCode == 0) { result = my_module::RETURN_OK; } else { result = my_module::RETURN_ERROR; } for(int i = 0;i < data.data.length();i++) { std::cout << "Data " << i << " is " << data.data[i] << std::endl; } return result; } my_module::RETURN_CODE MyInterfaceSVC_impl::getMyDataByArg(my_module::MyData_out data) { my_module::RETURN_CODE result = my_module::RETURN_OK; my_module::MyData_var myData = new my_module::MyData; myData->state = my_module::STATE_RUNNING; myData->errorCode = 0; myData->data.length(4); myData->data[0] = 0.1; myData->data[1] = 0.3; myData->data[2] = 0.5; myData->data[3] = 0.7; data = myData._retn(); return result; } module my_module { // typedef を使ってラベルを変更できる. typedef long ERROR_CODE; // enumを使って数にラベルを付けられる enum MY_STATE { STATE_RUNNING, STATE_HALT, STATE_ERROR }; enum RETURN_CODE { RETURN_OK, RETURN_ERROR }; struct MyData { ERROR_CODE errorCode; My_STATE state; sequence<double> data; // sequenceを使うと可変長の配列を使う }; interface MyInterface { // 引数でデータを与えるタイプの関数 // 返り値で処理の成否を返すことができる RETURN_CODE setMyData(in MyData data); // 引数に参照渡しでデータを受け取ることもできる // 返り値で処理の成否を返すことができる RETURN_CODE getMyDataByArg(out MyData data); }; }; シンプルな関数呼び出しになる out型引数は_var型を使う
  • 13. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 コーディング方法例 (要求側) my_module::MyData data; data.errorCode = 0; data.state = my_module::STATE_HALT; data.data.length(3); data.data[0] = 1.2; data.data[1] = 1.4; data.data[2] = 1.8; if(m_variableName->setMyData(data) != my_module::RETURN_OK) { std::cout << "[YourModule] setMyData failed." << std::endl; } my_module::MyData_var yourData = new my_module::MyData(); if(m_variableName->getMyDataByArg(yourData) != my_module::RETURN_OK) { std::cout << "[YourModule] getMyData failed." << std::endl; } std::cout << "[YourModule] getMyData succeeded." << std::endl; std::cout << " errorCode : " << yourData->errorCode << std::endl; std::cout << " state : " << yourData->state << std::endl; std::cout << " data : ["; for(int i = 0;i < yourData->data.length();i++) { std::cout << yourData->data[i] << ", "; } std::cout << "]" << std::endl; module my_module { // typedef を使ってラベルを変更できる. typedef long ERROR_CODE; // enumを使って数にラベルを付けられる enum MY_STATE { STATE_RUNNING, STATE_HALT, STATE_ERROR }; enum RETURN_CODE { RETURN_OK, RETURN_ERROR }; struct MyData { ERROR_CODE errorCode; My_STATE state; sequence<double> data; // sequenceを使うと可変長の配列を使う }; interface MyInterface { // 引数でデータを与えるタイプの関数 // 返り値で処理の成否を返すことができる RETURN_CODE setMyData(in MyData data); // 引数に参照渡しでデータを受け取ることもできる // 返り値で処理の成否を返すことができる RETURN_CODE getMyDataByArg(out MyData data); }; }; シンプルな関数呼び出しになる out型引数は_var型を使う
  • 14. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 サービスポートの接続 • インターフェース名が同じであ れば,問題なく接続できる. • インターフェース名が違う場合 は,「接続できるインターフェ ースがない」と言われるが,詳 細ダイアログで接続するインタ ーフェースを選択すると接続で きるようになる.
  • 15. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 まとめ サービスポートについて紹介 サービスポートの作成方法について紹介 IDLについて紹介 C++版のサービスポートの実装方法について紹介
  • 16. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTM対応 移動ロボット ナビゲーション フレームワーク 株式会社SSR × 早大基幹理工表現工学科尾形研究室 菅 佑樹
  • 17. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTM対応 移動ロボット ナビゲーションフレームワーク 台車型移動ロボットのナビゲーションが目的 すべてオープンソース マップ作成 SLAMのみ 地図を用いたナビゲーション レーザーレンジセンサーを用いた位置推定 軌道計画 軌道追従 機能ごとにモジュール化しており,インターフェースを共通化して,入替えが可能 例:独自の移動ロボットを適用 例:独自のプランニング・パスフォロワーを適用 基本操作が可能なGUIを準備
  • 18. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTM対応 移動ロボット ナビゲーションフレームワーク MRPT版 環境 C++版 OpenRTM-aist 1.1.0 C++ VC2010版 MRPT 1.0.2 for Visual Studio 2010版 Visual C++ 2010 その他,OpenRTM-aist開発に必要なツール Java版 OpenRTM-aist 1.1.0 RC1
  • 19. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 フレームワークの特徴 上位のインターフェースはすべてサービスポート 処理の成功・失敗を返り値で受け取ることができる サービスロボットの上位処理はデータフロー的では なく,イベント的 MobileRobot.idlでインターフェースを定義済み これをインポートすればコンシューマ側は簡単に 作成できる
  • 20. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 MobileRobot.idl 移動ロボットナビゲーションに関わるインターフェ ースやデータ型を定義 OpenRTM-aist同梱のExtendedDataTypes.idlや InterfaceDataTypes.idlを再利用 統一されたインターフェース設計思想 値渡しでデータを渡し,参照渡しでデータを受け 取る.返り値で処理の成否を受け取る
  • 21. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイル#include "BasicDataType.idl" #include "ExtendedDataTypes.idl" #include "InterfaceDataTypes.idl" module RTC { /*! * @struct OCMap * @brief OccupancyGridMap Data */ struct OGMap { /// Time stamp. Time tm; /// OccupancyGridMap Configuration OGMapConfig config; /// OccupancyGridMap Data OGMapTile map; }; /*! * @struct OGMapConfig * @brief Configuration of a occupancy-grip map. */ struct OGMapConfig { /// Scale on the x axis (metres per cell). double xScale; /// Scale on the y axis (metres per cell). double yScale; /// Number of cells along the x axis. unsigned long width; /// Number of cells along the y axis. unsigned long height; /// Pose of the cell at (0, 0) in the real world. Pose2D origin; }; /*! * @typedef OGMapCells */ typedef sequence<octet> OGMapCells; /*! * @struct OGMapTile * @brief A tile from an occupancy-grid map. */ struct OGMapTile { /// X coordinate of the (0, 0) cell of this tile in the whole map. unsigned long column; /// Y coordinate of the (0, 0) cell of this tile in the whole map. unsigned long row; /// Number of cells along the x axis in this tile; unsigned long width; /// Number of cells along the y axis in this tile; unsigned long height; /// Tile cells in (row, column) order. OGMapCells cells; OGMapはマップデータ OGMapConfig型や OGMapTile型は InterfaceDataTypes.idl で定義されている MobileRobot.idl InterfaceDataTypes.idl
  • 22. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイルenum RETURN_VALUE { // COMMON RETVAL_OK, RETVAL_INVALID_PARAMETER, RETVAL_EMPTY_MAP, RETVAL_INVALID_PRECONDITION, RETVAL_NOT_IMPL, RETVAL_UNKNOWN_ERROR, RETVAL_NOT_FOUND, RETVAL_ODOMETRY_INVALID_VALUE, RETVAL_ODOMETRY_TIME_OUT, RETVAL_RANGE_INVALID_VALUE, RETVAL_RANGE_TIME_OUT, RETVAL_EMERGENCY_STOP, RETVAL_OUTOF_RANGE }; enum MAPPER_STATE { MAPPER_STOPPED, MAPPER_MAPPING, MAPPER_SUSPEND, MAPPER_ERROR, MAPPER_UNKNOWN }; enum FOLLOWER_STATE { FOLLOWER_STOPPED, FOLLOWER_FOLLOWING, FOLLOWER_SUSPEND, FOLLOWER_ERROR, FOLLOWER_UNKNOWN enumで返り値の基本値 (RETURN_VALUE) や, MapperやFollowerの状態み関する変数が定義されている MobileRobot.idl
  • 23. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイル/*! * @interface OGMapper * @brief Occupancy Grid Map Builder Service Interface */ interface OGMapper { /// Initialize Current Build Map Data RETURN_VALUE initializeMap(in OGMapConfig config, in Pose2D initialPose); RETURN_VALUE startMapping(); RETURN_VALUE stopMapping(); RETURN_VALUE suspendMapping(); RETURN_VALUE resumeMapping(); RETURN_VALUE getState(out MAPPER_STATE state); /// Request Current Build Map Data RETURN_VALUE requestCurrentBuiltMap(out OGMap map); }; OGMapperはマップ作成用インターフェース startMappingでマップ作成開始 stopMappingでマップ作成終了 requestCurrentBuiltMapで現在のマップ要求 /*! * @interface OGMapServer * @brief Occupancy Grid Map Service Interface */ interface OGMapServer { /// Request Current Build Map Data RETURN_VALUE requestCurrentBuiltMap(out OGMap map); }; OGMapServerはマップを単純に配信するための インターフェース requestCurrentBuiltMapでマップを取得
  • 24. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイル struct PathPlanParameter { //Environmental Map OGMap map; /// Location of the goal. Pose2D targetPose; /// Location of Robot. Pose2D currentPose; /// How far away from the waypoint is considered success (radius in metres). double distanceTolerance; /// How much off the target heading is considered success (in radians). double headingTolerance; /// Target time to arrive at the waypoint by. Time timeLimit; /// Maximum sped to travel at while heading to the waypoint. Velocity2D maxSpeed; }; interface PathPlanner { /// Plan Path from PathPlanParater. RETURN_VALUE planPath(in PathPlanParameter param, out Path2D outPath); }; interface PathFollower { RETURN_VALUE followPath(in Path2D path); RETURN_VALUE getState(out FOLLOWER_STATE state); RETURN_VALUE followPathNonBlock(in Path2D path); }; PathPlannerは軌道計画のためのインターフェース planPathで軌道計画をする PathPlanParameterは,PathPlannerに 渡すためのパラメータ構造体 PathFollowerは軌道追従のためのインターフェース
  • 25. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイル/*! * @struct Waypoint2D * @brief A waypoint in 2D space, including constraints. */ struct Waypoint2D { /// Location of the waypoint. Pose2D target; /// How far away from the waypoint is considered success (radius in metres). double distanceTolerance; /// How much off the target heading is considered success (in radians). double headingTolerance; /// Target time to arrive at the waypoint by. Time timeLimit; /// Maximum sped to travel at while heading to the waypoint. Velocity2D maxSpeed; }; /*! * @typedef Waypoint2DList */ typedef sequence<Waypoint2D> Waypoint2DList; /*! * @struct Path2D * @brief A time-stamped path in 2D space. */ struct Path2D { /// Time stamp. Time tm; /// The sequence of waypoints that make up the path. Waypoint2DList waypoints; }; Path2DはWaypoint2Dの配列 Waypointは,目標位置姿勢, 距離・角度許容差, タイムリミットや最大速度が入る
  • 26. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 IDLファイル全文 (MobileRobot.idl) #include "BasicDataType.idl" #include "ExtendedDataTypes.idl" #include "InterfaceDataTypes.idl" module RTC { /*! * @struct OCMap * @brief OccupancyGridMap Data */ struct OGMap { /// Time stamp. Time tm; /// OccupancyGridMap Configuration OGMapConfig config; /// OccupancyGridMap Data OGMapTile map; }; enum RETURN_VALUE { // COMMON RETVAL_OK, RETVAL_INVALID_PARAMETER, RETVAL_EMPTY_MAP, RETVAL_INVALID_PRECONDITION, RETVAL_NOT_IMPL, RETVAL_UNKNOWN_ERROR, RETVAL_NOT_FOUND, RETVAL_ODOMETRY_INVALID_VALUE, RETVAL_ODOMETRY_TIME_OUT, RETVAL_RANGE_INVALID_VALUE, RETVAL_RANGE_TIME_OUT, RETVAL_EMERGENCY_STOP, RETVAL_OUTOF_RANGE }; enum MAPPER_STATE { MAPPER_STOPPED, MAPPER_MAPPING, MAPPER_SUSPEND, MAPPER_ERROR, MAPPER_UNKNOWN }; enum FOLLOWER_STATE { FOLLOWER_STOPPED, FOLLOWER_FOLLOWING, FOLLOWER_SUSPEND, FOLLOWER_ERROR, FOLLOWER_UNKNOWN /*! * @interface OGMapper * @brief Occupancy Grid Map Builder Service Interface */ interface OGMapper { /// Initialize Current Build Map Data RETURN_VALUE initializeMap(in OGMapConfig config, in Pose2D initialPose); RETURN_VALUE startMapping(); RETURN_VALUE stopMapping(); RETURN_VALUE suspendMapping(); RETURN_VALUE resumeMapping(); RETURN_VALUE getState(out MAPPER_STATE state); /// Request Current Build Map Data RETURN_VALUE requestCurrentBuiltMap(out OGMap map); }; /*! * @interface OGMapServer * @brief Occupancy Grid Map Service Interface */ interface OGMapServer { /// Request Current Build Map Data RETURN_VALUE requestCurrentBuiltMap(out OGMap map); }; struct PathPlanParameter { //Environmental Map OGMap map; /// Location of the goal. Pose2D targetPose; /// Location of Robot. Pose2D currentPose; /// How far away from the waypoint is /// considered success (radius in metres). double distanceTolerance; /// How much off the target heading /// is considered success (in radians). double headingTolerance; /// Target time to arrive at the waypoint by. Time timeLimit; /// Maximum sped to travel /// at while heading to the waypoint. Velocity2D maxSpeed; struct PathPlanParameter { //Environmental Map OGMap map; /// Location of the goal. Pose2D targetPose; /// Location of Robot. Pose2D currentPose; /// How far away from the waypoint is considered /// success (radius in metres). double distanceTolerance; /// How much off the target heading is considered /// success (in radians). double headingTolerance; /// Target time to arrive at the waypoint by. Time timeLimit; /// Maximum sped to travel at while heading to the waypoin Velocity2D maxSpeed; }; interface PathPlanner { /// Plan Path from PathPlanParater. RETURN_VALUE planPath(in PathPlanParameter param, out Path2D outPath); }; interface PathFollower { RETURN_VALUE followPath(in Path2D path); RETURN_VALUE getState(out FOLLOWER_STATE state); RETURN_VALUE followPathNonBlock(in Path2D path); }; }; #endif
  • 27. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 マップの作成 • ロボットに北陽URG等のレーザース キャナを搭載 • ロボットの移動情報 (オドメトリ) とスキャン情報からマップを作成 • ロボットの移動はジョイスティック などで指令を送る
  • 28. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 マップ作成用フレームワーク (基本的な使い方)
  • 29. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 全RTC起動し図のように接続 Mapper_ALL.batで起動
  • 30. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 コンフィグレーションの設定 • UrgRTCのCOMポートをコンフィグ レーション (port_name) で指定 • geometry_x, y, zで,ロボットの座 標系 (車軸中心) からのオフセットを 指定 (単位[m])
  • 31. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 全RTC起動をアクティブ化
  • 32. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIの利用 • Start Mappingボタンでマッピ ング開始 • NavigationManagerの targetVelocityポートを接続し ていれば,右図のGUIジョイス ティックが起動 • ジョイスティック (黄色い円) を上に引っ張ると,ロボットが 前進 • 別のジョイスティックRTCを使 うことも可能 GUIジョイスティック Startボタン
  • 33. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIの利用 • Save Mapでマップを保存 • マップデータは二つのファイルで保存さ れる • ****.png : グリッドマップのデータ • ****.yaml : マップの原点やピクセル /長さの比の情報 Saveボタン
  • 34. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 マップ作成用フレームワーク (操作とRTシステムとの関係)
  • 35. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Start Mapping時 GUI SLAM マッピング開始命令 GUIからSLAMモジュールにマッピング開始を指示 *OGMapperインターフェース
  • 36. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Mapping中 スキャンデータ SLAM オドメトリ レンジスキャナのデータとロボットのオドメトリからマップを作成 ロボット レンジセンサ
  • 37. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Mapping中の表示 スキャンデータ SLAM 推定自己位置 ロボットの自己位置とスキャンデータをデータポートから取得 サービスポートで現在のマップデータを取得.重ねて表示 現在のマップデータを 要求し取得 レンジセンサ *OGMapperインターフェース
  • 38. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIジョイスティックでの操作 GUI SLAM 目標速度指令 targetVelocityをGUIから指示 ロボット
  • 39. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Save Map時 SLAM サービスポートで現在のマップデータを取得.保存. 現在のマップデータを 要求し取得 GUI *OGMapperインターフェース
  • 40. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 マップ作成用フレームワーク (各RTCの解説)
  • 41. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 北陽電機 URG • 主なコンフィグレーション • スキャナのロボット座標系での位 置,オフセット [m] • geometry_x • geometry_y • geometry_z • COMポート番号 (COM3とか) • port_name • レーザーセンサ URGのRTC • 出力ポート • range : RangeData • レーザースキャナ出力
  • 42. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 YPSpur対応RTC • 主なコンフィグレーション • 最大加速度 (activate時に更新) [m/s^2] • max_acc • max_rot_acc • 最大速度 (activate時に更新) [m/s] • max_vel • max_rot_vel • YPSpur対応RTコンポーネント • 入力ポート • targetVelocity : TimedVelocity2D • 目標速度 • poseUpdate : TimedPose2D • 現在位置の更新 • 出力ポート • currentVelocity : TimedVelocity2D • 現在速度 • currentPose : TimedPose2D • 推定自己位置 (オドメトリ)
  • 43. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Mapper_MRPT • SLAMモジュール (MRPTを利用) • 入力ポート • range : RangeData • LiDAR入力 • odometry : TimedPose2D • オドメトリ入力 • 出力ポート • estimatedPose : TimedPose2D • スキャンマッチ後の推定自己位置 • サービスポート • gridMapper : RTC::OGMapper (Provided) • マッピング開始・終了,マップ取得などの 操作 • 主なコンフィグレーション • x_max, x_min : X軸方向のマップ広さ初期値 [m] • y_max, y_min : Y軸方向のマップ広さ初期値 [m] • resolution : グリッドの解像度 [m]
  • 44. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 NavigationManager • ナビゲーション用GUI • 入力ポート • currentPose : TimedPose2D • ロボットの自己位置 (表示用) • range : RangeData • LiDAR入力 (表示用) • camera : CameraImage • カメラ画像表示 • 出力ポート • targetVelocity : TimedVelocity2D • GUIジョイスティックでの操作時に接続 • サービスポート • mapperService : RTC::OGMapper (Required) • SLAMモジュールを接続.マッピングの開始・ 終了・マップ取得
  • 45. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーション • ロボットに北陽URG等のレーザース キャナを搭載 • ロボットの移動情報 (オドメトリ) とスキャン情報をマップとマッチン グして自己位置を高精度に推定 • マップ情報から軌道計画を自動化 • 計画した軌道への自動的な追従
  • 46. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーション用フレームワーク (基本的な使い方)
  • 47. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 全RTCを起動し図のように接続 Navi_ALL.batで起動
  • 48. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 コンフィグレーションの設定 • UrgRTCのCOMポートをコンフ ィグレーション (port_name) で指定 • geometry_x, y, zで,ロボッ トの座標系 (車軸中心) からの オフセットを指定 (単位[m]) • MapServerのマップファイル のファイル名を設定 • ****.yamlを設定すること
  • 49. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 全RTCをActivate
  • 50. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIの利用 • MapServerにマップが読み込 まれていれば,マップが表示さ れ,ロボットの位置とレンジセ ンサのデータが表示される • マップ上の目標位置をクリック するとゴールを指定できる
  • 51. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIの利用 • マップ上のゴールを指定すると ,ゴールの姿勢を選択するダイ アログが表示される • 赤い円内をクリックすると,ゴ ール姿勢 (マップ座標系での姿 勢) を指定できるので,OKす る • マップ上に指定した姿勢でのゴ ールが出現する (円の中心が位 置,直線の伸びている方向がロ ボットのX方向)
  • 52. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 GUIの利用 • Plan Pathボタンでパスプラン ニング • Followボタンでロボットが追 従開始
  • 53. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーション用フレームワーク (操作とRTシステムとの関係)
  • 54. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Activate時 (自己位置推定) まず,MapServerにマップを要求して取得 オドメトリとスキャンデータからマップ内での自己位置を推定 ロボット スキャンデータ レンジセンサ オドメトリ マップデータを要求 *OGMapServerインターフェース
  • 55. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Activate時 (表示) GUIはまず,MapServerにマップを要求して取得 推定自己位置とスキャンデータをマップに重ねて表示 自己位置推定 スキャンデータ レンジセンサ 推定自己位置 マップデータを要求 GUI *OGMapServerインターフェース
  • 56. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ゴール設定時 GUI内で処理は完結.クリックした位置を表示したマップ上の位置 に変換して記録 自己位置推定 マップデータを要求 GUI *OGMapServerインターフェース
  • 57. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Plan Path時 ロボットの位置をスタート,指定されたゴール,MapServerから取得したマップ,パスフォロー の許容誤差等のパラメータを用いてPathPlannerにプランニングを要求し,Pathを取得・表示 自己位置推定RTC レンジセンサ 推定自己位置 GUI 軌道計画 *PathPlannerインターフェース
  • 58. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Follow時 目標軌道を引数として,軌道追従要求をPathFollowerに要求.成功・失敗を返り値として得る ロボットの自己位置と軌道を照らし合わせながら,ロボットの目標速度を送信 自己位置推定RTC 推定自己位置 GUI 軌道追従要求 ロボットへの速度指令 軌道追従RTC *PathFollowerインターフェース
  • 59. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーション用フレームワーク (各RTCの説明)
  • 60. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 北陽電機 URG • 主なコンフィグレーション • スキャナのロボット座標系での位 置,オフセット • geometry_x • geometry_y • geometry_z • COMポート番号 • port_name • レーザーセンサ URGのRTC • 出力ポート • range : RangeData • レーザースキャナ出力
  • 61. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 YPSpur対応RTC • 主なコンフィグレーション • 最大加速度 (activate時に更新) • max_acc • max_rot_acc • 最大速度 (activate時に更新) • max_vel • max_rot_vel • YPSpur対応RTコンポーネント • 入力ポート • targetVelocity : TimedVelocity2D • 目標速度 • poseUpdate : TimedPose2D • 現在位置の更新 • 出力ポート • currentVelocity : TimedVelocity2D • 現在速度 • currentPose : TimedPose2D • 推定自己位置 (オドメトリ)
  • 62. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 NavigationManager • ナビゲーション用GUI • 入力ポート • currentPose : TimedPose2D • ロボットの自己位置 (表示用) • range : RangeData • LiDAR入力 (表示用) • camera : CameraImage • カメラ画像表示 • 出力ポート • targetVelocity : TimedVelocity2D • GUIジョイスティックでの操作時に接続 • サービスポート • mapServer : RTC::OGMapServer • マップ配信モジュールを接続.マップ取得 • pathPlanner : RTC::PathPlanner • 軌道計画モジュールを接続 • pathFollower : RTC::PathFollower • 軌道追従モジュールを接続
  • 63. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 MapServer • マップデータを管理・出力 • サービスポート • mapServer : MapServer • マップデータの出力 • 主なコンフィグレーション • filename • マップデータのファイル名.Yamlファイルを指定す ること. • Yamlファイルとpngファイルは同じフォルダに配置 すること • 実行ディレクトリからの相対パスか,絶対パスで指 定. • よくわからなければC:¥map¥my_may.yamlな どが無難
  • 64. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 Localization_MRPT • モンテカルロ法による自己位置推定 • 入力ポート • range : RangeData • LiDAR入力 • odometry : TimedPose2D • オドメトリ • 出力ポート • estimatedPose : TimedPose2D • 推定自己位置 • サービスポート • mapServer : MapServer • マップデータの取得 • 主なコンフィグレーション • Dieter Fox,KLD-sampling: Adaptive particle filters. In Advances in Neural Information Processing Systems 14,2002
  • 65. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 PathPlanner_MRPT • パスプランニング (MRPT使用) • サービスポート • pathPlanner : PathPlanner • パスプランニング • 主なコンフィグレーション • 円柱型ロボット(と仮定した場合)の半径 • robotRadius • 軌道追従の位置・姿勢許容差 • pathDistanceTolerance • pathHeadingTolerance • 最終ゴール地点の位置・姿勢許容差 • goalDistanceTolerance • pathHeadingTolerance
  • 66. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 SimplePathFollower • Path2D型の経路への追従 • 入力ポート • currentPose : TimedPose2D • 現在位置 • 出力ポート • velocity : TimedVelocity2D • 目標速度 • サービスポート • pathFollower : PathFollower • パス追従命令取得 • 主なコンフィグレーション • distanceToTranslationGain • Pathとの位置のズレと並進移動速度のゲイン • distanceToRotationGain • Pathとの位置のズレと回転移動速度のゲイン • directionToTranslationGain • Pathとの向きのズレと並進移動速度のゲイン • directionToRotationGain • Pathとの向きのズレと回転移動速度のゲイン • approachDistanceGain • 最後の終着点との距離と速度のゲイン • approachDirectionGain • 最後の終着点の方向と回転速度のゲイン
  • 67. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 SimplePathFollowerアルゴリズム • 最近傍のパスを選ぶ (右図では1-2間) • 着目したパスとの有効距離をΔX,パス とロボットの向きの差分をΔHとする • ゲインから速度を計算する • Vx = K1 * ΔX + K2 * ΔH • Va = K3 * ΔX + K4 * ΔH • 近傍点のdistanceTolerannceよりもΔX が大きい場合は,OUT_OF_RANGEエ ラーを返してFollow終了 • ΔHが近傍点のheadingToleranceより も大きい場合は,Vxをゼロにする 1 0 3 2 4 ΔX ΔH • コンフィグレーションとの対応 • distanceToTranslationGain = K1 • Pathとの位置のズレと並進移動速度のゲイン • directionToTranslationGain = K2 • Pathとの向きのズレと並進移動速度のゲイン • distanceToRotationGain = K3 • Pathとの位置のズレと回転移動速度のゲイン • directionToRotationGain = K4 • Pathとの向きのズレと回転移動速度のゲイン
  • 68. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 SimplePathFollowerアルゴリズム • 最近傍パスがゴールを含む場合はゴールア プローチモードになる • まずゴール点まで移動 • ゴールとロボットとの距離をΔX • ゴール・ロボット間の直線とロボットの 向きとの差分をΔH • Vx = K5 * ΔX • Va = K6 * ΔH • ゴール点のdistanceTolerance内で停止 • ゴール点の姿勢までその場で回転し, headingToleranceに収まればゴール到達 m l n ΔX ΔH • 主なコンフィグレーションとの対応 • approachDistanceGain = K5 • 最後の終着点との距離と速度のゲイン • approachDirectionGain = K6 • 最後の終着点の方向と回転速度のゲイン
  • 69. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーションフレームワーク応用 フレームワークのカスタマイズ例 独自RTCによるフレームワークの利用
  • 70. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ナビゲーション機能の カスタマイズ
  • 71. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTCごとの入れ替え インターフェースが共通であれば,入れ替えは容易
  • 72. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ロボットRTCの入替え 独自ロボットへのナビゲーション機能の実装 TimedVelocity2D入力,TimedPose2D出力
  • 73. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 軌道計画RTCの改良 軌道計画アルゴリズムを改良 RRT-CONNECTなどの実装 PathPlannerサービスポート (Provided) を実装
  • 74. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 既存RTCの強化 外部のRTCと接続するインターフェースが共通であ れば,新たな入出力を追加することは可能
  • 75. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 軌道追従RTCの改良案 Urgからのスキャンデータを使って障害物を回避 ロボットの接触センサ情報を使って衝突時の緊急停止機能を追加 PathFollowerサービスポート (Provided) を実装 ロボットの自己位置 (TimedPose2D) を受け取って,速度指令 (TimedVelocity2D) を出力
  • 76. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTCの追加による フレームワーク機能強化 外部のRTCと接続するインターフェースが共通であ れば,新たな入出力とRTCを追加することが可能 フィルタリング センサーの増設とセンサーフュージョン
  • 77. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 自己位置同定の改良 IMUのRTCを使い,カルマンフィルタを実装して,レンジセンサを使わずに自己位置を出力 GPSを使って自己位置同定を改良 TimedVelocity2Dを受け取りロボットを動かし,TimedPose2Dでロボットの位置を送信 KF IMU
  • 78. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 フレームワーク管理 RTCの追加
  • 79. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 一番やりたいのはココですよね?
  • 80. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 移動ロボットへの指令を変更 • 例えば・・・ • 音声で「○○に行け」と言ったら,ゴールを自動的に指定して軌道 計画,追従を行う • 環境センサで状況を判断して自動的に○○を取ってくるロボット • 上位のサービスの設計をしましょう
  • 81. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 StringNavigationCommander • 文字列命令からゴール位置を設定して,軌道計画・ 追従を指令するコンポーネント • 入力ポート • command : TimedString • GOTO_Xのように指令文字列を受け取る • currentPose : TimedPose2D • 自己位置を取得 (軌道計画で必要) • サービスポート • mapServer : MapServer (Required) • マップを要求・取得 • pathPlanner : PathPlanner (Required) • 軌道計画を要求 • pathFollower : PathFollower (Required) • 軌道追従を要求
  • 82. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 StringNavigationManagerを 簡単に作成 • C:¥idlフォルダにIDLファイルをコピー • BasicDataType.idl • InterfaceDataTypes.idl • ExtendedDataTypes.idl • MobileRobot.idl • RTC Builderで新規プロジェクトを作成 • StringNavigationManagerフォルダのRTC.xmlをインポート
  • 83. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ポートの設定 • commandデータ入力ポート • currentPoseデータ入力ポート
  • 84. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ポートの設定 • mapServerサービスポート • Required • PathPlannerサービスポート • Required
  • 85. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 ポートの設定 • pathFollowerサービスポート • Required
  • 86. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 一旦,通常のビルドを行い 接続を確認 CMakeしてVC++2010でビルド ナビゲーション用RTC群を起動して,サービスポー トの接続を確認しておく
  • 87. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { if (自己位置データ受信してたら) { 自己位置を取得(); } if (文字列コマンド受信してたら) { 文字列コマンド取得(); if (コマンド == “GOTO_A”) { ゴール = (1.0, 0.0, 1.57); } else (コマンド == “GOTO_B”) { ゴール = (1.0, 1.0, 3.14); } else { return RTC::RTC_OK; // 何もせず終了 } マップ = マップ要求(); 軌道 = 軌道計画要求(マップ, ゴール, 自己位置, その他のパラメータ); 軌道追従要求(軌道); } return RTC::RTC_OK; } …自己位置取得① …文字列コマンド取得② …ゴール位置設定③ …マップ要求④ …軌道計画要求⑤ …軌道追従要求⑥
  • 88. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 1. 自己位置データ取得 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { // 現在のロボットの位置を取得 if (m_currentPoseIn.isNew()) { m_currentPoseIn.read(); } … 通常のデータポートの方法でデータを取得
  • 89. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 2. 文字列コマンド取得 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { … // 文字列コマンドを取得 if (m_commandIn.isNew()) { m_commandIn.read(); // m_commandにデータが格納される std::string data = m_command.data; // string型に変換 std::cout << "[RTC::StringCommander] Receive Command (" << data << ")" << std::endl; … 通常のデータポートの方法でデータを取得
  • 90. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 3. ゴール位置設定 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { … // Goalを設定する Pose2D goal; if (data == "GOTO_A") { // string型は==演算子が使える goal.position.x = 1.0; goal.position.y = 1.0; goal.heading = 1.57; } else if (data == "GOTO_B") { goal.position.x = 1.0; goal.position.y = 0.0; goal.heading = 0.0; } else { // 知らないコマンドはエラーメッセージを表示 std::cout << "[RTC::StringCommander] Error. Unknown Command (" << data << ")" << std::endl; return RTC::RTC_OK; // onExecuteから通常終了 } // 現在地と目的地が定まる std::cout << "[RTC::StringCommander] Current Pose = (" << m_currentPose.data.position.x << ", " << m_currentPose.data.position.y << ", " << m_currentPose.data.heading << ")" << std::endl; std::cout << "[RTC::StringCommander] Goal Pose = (" << goal.position.x << ", " << goal.position.y << ", " << goal.heading << ")" << std::endl; … 取得文字列からゴールを自動設定
  • 91. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 4. マップ要求 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { … // マップを要求する RTC::OGMap_var outMap; // マップを格納するための変数 RTC::RETURN_VALUE retval = this->m_OGMapServer->requestCurrentBuiltMap(outMap); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { std::cout << "[RTC::StringCommander] Map Request OK." << std::endl; } else { std::cout << "[RTC::StringCommander] Map Request Unknown Error Code =" << retval << std::endl; return RTC::RTC_ERROR; } … サービスポートを使ってマップを取得 out型引数の使い方の例
  • 92. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 5. 軌道計画 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { … // 軌道計画の為のパラメータを調整 RTC::PathPlanParameter param; param.map = outMap; // マップ param.currentPose = this->m_currentPose.data; // スタート param.targetPose = goal; // ゴール param.distanceTolerance = 1.0; // 軌道からの位置のずれの許容差 param.headingTolerance = 1.0; // 軌道からの角度のずれの許容差 param.maxSpeed.vx = 5.0; param.maxSpeed.vy = 0.0; param.maxSpeed.va = 1.0; // 最大速度 param.timeLimit.sec = 9999; param.timeLimit.nsec = 0; // 許容時間 RTC::Path2D_var outPath; // 軌道を格納するための変数 retval = m_pathPlanner->planPath(param, outPath); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功 std::cout << "[RTC::StringCommander] Path Plan OK." << std::endl; } else if (retval == RTC::RETURN_VALUE::RETVAL_NOT_FOUND) { // 見つからない (通常終了) std::cout << "[RTC::StringCommander] Path Plan No Path Found" << std::endl; return RTC::RTC_OK; } else { std::cout << "[RTC::StringCommander] Path Plan Unknown Error Code =" << retval << std::endl; return RTC::RTC_ERROR; } … サービスポートを使って軌道を取得 (out型引数)
  • 93. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 6. 軌道追従 RTC::ReturnCode_t StringNavigationCommander::onExecute(RTC::UniqueId ec_id) { … // 軌道追従を要求.終了するまでfollowPathはブロックする retval = m_pathFollower->followPath(outPath); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功 std::cout << "[RTC::StringCommander] Follow OK." << std::endl; } else { // 失敗も通常終了 std::cout << "[RTC::StringCommander] Follow Unknown Error Code =" << retval << std::endl; return RTC::RTC_OK; } } // if (m_commandIn.isNew()) に対応 followPathで起動追従.追従終了までブロック
  • 94. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 { // 現在のロボットの位置を取得 if (m_currentPoseIn.isNew()) { m_currentPoseIn.read(); // m_currentPoseにデータが格納される } // 文字列コマンドを取得 if (m_commandIn.isNew()) { m_commandIn.read(); // m_commandにデータが格納される std::string data = m_command.data; // string型に変換 std::cout << "[RTC::StringCommander] Receive Command (" << data << ")" << std::endl; // Goalを設定する Pose2D goal; if (data == "GOTO_A") { // string型は==演算子が使える goal.position.x = 1.0; goal.position.y = 1.0; goal.heading = 1.57; } else if (data == "GOTO_B") { goal.position.x = 1.0; goal.position.y = 0.0; goal.heading = 0.0; } else { // 知らないコマンドはエラーメッセージを表示 std::cout << "[RTC::StringCommander] Error. Unknown Command (" << data << ")" << std::endl; return RTC::RTC_OK; // onExecuteから通常終了 } // 現在地と目的地が定まる std::cout << "[RTC::StringCommander] Current Pose = (" << m_currentPose.data.position.x << ", " << m_currentPose.data.position.y << ", " << m_currentPose.data.heading << ")" << std::endl; std::cout << "[RTC::StringCommander] Goal Pose = (" << goal.position.x << ", " << goal.position.y << ", " << goal.heading << ")" << std::endl; // マップを要求する RTC::OGMap_var outMap; // マップを格納するための変数 RTC::RETURN_VALUE retval = this->m_OGMapServer->requestCurrentBuiltMap(outMap); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { std::cout << "[RTC::StringCommander] Map Request OK." << std::endl; } else { std::cout << "[RTC::StringCommander] Map Request Unknown Error Code =" << retval << std::endl;
  • 95. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 // 軌道計画の為のパラメータを調整 RTC::PathPlanParameter param; param.map = outMap; // マップ param.currentPose = this->m_currentPose.data; // スタート param.targetPose = goal; // ゴール param.distanceTolerance = 1.0; // 軌道からの位置のずれの許容差 param.headingTolerance = 1.0; // 軌道からの角度のずれの許容差 param.maxSpeed.vx = 5.0; param.maxSpeed.vy = 0.0; param.maxSpeed.va = 1.0; // 最大速度 param.timeLimit.sec = 9999; param.timeLimit.nsec = 0; // 許容時間 RTC::Path2D_var outPath; // 軌道を格納するための変数 retval = m_pathPlanner->planPath(param, outPath); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功 std::cout << "[RTC::StringCommander] Path Plan OK." << std::endl; } else if (retval == RTC::RETURN_VALUE::RETVAL_NOT_FOUND) { // 見つからない (通常終了) std::cout << "[RTC::StringCommander] Path Plan No Path Found" << std::endl; return RTC::RTC_OK; } else { std::cout << "[RTC::StringCommander] Path Plan Unknown Error Code =" << retval << std::endl; return RTC::RTC_ERROR; } // 軌道追従を要求.終了するまでfollowPathはブロックする retval = m_pathFollower->followPath(outPath); if (retval == RTC::RETURN_VALUE::RETVAL_OK) { // 成功 std::cout << "[RTC::StringCommander] Follow OK." << std::endl; } else { // 失敗も通常終了 std::cout << "[RTC::StringCommander] Follow Unknown Error Code =" << retval << std::endl; return RTC::RTC_OK; } } // if (m_commandIn.isNew()) に対応 return RTC::RTC_OK; }
  • 96. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 さらなる改良案 ゴール名とゴール位置・姿勢を外部ファイルにして 読み込む yamlファイルなどが使い易い ファイル名をコンフィグレーションにする 文字列を音声認識で出力する (OpenHRIを使う) GOTO_A : [1.0, 1.0, 0.0], GOTO_B : [1.0, 0.0, 1.57], GOTO_C : [1.0, -1.0, 0.0]
  • 97. 日本ロボット学会 ロボット工学セミナー「ロボットの動かし方」 2015年6月20日,21日 菅 佑樹 株式会社SSR × 早大基幹理工表現工学科尾形研究室 まとめ 台車移動ロボットナビゲーション用フレームワーク の紹介 ナビゲーション用フレームワークのカスタマイズ方 法の紹介 今後もアップデートを続けていきます ソースコードのダウンロードもこちらから http://ogata-lab.jp/ja/technology_ja.html