Skip to content

TeamSOBITS/sobit_mini

Repository files navigation

JA | EN

Contributors Forks Stargazers Issues License

SOBIT MINI

目次
  1. 概要
  2. 環境構築
  3. 実行・操作方法
  4. ソフトウェア
  5. ハードウェア
  6. マイルストーン
  7. 参考文献

概要

SOBITSが開発した双腕型モバイルマニピュレータ(SOBIT MINI)を動かすためのライブラリです.

Warning

初心者の場合,実機のロボットを扱う際に,先輩方に付き添ってもらいながらロボットを動かしましょう.

(上に戻る)

セットアップ

ここで,本レポジトリのセットアップ方法について説明します.

環境条件

まず,以下の環境を整えてから,次のインストール段階に進んでください.

System Version
Ubuntu 20.04 (Focal Fossa)
ROS Noetic Ninjemys
Python 3.0~

Note

UbuntuROSのインストール方法に関しては,SOBIT Manualに参照してください.

インストール方法

  1. ROSのsrcフォルダに移動します.
    $ roscd
    # もしくは,"cd ~/catkin_ws/"へ移動.
    $ cd src/
  2. 本レポジトリをcloneします.
    $ git clone https://github.com/TeamSOBITS/sobit_mini
  3. レポジトリの中へ移動します.
    $ cd sobit_mini/
  4. 依存パッケージをインストールします.
    $ bash install.sh
  5. パッケージをコンパイルします.
    $ roscd
    # もしくは,"cd ~/catkin_ws/"へ移動.
    $ catkin_make

(上に戻る)

実行・操作方法

  1. minimal.launchというlaunchファイルを起動します.
    $ roslaunch sobit_mini_bringup minimal.launch
  2. [任意] デモプログラムを実行してみましょう.
    $ rosrun sobit_mini_library test_control_wheel.py

Note

SOBIT MINIの動作方法になれるため,exampleフォルダを確認し,それぞれのサンプルファイルから動作関数を学びましょう.

(上に戻る)

Rviz上の可視化

実機を動かす前段階で,Rviz上でSOBIT MINIを可視化し,ロボットの構成を表示することができます.

$ roslaunch sobit_mini_description display.launch

正常に動作した場合は,次のようにRvizが表示されます.

SOBIT MINI Display with Rviz

(上に戻る)

ソフトウェア

SOBIT MINIと関わるソフトの情報まとめ

ジョイントコントローラ

SOBIT MINIのパンチルト機構とマニピュレータを動かすための情報まとめです.

(上に戻る)

動作関数

  1. moveToPose() : 決められたポーズに動かします.
bool moveToPose(
   const std::string &pose_name, // ポーズ名
   const double sec              // 回転後に待機するかどうか
);

