Skip to content

TeamSOBITS/sobit_light

Repository files navigation

JA | EN

Warning

本ロボット,及び本リポジトリはサポートされて間もないため,今後も頻繁に大きく改良される可能性があります.

Contributors Forks Stargazers Issues License

SOBIT LIGHT

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

概要

SOBIT LIGHT

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

Warning

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

(上に戻る)

セットアップ

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

(上に戻る)

環境条件

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

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.git
  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_IDを設定します.一例として,10とします.

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

Important

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

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

    1. One way is to ask Kachaka by saying, "Hey Kachaka, what's your IP address?"
      Kachaka will then read out the IP address.
    2. Another way is to open the Settings tab in the Kachaka app, tap on App Information in the Settings & Information category, and check the IP Address field in the Kachaka category.
  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
  2. ロボットが立ち上がらない・Kachakaとの通信ができていない場合は,次の項目を確認してください.

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

(上に戻る)

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

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

Warning

実機と同じようなセンサも搭載されていますので,パソコンによって処理が重くなる可能性がありますので,必要なセンサだけを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                                # 事前に定義したポーズ名
    builtin_interfaces/Duration time_allowance      # 制限時間
    ---
    # Result
    bool success                                    # 成功/失敗
    string message                                  # 結果メッセージ
    builtin_interfaces/Duration total_elapsed_time  # かかった時間
    ---
    # Feedback
    string[] current_joint_names                    # 現在の稼働関節名リスト
    float32[] current_joint_rad                     # 現在の稼働関節角度リスト
    # float32[] current_joint_vel                   # 現在の稼働関節の速度リスト
    builtin_interfaces/Duration move_time           # 現在までにかかった時間

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

  1. move_joint : 指定されたジョイント(複数でも可)を任意の角度に動かします.
    # MoveJoint.action
    # Goal
    string[] target_joint_names                     # 稼働関節名リスト
    float64[] target_joint_rad                      # 稼働関節角度リスト
    builtin_interfaces/Duration time_allowance      # 制限時間
    ---
    # Result
    bool success                                    # 成功/失敗
    string message                                  # 結果メッセージ
    builtin_interfaces/Duration total_elapsed_time  # かかった時間
    ---
    # Feedback
    string[] current_joint_names                    # 現在の稼働関節名リスト
    float64[] current_joint_rad                     # 現在の稼働関節角度リスト
    # float32[] current_joint_vel                   # 現在の稼働関節の速度リスト
    builtin_interfaces/Duration move_time           # 現在までにかかった時間

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

  1. move_hand_to_coord : ハンドをxyz座標に動かします(把持モード).

    # MoveHandToTargetCoord.action
    # Goal
    geometry_msgs/TransformStamped target_coord  # 目標座標
    builtin_interfaces/Duration time_allowance   # 制限時間
    ---
    # Result
    bool success                            # 成功/失敗
    string message                          # 結果メッセージ
    geometry_msgs/Point moved_linear        # 把持に関して動いた水平距離
    float32 moved_yaw                       # 把持に関して動いた回転量
    ---
    # Feedback
    string current_state                    # 現在の動作状態
    float32 distance_to_target              # 対象物までの距離
  2. move_hand_to_tf : ハンドをtf名に動かします(把持モード).

    # MoveHandToTargetTF.action
    # Goal
    string target_frame                             # 把持対象のTFフレーム名
    geometry_msgs/TransformStamped tf_differential  # target_frameからの差分
    builtin_interfaces/Duration time_allowance      # 制限時間
    ---
    # Result
    bool success                               # 成功/失敗
    string message                             # 結果メッセージ
    geometry_msgs/Point moved_linear           # 把持に関して動いた水平距離
    float32 moved_yaw                          # 把持に関して動いた回転量
    ---
    # Feedback
    string current_state                       # 現在の動作状態
    float32 distance_to_target                 # 対象物までの距離
    bool object_detected                       # 対象物が検出されているか

(上に戻る)

ジョイント名

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
    hand               : 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                # 水平移動したい距離(差動二輪機構:x,全方向移動機構:x,y有効)
    builtin_interfaces/Duration time_allowance      # 制限時間
    ---
    # Result
    bool success                                    # 成功/失敗
    string message                                  # 結果メッセージ
    builtin_interfaces/Duration total_elapsed_time  # かかった時間
    ---
    # Feedback
    geometry_msgs/Point current_point               # 現在までに移動した距離
    builtin_interfaces/Duration move_time           # 現在までにかかった時間
  2. move_wheel_rotate : 回転運動を行う.(弧度法:Radian)

    # MoveWheelRotate.action
    # Goal
    float32 target_yaw                              # 回転したい角度
    builtin_interfaces/Duration time_allowance      # 制限時間
    ---
    # Result
    bool success                                    # 成功/失敗
    string message                                  # 結果メッセージ
    builtin_interfaces/Duration total_elapsed_time  # かかった時間
    ---
    # Feedback
    geometry_msgs/Point current_point               # 現在までに移動した距離
    builtin_interfaces/Duration move_time           # 現在までにかかった時間

(上に戻る)

ハードウェア

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

SOBIT LIGHT in OnShape

(上に戻る)

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

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

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

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

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

(上に戻る)

電子回路図

TBD

(上に戻る)

ロボットの組み立て

TBD

(上に戻る)

ロボットの特徴

TBD

項目 詳細

(上に戻る)

部品リスト(BOM)

TBD

部品 型番 個数 購入先
--- --- 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

(上に戻る)

マイルストーン

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

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

(上に戻る)

参考文献

(上に戻る)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8