Skip to content

TeamSOBITS/sobit_light

Repository files navigation

JA | EN

Contributors Forks Stargazers Issues License

SOBIT LIGHT

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

概要

SOBIT LIGHT

Preferred Robotics(c)が開発したカチャカという移動機構を用いたSOBITS自作のモバイルマニピュレータを動かすためのライブラリです.

Caution

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

(上に戻る)

セットアップ

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

(上に戻る)

環境条件

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

System Version
Ubuntu 22.04 (Jammy Jellyfish)
ROS Humble Hawksbill
Python 3.10
Docker latest

Note

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

(上に戻る)

インストール方法

SOBIT LIGHTを使用するローカル環境,またはコンテナ内でのセットアップ内容

  1. ROSのsrcフォルダに移動します.

    $ cd ~/colcon_ws/src/
  2. 本レポジトリをcloneします.

    $ git clone https://github.com/TeamSOBITS/sobit_light
  3. レポジトリの中へ移動します.

    $ cd sobit_light/
  4. 依存パッケージをインストールします.

    $ bash install.sh
  5. パッケージをコンパイルします.

    $ cd ~/colcon_ws/
    $ colcon build --symlink-install
    $ source ~/colcon_ws/install/setup.sh

ローカル環境でのセットアップ内容

  1. Kachaka APIのリポジトリをcloneします.

    $ cd ~/
    $ git clone https://github.com/TeamSOBITS/kachaka-api
  2. 最新のDockerイメージをビルドします.

    $ cd kachaka-api/
    $ docker buildx build -t kachaka-api --target kachaka-grpc-ros2-bridge -f Dockerfile.ros2 . --build-arg BASE_ARCH=x86_64 --load
  3. ROS_DOMAIN_IDRMW_IMPLEMENTATIONを設定します.一例として,IDを10とします.

    $ echo 'export ROS_DOMAIN_ID=10' >> ~/.bashrc
    $ echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
    $ source ~/.bashrc

Important

データ通信のため,ローカル環境以外(Docker等)でROSのワークスペースを使用している場合は,ROS_DOMAIN_IDの値を統一させる必要があることを忘れないでください.

  1. KachakaのIPアドレスを確認します.

    1. ひとつの方法は,Kachakaに「ねぇカチャカ、IPアドレスを教えて」と話しかけることです.KachakaがIPアドレスを読み上げてくれます.
    2. もうひとつの方法は,Kachakaアプリの「設定」タブを開き,「設定・情報」カテゴリの「アプリ情報」をタップし,「カチャカ」カテゴリ内の「IPアドレス」欄を確認することです.
  2. KachakaとのROS Bridgeを簡単に立ち上げられるようにするために,aliasを設定します.

    $ echo 'alias kachaka="bash ~/kachaka-api/tools/ros2_bridge/start_bridge.sh"' >> ~/.bashrc
    $ source ~/.bashrc

(上に戻る)

実行・操作方法

  1. [ローカル環境] KachakaとのROS BridgeのDockerコンテナを立ち上げます.
    $ kachaka <カチャカのIPアドレス> sobit_light no
    

Note

sobit_lightを書くことによって,ロボットのnamespaceを設定しています.また,noでは,Kachaka側のrobot_descriptionの発行を停止させます.詳細については,Dockerを使ったros2_bridgeの起動を確認してください.

Warning

KachakaのIPが変わる可能性がありますので,ご注意ください.

  1. SOBIT LIGHTをインストールしている環境内でreal_minimal.launchというlaunchファイルを実行します.
    $ ros2 launch sobit_light_bringup real_minimal.launch.py

ロボットが立ち上がらない・Kachakaとの通信ができていない場合は,次の項目を確認してください.

  • 緊急停止ボタンが押下されていないか.
  • バッテリが十分に充電されているか .
  • USB hubがパソコンと接続されているか.
  • [TODO] Dynamixel Dongleの名前は/dev/ttyUSB0なのか.
    • 確認するために$ ls /devを書いて,/dev/ttyUSB1が表示される場合,controllers.urdf.xacrousb_portを更新してください.
  • Kachaka IPが正しいか.
  • ROS_DOMAIN_IDがカチャカ側と開発環境側と同じか.

