Skip to content

TeamSOBITS/sobit_edu

Repository files navigation

JA | EN

Contributors Forks Stargazers Issues License

SOBIT EDU

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

概要

SOBIT EDU

TurtleBot2をベースとしてSOBITSが開発したモバイルマニピュレータ(SOBIT EDU)を動かすためのライブラリである.

Warning

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

(上に戻る)

セットアップ

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

環境条件

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

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

Note

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

インストール方法

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

(上に戻る)

実行・操作方法

  1. SOBIT EDUの起動する機能をパラメータとしてminimal.launchに設定する.
     <!-- Activate Mobile-Base (true), Arm (true), Head (true) -->
     <arg name="enable_mb"           default="true"/>
     <arg name="enable_arm"          default="true"/>
     <arg name="enable_head"         default="true"/>
     ...
     <arg name="open_rviz"           default="true"/>
     ...

Note

使用したい機能に応じて,truefalseかに書き換えてください.

  1. minimal.launchというlaunchファイルを実行する.
    $ roslaunch sobit_edu_bringup minimal.launch
  2. [任意] デモプログラムを実行してみよう.
    $ rosrun sobit_edu_library test_control_wheel.py

Note

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

(上に戻る)

Rviz上の可視化

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

$ roslaunch sobit_edu_description display.launch

正常に動作した場合は,次のようにRvizが表示される. SOBIT EDU Display with Rviz

(上に戻る)

ソフトウェア

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

ジョイントコントローラ

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

(上に戻る)

動作関数

  1. moveToPose() : 決められたポーズに動かす.
    bool moveToPose(
        const std::string& pose_name,   // ポーズ名
        const double sec = 5.0          // 動作時間 (s)
    );

[!NOTE] 既存のポーズはsobit_edu_pose.yamlに確認でいます.ポーズの作成方法についてはポーズの設定方法をご参照ください.

  1. moveJoint() : 指定されたジョイントを任意の角度を動かす.
    bool sobit::SobitEduJointController::moveJoint (
        const Joint joint_num,          // ジョイント名 (定数名)
        const double rad,               // 回転角度 (rad)
        const double sec = 5.0,         // 回転時間 (s)
        bool is_sleep = true            // 回転後に待機するかどうか
    );

[!NOTE] ジョイント名ジョイント名をご確認ください.

  1. moveAllJoint() : 指定されたジョイントを任意の角度を動かす.

    bool sobit::SobitEduJointController::moveJoint (
        const double arm_shoulder_pan,  // 各ジョイントの回転角度(arm_shoulder_pan) 
        const double arm_shoulder_tilt, // 各ジョイントの回転角度(arm_shoulder_tilt)
        const double arm_elbow_tilt,    // 各ジョイントの回転角度(arm_elbow_tilt)
        const double arm_wrist_tilt,    // 各ジョイントの回転角度(arm_wrist_tilt)
        const double hand,              // 各ジョイントの回転角度(hand)
        const double head_camera_pan,   // 各ジョイントの回転角度(head_camera_pan)
        const double head_camera_tilt,  // 各ジョイントの回転角度(head_camera_tilt)
        const double sec = 5.0,         // 回転時間 (s)
        bool is_sleep = true            // 回転後に待機するかどうか
    );
  2. moveHeadPanTilt() : パンチルト機構を任意の角度に動かす

    bool sobit::SobitEduJointController::moveHeadPanTilt(
        const double pan_rad,           // パンの回転角度 (rad)
        const double tilt_rad,          // チルトの回転角度 (rad)
        const double sec = 5.0,         // 移動時間 (s)
        bool is_sleep = true            // 回転後に待機するかどうか
    );
  3. moveArm() : アームの関節を任意の角度に動かす.

    bool sobit::SobitEduJointController::moveArm(
        const double arm_shoulder_pan,  // 各ジョイントの回転角度(arm_shoulder_pan) 
        const double arm_shoulder_tilt, // 各ジョイントの回転角度(arm_shoulder_tilt)
        const double arm_elbow_tilt,    // 各ジョイントの回転角度(arm_elbow_tilt)
        const double arm_wrist_tilt,    // 各ジョイントの回転角度(arm_wrist_tilt)
        const double hand,              // 各ジョイントの回転角度(hand)
        const double sec = 5.0,         // 回転時間 (s)
        bool is_sleep = true            // 回転後に待機するかどうか
    );
  4. moveGripperToTargetCoord() : ハンドをxyz座標に動かす(把持モード).

    bool sobit::SobitEduJointController::moveGripperToTargetCoord(
        const double target_pos_x,       // 把持目的地のx (m)
        const double target_pos_y,       // 把持目的地のy (m)
        const double target_pos_z,       // 把持目的地のz (m)
        const double shift_x,            // xyz座標のx軸をシフトする (m)
        const double shift_y,            // xyz座標のy軸をシフトする (m)
        const double shift_z             // xyz座標のz軸をシフトする (m)
        const double sec = 5.0,          // 回転時間 (s)
        bool is_sleep = true             // 回転後に待機するかどうか
    );
  5. moveGripperToTargetTF() : ハンドをtf名に動かす(把持モード).

    bool sobit::SobitEduJointController::moveGripperToTargetTF(
        const std::string& target_name,     // 把持目的tf名
        const double shift_x,               // xyz座標のx軸をシフトする (m)
        const double shift_y,               // xyz座標のy軸をシフトする (m)
        const double shift_z                // xyz座標のz軸をシフトする (m)
        const double sec = 5.0,             // 回転時間 (s)
        bool is_sleep = true                // 回転後に待機するかどうか
    );
  6. moveGripperToPlaceCoord() : ハンドをxyz座標に動かす(配置モード).

    bool sobit::SobitEduJointController::moveGripperToPlaceCoord(
        const double target_pos_x,       // 配置目的地のx (m)
        const double target_pos_y,       // 配置目的地のy (m)
        const double target_pos_z,       // 配置目的地のz (m)
        const double shift_x,            // xyz座標のx軸をシフトする (m)
        const double shift_y,            // xyz座標のy軸をシフトする (m)
        const double shift_z             // xyz座標のz軸をシフトする (m)
        const double sec = 5.0,          // 回転時間 (s)
        bool is_sleep = true             // 回転後に待機するかどうか
    ); 
  7. moveGripperToPlaceTF() : ハンドをtf名に動かす(配置モード).

    bool sobit::SobitEduJointController::moveGripperToPlaceTF(
        const std::string& target_name,     // 配置目的tf名
        const double shift_x,               // xyz座標のx軸をシフトする (m)
        const double shift_y,               // xyz座標のy軸をシフトする (m)
        const double shift_z                // xyz座標のz軸をシフトする (m)
        const double sec = 5.0,             // 回転時間 (s)
        bool is_sleep = true                // 回転後に待機するかどうか
    );
  8. graspDecision() : 定めた範囲内の電流値を超えた場合,把持判定を返す.

    bool sobit::SobitEduJointController::graspDecision(
        const int min_curr = 300,       // trueを返す最小の電流値
        const int max_curr = 1000       // trueを返す最大の電流値
     );
  9. placeDecision() : 定めた範囲内の電流値を超えた場合,配置判定を返す.

    bool sobit::SobitEduJointController::graspDecision( 
        const int min_curr = 500,       // trueを返す最小の電流値
        const int max_curr = 1000       // trueを返す最大の電流値
    );

