狠狠撸
Submit Search
まねっこロボット
?
Download as PPTX, PDF
?
0 likes
?
865 views
O
openrtm
Follow
RTMサマーキャンプ2022 早稲田大学チーム 最終成果報告
Read less
Read more
1 of 15
Download now
Download to read offline
More Related Content
まねっこロボット
1.
1 まねっこロボット開発 進捗報告 早稲田大学チーム 林 弘昭
(LDR) 延 剛 澤田 万尋
2.
2 開発概要 目標: 人の動作を模倣するロボットを作りたい! 使用機材: G-ROBOTS
GR-001 (HPI製) CMS-V43BK-3 (SANWA supply製) 動作イメージ: 1. カメラで人を検出し, ロボットが人の方向に 向く。 2. 人の動作パターンを認識する。 3. ロボットが対応する動作を模倣する。
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.
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.
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.
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.
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.
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.
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.
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.
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.
12 結果 回転動作 ? 右回転
? 左回転 足裏に滑り止め
13.
13 結果 OpenPose
14.
14 結果
15.
15 最後に ?分業って素晴らしい コンポーネント単位で明確に分かれている > 並行して開発することで時間コスト削減 ただしコンポーネント間のインターフェースはしっかり話し合っておく必要有 ?インテグレーションは大変 コンポーネントのユニットテストでは問題なく見えても,
実際繋いだら問題がたくさん e.g. 人検出からロボット動作までのラグがありえないぐらい酷い > 動作決定コンポーネントで受けた際のisNew判定のやり方がまずかった ?ドキュメンテーション大事 既存のコンポーネントを再利用するときに, ドキュメントがないと読み解くのが大変
Download