(上に戻る)

テレオペレーション(遠隔操作)

  1. コントローラーを使用するためのROSパッケージの確認
$ dpkg -l | grep ros-humble-joy-linux
  1. Bluetoothを使用して,PCとdualshockの接続を行う.

    • 接続方法
    1. dualshockのHOMEボタンとSHAREボタンを青のランプが点滅するまで同時長押し
    2. BluetoothをONにして、"Wireless Controller"を選択
    3. 点滅が終わり、青のランプが付けば接続完了
  2. SOBIT LIGHTのreal_minimal.launch.py起動後,テレオペのlaunchを起動.

[!WARNING] 起動時にinitial_poseになるのでマニピュレータの状態を確認してください.

$ ros2 launch sobit_light_teleop dualshock_teleop.launch.py

(上に戻る)

dualchockの各種ボタンと操作方法

操作説明

各操作においてのジョイントの動きは以下の通りです.

マニピュレータ部分(Manipulator Control)

操作内容 x軸ジョイント名  y軸ジョイント名
△ + L-stick head_yaw_joint head_pitch_joint
□ + L-stick arm_shoulder_roll_joint  arm_shoulder_pitch_joint
✕ + L-stick arm_forearm_roll_joint  arm_elbow_pitch_joint
○ + L-stick arm_wrist_roll_joint  head_pitch_joint

上記に加えて[R2_button]を押すとjointが加速する

操作内容 出力動作
R-stick_button Handが閉じる
Share_button 初期位置にもどる

kachakaベース部分(Base Control)

操作内容 x軸  y軸
L2 + L-stick 旋回 直進・後進

上記に加えて[L2_button]を押すとbaseが加速する

(上に戻る)

Rviz2上の可視化

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

$ ros2 launch sobit_light_description display.launch.py

正常に動作した場合は,次のようなRviz画面が表示されます. SOBIT LIGHT Display with Rviz

(上に戻る)

シミュレータの実行方法

SOBIT LIGHTにはGazebo Fortressのシミュレーション環境が用意されておりますので,実機がなくても,動作確認が可能です.

$ ros2 launch sobit_light_bringup gz_minimal.launch.py

現時点では,これらの仮想環境が用意されています.

World Name 説明
empty 家具などのない環境を出現.
wrs WRS2020に実施されたTidy Up環境を出現.
small_room AWSが開発された小型部屋のレイアウトを出現.

環境を変更するために,world_modelgz_minimal.launch.pyで変更してください.

正常に動作した場合は,次のようなGazeboの画面が表示されます. SOBIT LIGHT Gazebo Ignition

Tip

実機と同じようなセンサも搭載されていますので,パソコンによって処理が重くなる可能性がありますので,必要なセンサだけをgz_minimal.launch.pyで選択してください.

'enable_gz_front_cam_color' : 'True',
'enable_gz_back_cam_color'  : 'True',
'enable_gz_head_cam_color'  : 'True',
'enable_gz_head_cam_depth'  : 'True',
'enable_gz_hand_cam_color'  : 'True',
'enable_gz_hand_cam_depth'  : 'True',
'enable_gz_lidar'           : 'True',
'enable_gz_imu'             : 'True',

また,複数のSOBIT LIGHTを同じシミュレーション環境でも出現できます. そのために,gz_minimal.launch.pyでロボットの数に合わせてgz_robot.launch.pyが実行されるようにその設定を加えてください.

robot_nameはロボット間で異なる値を持つ必要があります. さらに,robot_coords_xrobot_coords_y,およびrobot_coords_zでロボットの出現座標を変更できます.

一例はこちらとなります.

