ゼロからのロボットアーム入門

~ ロボットの基本操作 ~

大阪大学 中島優作


← シリーズ一覧に戻る

このスライドの担当範囲

    • こちらのスライドでロボットが動く状態になった前提で、ロボットをどう動かしていくのかを扱います。
    • コードなどはUniversalRobotの例を扱います(他のメーカーでも概ね同じ機能があるはずです)。

オススメ参考資料

このスライドと教科書の併用をおススメします

    産業用ロボットtheビギニング - 産業用ロボットの基礎的な情報を網羅

    イラストで学ぶロボット工学 - ロボットアームの初歩を網羅しつつも、数式もでくるので本格的

ロボット動作の方法

ティーチングペンダント

  • 各種設定や動作を記録、再生
  • 最近はLANを介してソフトウェアで行うものも多い

プログラミング

  • Python等で動作コードを作成
  • TPでは対応していない機能が使える

動作作成の手順

  1. TCPの設定
  2. 座標系の指定
  3. モーション種類の決定
  4. 実行・テスト

アプリを開いてください

全画面表示

この後の説明はアプリを見ながら行います

ステップ①TCP(アームの手先)

TCP = Tool Center Point
複数登録して使うのが便利

TCPは先端

TCPはグリッパの中央

ステップ②ロボットの座標系

関節座標系

関節それぞれの角度を指定

ベース座標系

ロボットの根本を基準にTCPの座標を指定

ツール座標系

現在のTCPの座標系を基準に次のTCPの座標系を指定

座標系による動きの違いを確認↓

ジョグ動作

  • 関節や手先を少しずつ動かす動作をジョグ動作という
  • アプリのジョグ機能を使うと、関節座標系、ベース座標系、ツール座標系での動きの違いが確認できる

座標系の表現↓

TCPの姿勢表現

姿勢(pose) = 位置 + 向きで表すことが多い

基本はXYZの座標系に対する位置と向きを考える

全画面表示