[!NOTE] 既存のポーズはsobit_mini_pose.yamlに確認できます.

  1. moveHeadPanTilt : パンチルト機構を任意の角度に動かします.

    bool moveHeadPanTilt(
       const double pan_rad,         // 回転角度 [rad]
       const double tilt_rad,        // 回転角度 [rad]
       const double sec,             // 回転時間 [s]
       bool is_sleep                 // 回転後に待機するかどうか
    )
  2. moveRightArm : 右腕のジョイントを任意の角度に動かします.

    bool moveRightArm(
       const double shoulder_roll,   // 回転角度 [rad]
       const double shoulder_pan,    // 回転角度 [rad]
       const double elbow_tilt,      // 回転角度 [rad]
       const double wrist_tilt,      // 回転角度 [rad]
       const double hand_motor,      // 回転角度 [rad]
       const double sec,             // 回転時間 [s]
       bool is_sleep                 // 回転後に待機するかどうか
    )
  3. moveLeftArm : 右腕のジョイントを任意の角度に動かします.

    bool moveLeftArm(
       const double shoulder_roll,   // 回転角度 [rad]
       const double shoulder_pan,    // 回転角度 [rad]
       const double elbow_tilt,      // 回転角度 [rad]
       const double wrist_tilt,      // 回転角度 [rad]
       const double hand_motor,      // 回転角度 [rad]
       const double sec,             // 回転時間 [s]
       bool is_sleep                 // 回転後に待機するかどうか
    )
  4. moveJoint : 指定されたジョイントを任意の角度に動かします.

    bool moveJoint(
       const Joint joint_num,  // ジョイント名 (定数名)
       const double rad,       // 回転角度 [rad]
       const double sec,       // 回転時間 [s]
       bool is_sleep           // 回転後に待機するかどうか
    )
  5. moveAllJoint : 全てのジョイントを任意の角度に動かします.

    bool moveAllJoint(
       const double l_arm_shoulder_roll_joint,   // 回転角度 [rad]
       const double l_arm_shoulder_pan_joint,    // 回転角度 [rad]
       const double l_arm_elbow_tilt_joint,      // 回転角度 [rad]
       const double l_hand_joint,                // 回転角度 [rad]
       const double r_arm_shoulder_roll_joint,   // 回転角度 [rad]
       const double r_arm_shoulder_pan_joint,    // 回転角度 [rad]
       const double r_arm_elbow_tilt_joint,      // 回転角度 [rad]
       const double r_arm_wrist_tilt_joint,      // 回転角度 [rad]
       const double r_hand_joint,                // 回転角度 [rad]
       const double body_roll_joint,             // 回転角度 [rad]
       const double head_pan_joint,              // 回転角度 [rad]
       const double head_tilt_joint,             // 回転角度 [rad]
       const double sec,                         // 回転時間 [s]
       bool is_sleep                             // 回転後に待機するかどうか
    )
  6. moveGripperToTargetCoord : ハンドをxyz座標に動かします(把持モード).

    bool moveGripperToTargetCoord(
       const int arm_mode,                 //使用するアーム(arm_mode=0:左腕,arm_mode=1:左腕)
       const double hand_rad,              //ハンドの開閉角度の調整
       const double goal_position_x,       //把持目的地のx [m]
       const double goal_position_y,       //把持目的地のy [m]
       const double goal_position_z,       //把持目的地のz [m]
       const double diff_goal_position_x,  // xyz座標のx軸をシフトする [m]
       const double diff_goal_position_y,  // xyz座標のy軸をシフトする [m]
       const double diff_goal_position_z,  // xyz座標のz軸をシフトする [m]
       const double sec,                   // 回転時間 [s]
       bool is_sleep                       // 回転後に待機するかどうか
    )
  7. moveGripperToTargetTF : ハンドをtf名に動かします(把持モード).

    bool moveGripperToTargetTF(
       const int arm_mode,                    //使用するアーム(arm_mode=0:左腕,arm_mode=1:左腕)
       const std::string &goal_position_name, //把持目的tf名
       const double hand_rad,                 //ハンドの開閉角度の調整
       const double diff_goal_position_x,     // xyz座標のx軸をシフトする [m]
       const double diff_goal_position_y,     // xyz座標のy軸をシフトする [m]
       const double diff_goal_position_z,     // xyz座標のz軸をシフトする [m]
       const double sec,                      // 回転時間 [s]
       bool is_sleep                          // 回転後に待機するかどうか
    )

(上に戻る)

ジョイント名

SOBIT MINIのジョイント名とその定数名は以下の通りです.

ジョイント番号 ジョイント名 ジョイント定数名
0 l_arm_shoulder_roll_joint L_ARM_SHOULDER_ROLL_JOINT
1 l_arm_shoulder_pan_joint L_ARM_SHOULDER_PAN_JOINT
2 l_arm_elbow_tilt_joint L_ARM_ELBOW_TILT_JOINT
3 l_arm_wrist_tilt_joint L_ARM_WRIST_TILT_JOINT
4 l_hand_joint L_HAND_JOINT
5 r_arm_shoulder_roll_joint R_ARM_SHOULDER_ROLL_JOINT
6 r_arm_shoulder_pan_joint R_ARM_SHOULDER_PAN_JOINT
7 r_arm_elbow_tilt_joint R_ARM_ELBOW_ROLL_JOINT
8 r_arm_wrist_tilt_joint R_ARM_WRIST_TILT_JOINT
9 r_hand_joint R_HAND_JOINT
10 body_roll_joint BODY_ROLL_JOINT
11 head_pan_joint HEAD_PAN_JOINT
12 head_tilt_joint HEAD_TILT_JOINT