...
# Launch Robot No. 1
IncludeLaunchDescription(
    PythonLaunchDescriptionSource([
        PathJoinSubstitution([
            FindPackageShare('sobit_light_bringup'),
            'launch',
            'robot.launch.py'
        ])
    ]),
    launch_arguments={
        'robot_name': 'sobit_light_1',
        'robot_coords_x': '0', # x 
        'robot_coords_y': '0', # y
        'robot_coords_Y': '0', # yaw
        ...
    }.items()
),
# Launch Robot No. 2
IncludeLaunchDescription(
    PythonLaunchDescriptionSource([
        PathJoinSubstitution([
            FindPackageShare('sobit_light_bringup'),
            'launch',
            'gz_robot.launch.py'
        ])
    ]),
    launch_arguments={
        'robot_name': 'sobit_light_2',
        'robot_coords_x': '0', # x 
        'robot_coords_y': '2', # y
        'robot_coords_Y': '0', # yaw
        ...
    }.items()
),
...

(上に戻る)

ソフトウェア

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

ジョイントコントローラ

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

(上に戻る)

動作方法

  1. move_to_pose : 決められたポーズに動かします.
    # MoveToPose.action
    # Goal
    string pose_name                                # Target pose name
    builtin_interfaces/Duration time_allowance      # Target time length
    ---
    # Result
    bool success                                    # Success / Failure
    string message                                  # Result message
    builtin_interfaces/Duration total_elapsed_time  # Finished time length
    ---
    # Feedback
    string[] current_joint_names                    # Currently moving joint name(s)
    float32[] current_joint_rad                     # Currently moving joint position(s)
    # float32[] current_joint_vel                   # Currently moving joint velocity(s)
    builtin_interfaces/Duration move_time           # Elapsed time length

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

  1. move_joint : 指定されたジョイント(複数でも可)を任意の角度に動かします.
    # MoveJoint.action
    # Goal
    string[] target_joint_names                     # Target joint name(s)
    float64[] target_joint_rad                      # Target joint position(s)
    builtin_interfaces/Duration time_allowance      # Target time length
    ---
    # Result
    bool success                                    # Success / Failure
    string message                                  # Result message
    builtin_interfaces/Duration total_elapsed_time  # Finished time length
    ---
    # Feedback
    string[] current_joint_names                    # Currently moving joint name(s)
    float64[] current_joint_rad                     # Currently moving joint position(s)
    # float32[] current_joint_vel                   # Currently moving joint velocity(s)
    builtin_interfaces/Duration move_time           # Elapsed time length

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

  1. move_hand_to_target_coord : ハンドをxyz座標に届くように各関節の角度を確認します.

    # MoveHandToTargetCoord.srv
    # Request
    geometry_msgs/TransformStamped target_coord     # Target coordinates
    
    ---
    # Result
    geometry_msgs/Pose move_pose                    # Moving pose for grasping
    string[] target_joint_names                     # List of joint names to move
    float64[] target_joint_rad                      # List of joint angles to move
    bool success                                    # Enable grasp
    string message                                  # Result message
  2. move_hand_to_target_tf : ハンドをtf名に届くように各関節の角度を確認します.

    # MoveHandToTargetTF.srv
    # Request
    string target_frame                             # Frame name to be grasped
    geometry_msgs/TransformStamped tf_differential  # Differential coordinates of Target frame
    ---
    # Result
    geometry_msgs/Pose move_pose                    # Moving pose for grasping
    string[] target_joint_names                     # List of joint names to move
    float64[] target_joint_rad                      # List of joint angles to move
    bool success                                    # Enable grasp
    string message                                  # Result message

(上に戻る)

ジョイント名

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

ジョイント番号 ジョイント名 ジョイント定数名
0 arm_shoulder_roll_joint kArmShoulderRollJoint
1 arm_shoulder_pitch_joint kArmShoulderPitchJoint
2 arm_elbow_pitch_joint kArmElbowPitchJoint
3 arm_forearm_roll_joint kArmForearmRollJoint
4 arm_wrist_pitch_joint kArmWristPitchJoint
5 arm_wrist_roll_joint kArmWristRollJoint
6 hand_joint kHandJoint
7 head_yaw_joint kHeadYawJoint
8 head_pitch_joint kHeadPitchJoint