ステップ③ロボットモーションは3種類

  • PTP:最短, 高速
  • LIN:直線, 動作制限
  • CIRC:円弧, 障害物回避
  • 詳細は以下↓

    PTPの詳細

    • 関節空間での最短経路
    • 各関節が最も速く目標に到達するように動く(グラフ)
    • 手先の軌道は予測できない
    • 障害物がない環境で使用する動作モード

    LINの詳細

    • 直線動作
    • 手先が直線的に移動
    • 関節の可動範囲や特異点により動きに制限
    • 部品挿入や溶接で使用
    • PTPよりも時間がかかる

    CIRCの詳細

    • 円弧動作
    • 中間点を指定して円弧を描く
    • 障害物回避や滑らかな動作で使用
    • 角を持つ物体の加工などに有効
    • 3点(始点・中間点・終点)が必要

    連続的なロボットモーション

    • 複数の姿勢(waypoints)を指定して動かしたときに動きがガタつく

    ガタツキの少ないモーションを作るには↓

    滑らかなモーションの作り方

    • waypointsをショートカットし滑らかな動作を実現
    • メーカーごとにこの機能の呼び方は異なりますが、ここではURに合わせてブレンド半径と呼びます

    ブレンド半径の良し悪し↓

    ブレンド半径の良し悪し

    • 二等分線を中心とした円が新しい経路です
    • 点を正確に通過しないので細かい動きはできません
    • 動作精度と動きの滑らかさのトレードオフで調整が必要です

    プログラムから動かす(URの例)

    
    import rtde_control
    import rtde_receive
    import time
    robot_ip = "URロボットのIPアドレス" 
    rtde_c = rtde_control.RTDEControlInterface(robot_ip)
    rtde_r = rtde_receive.RTDEReceiveInterface(robot_ip)
    try:
        # PTP動作 (関節空間)
        # 関節角度をラジアンで指定
        target_joints = [0.1, -1.2, 2.3, -1.5, 0.5, 0.0] #ラジアン表記
        rtde_c.moveJ(target_joints, 1.0, 0.5) # 速度1.0rad/s, 加速度0.5rad/s^2
        time.sleep(5)
    
        # LIN動作 (ベース座標系)
        # ベース座標系での目標TCP位置を指定,  [x, y, z, rx, ry, rz] (単位: [m, rad])
        target_pose_base = [0.3, 0.4, 0.5, 0.0, 0.0, 0.0]
        rtde_c.moveL(target_pose_base, 0.5, 0.3) # 速度0.5m/s, 加速度0.3m/s^2
        time.sleep(5)
    
        # CIRC動作 (ツール座標系)
        # ツール座標系での中間点と目標点のTCP位置を指定,  [x, y, z, rx, ry, rz] (単位: [m, rad])
        via_pose_tool = [0.1, 0.1, 0.0, 0.0, 0.0, 0.0]
        to_pose_tool = [0.2, 0.0, 0.0, 0.0, 0.0, 0.0]
        rtde_c.moveC(via_pose_tool, to_pose_tool, 0.5, 0.3, pose_tool=True) # 速度0.5m/s, 加速度0.3m/s^2
        time.sleep(5)
    
    finally:
        rtde_r.disconnect()
                        
    • PTP = moveJ
    • LIN = moveL
    • CIRC = moveC

    ロボットアームの精度について

    • 仕様書は絶対位置決め精度ではない!
    • ISO9283は同じ動作の繰り返し精度を測定する
    • 例えば、電源を入れなおすと絶対位置は前回とずれる

    位置制御だけでは難しいタスク

    • 狭い場所に部品を入れる(例:Peg-in-holeタスク)などは位置制御だけだと難しい

    工夫や手法を紹介↓

    RCC(Remote Center Compliance)

    • 部品を嵌め合わせるなどの作業のずれを機械的に補償するツール
    • 後述のコンプライアンス制御に置き換わっている印象

    コンプライアンス制御

    • ばねのような制御をセンサでソフトウェア的に実現
    • 手先のフォーストルクセンサを使う場合と使わない場合があります

    フォース制御

    • 任意の軸だけ一定の力をかける制御
    • 手先にフォーストルクセンサが必要です

    フォース制御とコンプライアンス制御の比較

    • フォース制御 → ある力をかける
    • コンプライアンス制御 → ばねのように柔らかく動く

    オフラインシミュレーション

    • オフライン(実機なし)のシミュレーション
    • 動作前の事前検討が可能

    シミュレーションはなぜ重要か↓

    ロボットでありがちなトラブル

    • 1. ロボットの手先が届かない
      実際に設置するとロボットの可動範囲が思ったより狭く手先が届かなかった→配置の再検討
    • 2. 思ったより遅い
      スループットの向上を期待したが実際に動かすと思ったより遅かった

    シミュレーションで未然に防げる

    シミュレーションの現状

    産業用ロボット

    • 自社で提供
    • 動作プログラムの作成・検証が可能

    協働ロボット

    • 直接ティーチング
    • 動かすまで分からない

    ※Universal RobotはUR Studioが利用可能

    協働ロボシミュレータの選択肢

    • 個人的にはRoboDKがおススメ
    • 色々なロボットに使える、直観的なGUI操作
    • CADのエッジからウェイポイント自動作成など便利機能あり

    UR Tips

    • Universal robotユーザが多いので
    • Universal robotを使う上での便利機能の紹介
    • 主にシミュレータとモーションの話

    シミュレータ UR Studio

    • オンライン、無料で使える
    • 機能はRoboDKの方が上だが、これで十分な場合も多いのでは

    モーション ver2

    • Polyscope ver5.22から使えるように(今後はこれが標準)
    • MoveJ(PTP),MoveL(LIN)ので振動が少なくなる
    • ブレンド半径が大きすぎる場合は自動調整
    • 調整すればROSレベルで滑らかに動ける

    フォースモード

    • URにおけるフォース制御
    • 特定の軸だけ力制御と位置制御を切り替え可能
    • 一定の力で押し付ける作業が得意

    URの回転表現について

    • URの回転表現はデフォルトで回転ベクトル形式
    • RPY(ロール、ピッチ、ヨー)で使うには変換が必要
    • Pythonではscipy.spatial.transformのRotationクラスが便利
    • 左のアプリで回転ベクトルとRPYの関係を確認

    servoJ/Lの注意点

    • servoJ/Lは最短経路で最速移動するため危険!
    • 意図しない軌道で高速移動する可能性
    • 事前にmoveJ/Lでゆっくり動かして軌道確認必須
    • 意図しない姿勢を取っていないか必ず事前確認

    ROSを使う?使わない?

    ROSによる動作生成

    • 複雑な動きを滑らかに
    • 様々なロボットやセンサを統合したい

    メーカー提供 or RoboDK

    • 直線などの組合せ
    • 周辺部品はメーカー品

    もう少し詳しく↓

    ROSを使う利点

    ROS生成モーション

    • PC上で完全に動作を計算してロボットに送る
    • 0.1 mmくらい精密な動作をさせたいときはこっち

    メーカー提供モーション

    • ロボットコントローラでモーションを計算する
    • 複雑な動きを0.1mmくらい精密に動かすのは難しい

    ロボットアーム選定

    ロボットアームの選び方

    ここでは協働ロボットを対象にしています

    ロボットアームの軸の数

    位置(3次元) + 向き(3次元) → 姿勢(6次元) = 6軸

    4軸ロボットの例
    常に下向きという制限

    ピックアンドプレースならこれでok

    6軸ロボットの例
    位置も向き自由

    色々な作業に

    6軸はざっくり4種類

    産業用ロボット

    高精度・高信頼性
    400万円〜

    大手協働ロボット

    人との協働・安全
    300万円〜

    格安協働ロボット

    コスト重視
    50万円〜

    教育用ロボット

    学習・原理理解
    10万円〜

    産業用ロボット

    特徴

    • FANUC、Yaskawa、Kawasaki、Denso
    • 柵が必要
    • 高精度・高速・高信頼性
    • 製造業での実績豊富
    • メンテナンス体制や機能が充実

    大手協働ロボット

    特徴

    • UR、Franka Emika、DOBOT
    • 人との協働作業が可能
    • 安全機能内蔵
    • 直感的なプログラミング
    • 柔軟な外部制御(メーカーによる)

    格安協働ロボット

    特徴

    • DOBOT、xArm、FairInovation
    • コストパフォーマンス重視
    • 位置制御くらいなら基本機能は十分
    • Python制御対応が多い
    • メーカーによっては故障リスクもある印象

    教育用ロボット

    特徴

    • 勉強用途
    • 組み立てから学習可能なものもある
    • 低コストに始められる
    • 原理理解に適している

    ロボットの基本動作は以上!

    Let's enjoy robot!

    もっと複雑な制御やセンサの統合をやりたい方は:

    ありがとうございました

    ← シリーズ一覧に戻る