(上に戻る)

ジョイント名

SOBIT EDUのジョイント名とその定数名を以下の通りとなる.

ジョイント番号 ジョイント名 ジョイント定数名
0 arm_shoulder_pan_joint ARM_SHOULDER_PAN_JOINT
1 arm_shoulder_1_tilt_joint ARM_SHOULDER_1_TILT_JOINT
2 arm_shoulder_2_tilt_joint ARM_SHOULDER_2_TILT_JOINT
3 arm_elbow_1_tilt_joint ARM_ELBOW_1_TILT_JOINT
4 arm_elbow_2_tilt_joint ARM_ELBOW_2_TILT_JOINT
5 arm_wrist_tilt_joint ARM_WRIST_TILT_JOINT
6 hand_joint HAND_JOINT
7 head_camera_pan_joint HEAD_CAMERA_PAN_JOINT
8 head_camera_tilt_joint HEAD_CAMERA_TILT_JOINT

(上に戻る)

ポーズの設定方法

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

sobit_edu_pose:
    - { 
        pose_name: "pose_name",
        arm_shoulder_pan_joint: 0.00,
        arm_shoulder_1_tilt_joint: 1.5708,
        arm_elbow_1_tilt_joint: -1.40,
        arm_wrist_tilt_joint: -0.17,
        hand_joint: -1.00,
        head_camera_pan_joint: 0.00,
        head_camera_tilt_joint: 0.00
    }
    ...

ホイールコントローラ

SOBIT EDUの移動機構を動かすための情報まとめとなる.

(上に戻る)

動作関数

  1. controlWheelLinear() : 並進(直進移動・斜め移動・横移動)を移動さす.
    bool sobit::SobitEduWheelController::controlWheelLinear (
        const double distance,            // 直進移動距離 (m)
    )
  2. controlWheelRotateRad() : 回転運動を行う(弧度法:Radian)
    bool sobit::SobitEduWheelController::controlWheelRotateRad (
        const double angle_rad,             // 中心回転角度 (rad)
    )
  3. controlWheelRotateDeg() : 回転運動を行う(度数法:Degree)
    bool sobit::SobitEduWheelController::controlWheelRotateDeg ( 
        const double angle_deg,             // 中心回転角度 (deg)
    )

(上に戻る)

ハードウェア

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

SOBIT EDU in OnShape

(上に戻る)

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

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

  1. Onshapeにアクセスしてみよう.

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

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

(上に戻る)

電子回路

TBD

(上に戻る)

ロボットの特徴

項目 詳細
最大直進速度 0.65[m/s]
最大回転速度 3.1415[rad/s]
最大ペイロード 0.35[kg]
サイズ (長さx幅x高さ) 640x400x1150[mm]
重量 10.5[kg]
リモートコントローラ PS3/PS4
LiDAR UST-20LX
RGB-D Azure Kinect DK
IMU LSM6DSMUS
スピーカー モノラルスピーカー
マイク モノラルガンマイクロホン
アクチュエータ (アーム) 7 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ページ をご覧ください.

(上に戻る)

参考文献

(上に戻る)