(上に戻る)

ポーズの設定方法

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

poses:
    - initial_pose
    - detecting_pose
    - following_pose

initial_pose:
    arm_shoulder_roll  : 0.0
    arm_shoulder_pitch : -1.5708
    arm_elbow_pitch    : 0.0
    arm_forearm_roll   : 0.0
    arm_wrist_pitch    : 0.0
    arm_wrist_roll     : 0.0
    head_yaw           : 0.0
    head_pitch         : 0.0
...

定義したいポース名をposesに追加し,その後ポース名の下に各ジョイントの角度を設定します.

(上に戻る)

ホイールコントローラ

SOBIT LIGHTの移動機構(Kachaka)を動かすための情報まとめです.

(上に戻る)

動作方法

  1. move_wheel_linear : 並進(前進・後退のみ)に移動させます.(弧度法:meters)

    # MoveWheelLinear.action
    # Goal
    geometry_msgs/Point target_point                # Target Translational Distance
    builtin_interfaces/Duration time_allowance      # Target time length
    ---
    # Result
    bool success                                    # Success / Failure
    string message                                  # Result message
    builtin_interfaces/Duration total_elapsed_time  # Finished time length
    ---
    # Feedback
    geometry_msgs/Point current_point               # Currently displaced distance
    builtin_interfaces/Duration move_time           # Currently elapsed time
  2. move_wheel_rotate : 回転運動を行う.(弧度法:Radian)

    # MoveWheelRotate.action
    # Goal
    float32 target_yaw                              # Target Rotational Distance
    builtin_interfaces/Duration time_allowance      # Target time length
    ---
    # Result
    bool success                                    # Success / Failure
    string message                                  # Result message
    builtin_interfaces/Duration total_elapsed_time  # Finished time length
    ---
    # Feedback
    geometry_msgs/Point current_point               # Currently displaced distance
    builtin_interfaces/Duration move_time           # Currently elapsed time

![TIP] モバイルベースの移動にはKachaka-APIライブラリも利用できます。詳しくは日本語のみのドキュメントをご参照ください。

(上に戻る)

ハードウェア

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

SOBIT LIGHT in OnShape

(上に戻る)

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

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

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

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

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

(上に戻る)

電子回路図

SOBIT LIGHT Circuit

[!CAUTION] デフォルトのカチャカ充電器は、充電時に100Vの電圧のみ対応しています。

(上に戻る)

ロボットの特徴

項目 詳細
最大直線速度 0.8[m/s]
最大回転速度 0.229[rad/s]
ベース最大積載量 20[kg]
マニピュレータ最大積載量 1.0[kg]
サイズ (LxWxH) 400 x 450 x 1000[mm]
重量 16.0[kg]
リモートコントローラー PS4
LiDAR 不明
RGB-D RealSense D415(ヘッド)、RealSense D405(ハンド)
スピーカー Jabra Speak 710
マイク MKE 400
アクチュエータ(アーム) XM540-W150 ×4、XM430-W320 ×6
電源 マキタ 6.0Ah 18V
PC接続 USB + 無線(カチャカ)

モバイルベース「カチャカ」の詳細については、公式仕様サイト(日本語のみ)をご覧ください。

(上に戻る)

部品リスト(BOM)

[!NOTE] 日本のサイト・値段(円)に更新していく予定です.

