狠狠撸

狠狠撸Share a Scribd company logo
1
まねっこロボット開発 進捗報告
早稲田大学チーム
林 弘昭 (LDR)
延 剛
澤田 万尋
2
開発概要
目標: 人の動作を模倣するロボットを作りたい!
使用機材: G-ROBOTS GR-001 (HPI製)
CMS-V43BK-3 (SANWA supply製)
動作イメージ:
1. カメラで人を検出し, ロボットが人の方向に
向く。
2. 人の動作パターンを認識する。
3. ロボットが対応する動作を模倣する。
3
要求図
<<deriveReqt>>
<<requirement>>
パターン認識
text=姿勢パターンを
区別できること
<<requirement>>
骨格検知
text=人の骨格の座標
を検知できること
<<deriveReqt>>
<<deriveReqt>>
<<requirement>>
初期姿勢に戻す
text=動作の前に初期
姿勢(直立)に戻れるこ
と
<<deriveReqt>>
<<requirement>>
動作生成
text=特定の動作を取
れること
<<requirement>>
角度計算
text=人の位置とロ
ボットのなす角がわか
ること
<<requirement>>
人の動作を模倣するロボット
text=人の場所を検知してその方向を向き, 動
作を認識して, 同じ動作を再現できるロボット
e.g. 手を上げる etc.
<<requirement>>
方向転換
text=人の場所を検知してその方向を向くこと
ができること.
<<requirement>>
動作模倣
text=人の動作を認識して, 同じ動作を再現で
きるロボット e.g. 手を上げる etc.
<<requirement>>
回転
text=特定の角度に回
転できること
<<requirement>>
人検知
text=人を検知できる
こと
<<deriveReqt>>
<<deriveReqt>> <<deriveReqt>>
<<deriveReqt>>
<<deriveReqt>>
4
設計
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
ウェブカメラ
Laptop PC
Ubuntu
G-Robot
USB USB
LAN
Laptop PC
Windows
? 内部ブロック図 ? ハードウェア構築
5
作業工数
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
林: 5時間
林: 6時間
林: 2時間
林: 3時間
澤田?延: 15時間
澤田?延: 15時間
PC間通信
澤田: 1時間
コンポーネント間通信
林?澤田: 4時間
6
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力:カメラ
? 出力:rgb画像(Img::ImageData)
? 中身:
?OpenCVによりカメラと接続する。
?Numpy型の画像を読み取る。
?画像データをbyte型に変換する。
?データをImageDataクラスに代入する。
?データを送信する。
? カメラ制御
7
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力:rgb画像(Img::ImageData)
? 出力:骨格座標(RTC::TimedDoubleSeq)
? 中身:
?ImageDataクラスデータを受信する。
?画像データをNumpy型に変換する。
?OpenPoseのmobilenet_thinモデルにより骨
格検出する。
?骨格座標をTimeDoubleSeqクラスに代入す
る。
?データを送信する。
? カメラ制御
*OpenPose: https://github.com/ZheC/tf-pose-estimation
説明:ダウンロードしたフォルダーを自分のコンポーネントにコピーし、プログラム内
でパスを書けば使える。
8
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力:骨格座標(RTC::TimedDoubleSeq)
? 出力:姿勢パターン(RTC::TimedString)
? 中身:
?TimedDoubleSeqクラスデータを受信する。
?左右肘と左右肩の座標を抽出する。
?左右の肘と肩の角度を計算する。
?角度に応じて、姿勢を7パターンに定義する。
両手下げ、
右手上げ(M)、左手上げ(M)、左右手上げ(M)
右手上げ(H)、左手上げ(H) 、左右手上げ(H)
?25回(1秒)ごとに姿勢パターンを判定する。20回以上
同じ姿勢が検知されたら、その姿勢を選択する。
?姿勢パターンをTimedString方クラスに代入する。?デー
タを送信する。
? パターン認識
9
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力:骨格座標(RTC::TimedDoubleSeq)
? 出力:相対水平距離(RTC::TimedDouble)
? 中身:
?TimedDoubleSeqクラスデータを受信する。
?首の座標を抽出する。
?人とロボットの相対水平距離として、首と画像中心
の横pixel距離を計算する。
?25回(1秒)のデータを平均化する。
?平均したデータをTimedDouble型クラスに
代入する。
?データを送信する。
? 距離計算
10
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力: 姿勢パターン (RTC::TimedString)
相対水平距離(RTC::TimedDouble)
? 出力: 動作パターン (RTC::TimedString)
? 中身:
?姿勢パターン, 相対水平距離を受信する。
?前回の送信から所定の時間の経過を確認する。
(ロボットの動作完了を時間で担保)
?相対水平距離から, 回転の必要性を判断する。
→回転必要であれば、回転方向を判断し, 動作
決定する。
→回転不要であれば、受信した姿勢パターンに
動作決定する。
?決定した動作に対応する文字列をTimedString
型クラスに代入する。
?データを送信する。
? 動作決定
11
RTC説明
:カメラ制御
:~rgb画像 (Img::ImageData)
:骨格座標取得
:~骨格座標 (RTC::TimedDoubleSeq)
:rgb画像 (Img::ImageData)
:骨格座標
(RTC::TimedDoubleSeq)
:パターン認識
:~姿勢パターン
(RTC::TimedString)
:骨格座標
(RTC::TimedDoubleSeq)
:距離計算
:~相対水平距離
(RTC::TimedDouble)
:姿勢パターン (RTC::TimedString) :相対水平距離 (RTC::TimedDouble)
:動作決定
:~動作パターン (RTC::TimedString)
:g-robot
:動作パターン (RTC::TimedString)
? 入力(使用したもの): 動作パターン (RTC::TimedString)
? 出力(使用したもの) :無し
? 中身:
?動作パターンを受信
?動作パターンが既定の文字列と一致する場合,
既定の内容を実行 (初期化, 通電 等)
?一致しない場合, ユーザー定義された
同名のモーションファイル(*.m)を実行
? g-robot (*既存のコンポーネントを流用)
12
結果 回転動作
? 右回転 ? 左回転
足裏に滑り止め
13
結果 OpenPose
14
結果
15
最後に
?分業って素晴らしい
コンポーネント単位で明確に分かれている > 並行して開発することで時間コスト削減
ただしコンポーネント間のインターフェースはしっかり話し合っておく必要有
?インテグレーションは大変
コンポーネントのユニットテストでは問題なく見えても, 実際繋いだら問題がたくさん
e.g. 人検出からロボット動作までのラグがありえないぐらい酷い
> 動作決定コンポーネントで受けた際のisNew判定のやり方がまずかった
?ドキュメンテーション大事
既存のコンポーネントを再利用するときに, ドキュメントがないと読み解くのが大変

More Related Content

まねっこロボット