目次
TurtleBot2をベースとしてSOBITSが開発したモバイルマニピュレータ(SOBIT EDU)を動かすためのライブラリである.
Warning
初心者の場合,実機のロボットを扱う際に,先輩方に付き添ってもらいながらロボットを動かしょう.
(上に戻る)
ここで,本レポジトリのセットアップ方法について説明する.
まず,以下の環境を整えてから,次のインストール段階に進んでください.
System | Version |
---|---|
Ubuntu | 20.04 (Focal Fossa) |
ROS | Noetic Ninjemys |
Python | 3.8 |
Note
Ubuntu
やROS
のインストール方法に関しては,SOBIT Manualに参照してください.
- ROSの
src
フォルダに移動する.$ roscd # もしくは,"cd ~/catkin_ws/"へ移動. $ cd src/
- 本レポジトリをcloneする.
$ git clone https://github.com/TeamSOBITS/sobit_edu
- レポジトリの中へ移動する.
$ cd sobit_edu/
- 依存パッケージをインストールする.
$ bash install.sh
- パッケージをコンパイルする.
$ roscd # もしくは,"cd ~/catkin_ws/"へ移動する. $ catkin_make
(上に戻る)
- 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
使用したい機能に応じて,true
かfalse
かに書き換えてください.
- minimal.launchというlaunchファイルを実行する.
$ roslaunch sobit_edu_bringup minimal.launch
- [任意] デモプログラムを実行してみよう.
$ rosrun sobit_edu_library test_control_wheel.py
Note
SOBIT EDUの動作方法に慣れるため,exampleフォルダを確認し,それぞれのサンプルファイルから動作関数を学ぼう.
(上に戻る)
実機を動かす前段階として,Rviz上でSOBIT EDUを可視化し,ロボットの構成を表示することができる.
$ roslaunch sobit_edu_description display.launch
(上に戻る)
SOBIT EDUと関わるソフトの情報まとめ
SOBIT EDUのパンチルト機構とマニピュレータを動かすための情報まとめとなる.
(上に戻る)
moveToPose()
: 決められたポーズに動かす.bool moveToPose( const std::string& pose_name, // ポーズ名 const double sec = 5.0 // 動作時間 (s) );
[!NOTE] 既存のポーズはsobit_edu_pose.yamlに確認でいます.ポーズの作成方法についてはポーズの設定方法をご参照ください.
moveJoint()
: 指定されたジョイントを任意の角度を動かす.bool sobit::SobitEduJointController::moveJoint ( const Joint joint_num, // ジョイント名 (定数名) const double rad, // 回転角度 (rad) const double sec = 5.0, // 回転時間 (s) bool is_sleep = true // 回転後に待機するかどうか );
[!NOTE]
ジョイント名
はジョイント名をご確認ください.
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
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 // 回転後に待機するかどうか );
-
graspDecision()
: 定めた範囲内の電流値を超えた場合,把持判定を返す.bool sobit::SobitEduJointController::graspDecision( const int min_curr = 300, // trueを返す最小の電流値 const int max_curr = 1000 // trueを返す最大の電流値 );
-
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の移動機構を動かすための情報まとめとなる.
(上に戻る)
controlWheelLinear()
: 並進(直進移動・斜め移動・横移動)を移動さす.bool sobit::SobitEduWheelController::controlWheelLinear ( const double distance, // 直進移動距離 (m) )
controlWheelRotateRad()
: 回転運動を行う(弧度法:Radian)bool sobit::SobitEduWheelController::controlWheelRotateRad ( const double angle_rad, // 中心回転角度 (rad) )
controlWheelRotateDeg()
: 回転運動を行う(度数法:Degree)bool sobit::SobitEduWheelController::controlWheelRotateDeg ( const double angle_deg, // 中心回転角度 (deg) )
(上に戻る)
SOBIT EDUはオープンソースハードウェアとしてOnShapeにて公開しております.
(上に戻る)
ハードウェアの詳細についてはこちらを確認してください.
- Onshapeにアクセスしてみよう.
[!NOTE] ファイルをダウンロードするために,
OnShape
のアカウントを作成する必要がない.ただし,本ドキュメント全体をコピする場合,アカウントの作成を推薦する.
Instances
の中にパーツを右クリックで選択する.- 一覧が表示され,
Export
ボタンを押してください. - 表示されたウィンドウの中に,
Format
という項目がある.STEP
を選択してください. - 最後に,青色の
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 |
(上に戻る)
部品 | 型番 | 個数 | 購入先 |
---|---|---|---|
--- | --- | 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ページ をご覧ください.
(上に戻る)
(上に戻る)