部品 型番 数量 おおよその単価 購入先
カチャカ B1A01 1 ¥245,000 リンク
カチャカベース ksh0003 1 ¥13,500 リンク
マキタバッテリー BL1860B 1 ¥28,300 リンク
マキタアダプター B0D6R6XSPX 1 ¥4,000 リンク
ダイナミクセルアクチュエータ XM430-W350-R 6 ¥49,600 リンク
ダイナミクセルアクチュエータ XM540-W150-R 4 ¥73,600 リンク
ダイナミクセルフレーム FR12-S102K セット 2 ¥3,200 リンク
ダイナミクセルフレーム FR12-H101K セット 1 ¥6,900 リンク
ダイナミクセルフレーム FR12-H104K セット 1 ¥6,500 リンク
ダイナミクセルフレーム FR13-H101K セット 1 ¥11,400 リンク
ダイナミクセル U2D2 8809052930103 1 ¥5,500 リンク
ダイナミクセル パワーハブ 8809052930530 1 ¥5,500 リンク
(オプション) USBハブ B0D1XVNTHJ 1 ¥3,700 リンク
(オプション) スピーカー Jabra Speak 710 1 ¥36,000 リンク
(オプション) マイク MKE 400 1 ¥30,300 リンク
RealSense D415 1 ¥42,000 リンク
(オプション) RealSense D405 1 ¥42,800 リンク
(オプション) 非常停止ボタン HW1B-X411R-MAU 1 ¥13,600 リンク
(オプション) M5Stack Basic V2.7 K001-V27 1 ¥6,200 リンク
(オプション) ESP32 DevKitC-1-N16R8 B0DWWY5KTZ 1 ¥1,500 リンク
(オプション) ディスプレイ B01CZL6QIQ 2 ¥2,200 リンク
スラストローラーベアリング AXK1104 2 ¥1,800 リンク
スラストローラーベアリング AXK1106 1 ¥1,400 リンク
アルミフレーム HFS5-2020-600 1 ¥1,500 リンク
アルミフレーム HFS5-2020-100 6 ¥750 リンク
アルミフレーム HFS5-2020-110 1 ¥750 リンク
ブラケット HBLFSNK6 3 ¥270 リンク
六角穴付ボルト CSH-ST-M2-4 16 ¥190 リンク
六角穴付ボルト CSH-ST-M2.5-5 54 ¥60 リンク
六角穴付ボルト CSH-ST-M2.5-6 16 ¥180 リンク
六角穴付ボルト CSH-ST-M2.5-8 34 ¥110 リンク
六角穴付ボルト CSH-ST-M2.5-10 10 ¥180 リンク
六角穴付ボルト CSH-ST-M2.5-12 16 ¥180 リンク
六角穴付ボルト CSH-ST-M3-5 4 ¥400 リンク
六角穴付ボルト CSH-ST-M4-15 16 ¥180 リンク
六角穴付ボルト CSH-ST-M5-8 50 ¥40 リンク
六角穴付ボルト CSH-ST-M5-12 12 ¥40 リンク
六角穴付ボルト CSH-ST-M5-15 8 ¥350 リンク
六角穴付ボルト CSH-ST-M5-20 4 ¥580 リンク
六角穴付ボルト CSH-ST-M5-32 2 ¥590 リンク
ナット LBNR2.5 24 ¥25 リンク
ナット LBNR4 16 ¥80 リンク
ナット LBNR5 26 ¥80 リンク
5シリーズ用ナット HNTT5-5 44 ¥100 リンク
電源アダプタプラグジャック B0BV8XCTC9 2 ¥950 リンク
eSUN 黒フィラメント ePLA+HS175B1KG-2SPOOL-US 1 ¥5,200 リンク
(オプション) eSUN 青フィラメント ePLA+HS175U1KG-US 1 ¥2,800 リンク

おおよその合計金額(オプション含む): ¥1,175,000

おおよその合計金額(オプション除く): ¥1,030,000

[!IMPORTANT] 販売店によって価格は変動します.最新の価格は各リンク先でご確認ください.

(上に戻る)

マイルストーン

  • OSS
    • ドキュメンテーションの充実
    • コーディングスタイルの統一
  • アクションへの対応

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

(上に戻る)

参考文献

(上に戻る)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8