(上に戻る)

ポーズの設定方法

sobit_mini_pose.yamlというファイルでポーズの追加・編集ができます.以下のようなフォーマットになります.

sobit_mini_pose:
    - { 
        pose_name: "pose_name",
        l_arm_shoulder_roll_joint: 0.0,
        l_arm_shoulder_pan_joint: -1.25,
        l_arm_elbow_tilt_joint: 0.0,
        l_arm_wrist_tilt_joint: 0.0,
        l_hand_joint: 0.0,
        r_arm_shoulder_roll_joint: 0.0,
        r_arm_shoulder_pan_joint: -1.25,
        r_arm_elbow_tilt_joint: 0.0,
        r_arm_wrist_tilt_joint: 0.0,
        r_hand_joint: 0.0,
        body_roll_joint: 0.0,
        head_pan_joint: 0.0,
        head_tilt_joint: 0.0
    }

ホイールコントローラ

SOBIT MINIの移動機構部を動かすための情報まとめです.

動作関数

  1. controlWheelLinear() : 並進(前進・後進)に移動させます.

    bool controlWheelLinear(const double distance      //x方向への直進移動距離
    )
  2. controlWheelRotateRad() : 回転運動を行う(弧度法:Radian)

    bool controlWheelRotateRad(const double angle_rad  // 中心回転角度 [rad]
    )
  3. controlWheelRotateDeg() : 回転運動を行う(度数法:Degree)

    bool controlWheelRotateDeg(const double angle_deg  // 中心回転角度 (deg)
    )

(上に戻る)

ハードウェア

SOBIT MINIはオープンソースハードウェアとして Onshape にて公開しております.

SOBIT MINI in OnShape

(上に戻る)

ハードウェアの詳細についてはこちらを確認してください.

パーツのダウンロード方法

  1. Onshapeにアクセスしましょう.

[!NOTE] ファイルをダウンロードするために,OnShapeのアカウントを作成する必要がありません.ただし,本ドキュメント全体をコピーする場合,アカウントの作成を推奨します.

  1. Instanceの中にパーツを右クリックで選択します.
  2. 一覧が表示され,Exportボタンを押してください.
  3. 表示されたウィンドウの中に,Formatという項目があります.STEPを選択してください.
  4. 最後に,青色のExportボタンを押してダウンロードが開始されます.

(上に戻る)

電子回路図

TBD

(上に戻る)

ロボットの組み立て

TBD

(上に戻る)

ロボットの特徴

項目 詳細
最大直進速度 0.65[m/s]
最大回転速度 3.1415[rad/s]
最大ペイロード 0.35[kg]
サイズ (長さx幅x高さ) 512x418x1122[mm]
重量 11.6[kg]
リモートコントローラ PS3/PS4
LiDAR UST-10LX
RGB-D Intel Realsense D435F
スピーカー モノラルスピーカー
マイク コンデンサーマイク
アクチュエータ (アーム) 2 x XM540-W150, 9 x XM430-W320
移動機構 TurtleBot2
電源 2 x Makita 6.0Ah 18V
PC接続 USB

部品リスト(BOM)

部品 型番 個数 購入先
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link
--- --- 1 link

(上に戻る)

マイルストーン

  • exampleファイルの修正
  • OSS
    • ドキュメンテーションの充実
    • コーディングスタイルの統一

現時点のバッグや新規機能の依頼を確認するためにIssueページ をご覧ください.

(上に戻る)

参考文献