Skip to content

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

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

(上に戻る)

セットアップ

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

(上に戻る)

環境条件

以下の環境を整えてから,インストール段階に進んでください.(jazzy-devel ブランチ想定)

System Version
Ubuntu 24.04 (Noble Numbat)
ROS Jazzy Jalisco
Python 3.12
Docker latest

Note

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

Important

Ubuntu 24.04 では Python の PEP 668 により、環境によっては pip installexternally-managed-environment で失敗します。 本リポジトリのセットアップでは apt によるインストールを優先してください(install.sh で apt を使用します)。

(上に戻る)

インストール方法

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

  1. ROS のワークスペース src フォルダに移動します.

    cd ~/colcon_ws/src/
  2. 本レポジトリを clone します.(jazzy-devel ブランチ)

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

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

    bash install.sh
  5. ビルドします.

    cd ~/colcon_ws/
    source /opt/ros/jazzy/setup.bash
    colcon build --symlink-install
    source ~/colcon_ws/install/setup.bash

Note

Docker コンテナ内では udev/systemd が無い構成の場合があります。その場合 udevadm に関するメッセージが出ることがありますが、 実機USBデバイスをコンテナ内で扱わない用途(例: ビルドのみ、シミュレーション)では問題にならないことがあります。

ローカル環境でのセットアップ内容(Kachaka ROS Bridge)

  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アドレスを教えて」と話しかける(読み上げ)
    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 yes

Note

sobit_lightを書くことによって,ロボットのnamespaceを設定しています.また,noでは,Kachaka側のrobot_descriptionの発行を停止させます.詳細は kachaka-api 側のドキュメントも確認してください.

Warning

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

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

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

  • 緊急停止ボタンが押下されていないか
  • バッテリが十分に充電されているか
  • USB hub がパソコンと接続されているか
  • USB デバイス名が想定通りか(例: /dev/ttyUSB*
  • Kachaka IP が正しいか
  • ROS_DOMAIN_ID が一致しているか

(上に戻る)

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

  1. コントローラーを使用するための ROS パッケージの確認
dpkg -l | grep ros-jazzy-joy-linux
  1. Bluetooth を使用して PC と dualshock の接続を行う
  • HOME + SHARE を青点滅まで長押し → Bluetooth で "Wireless Controller" を選択
  1. real_minimal.launch.py 起動後、テレオペ launch を起動
ros2 launch sobits_teleop sobits_teleop.launch.py robot_name:=sobit_light device:=ps4

(上に戻る)

Rviz2上の可視化

ros2 launch sobit_light_description display.launch.py

SOBIT LIGHT Display with Rviz

(上に戻る)

シミュレータの実行方法

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 Harmonic

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

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages