目次
Preferred Robotics(c)が開発したカチャカという移動機構を用いたSOBITS自作のモバイルマニピュレータを動かすためのライブラリです.
Caution
初心者の場合,実機のロボットを扱う際に,先輩方に付き添ってもらいながらロボットを動かしましょう.
(上に戻る)
ここで,本レポジトリのセットアップ方法について説明します.
(上に戻る)
まず,以下の環境を整えてから,次のインストール段階に進んでください.
| System | Version |
|---|---|
| Ubuntu | 22.04 (Jammy Jellyfish) |
| ROS | Humble Hawksbill |
| Python | 3.10 |
| Docker | latest |
Note
UbuntuやROSのインストール方法に関しては,SOBITS Manualに参照してください.
(上に戻る)
SOBIT LIGHTを使用するローカル環境,またはコンテナ内でのセットアップ内容
-
ROSの
srcフォルダに移動します.$ cd ~/colcon_ws/src/
-
本レポジトリをcloneします.
$ git clone https://github.com/TeamSOBITS/sobit_light
-
レポジトリの中へ移動します.
$ cd sobit_light/ -
依存パッケージをインストールします.
$ bash install.sh
-
パッケージをコンパイルします.
$ cd ~/colcon_ws/ $ colcon build --symlink-install $ source ~/colcon_ws/install/setup.sh
ローカル環境でのセットアップ内容
-
Kachaka APIのリポジトリをcloneします.
$ cd ~/ $ git clone https://github.com/TeamSOBITS/kachaka-api
-
最新の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
-
ROS_DOMAIN_IDとRMW_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の値を統一させる必要があることを忘れないでください.
-
KachakaのIPアドレスを確認します.
- ひとつの方法は,Kachakaに「ねぇカチャカ、IPアドレスを教えて」と話しかけることです.KachakaがIPアドレスを読み上げてくれます.
- もうひとつの方法は,Kachakaアプリの「
設定」タブを開き,「設定・情報」カテゴリの「アプリ情報」をタップし,「カチャカ」カテゴリ内の「IPアドレス」欄を確認することです.
-
KachakaとのROS Bridgeを簡単に立ち上げられるようにするために,
aliasを設定します.$ echo 'alias kachaka="bash ~/kachaka-api/tools/ros2_bridge/start_bridge.sh"' >> ~/.bashrc $ source ~/.bashrc
(上に戻る)
- [ローカル環境] KachakaとのROS BridgeのDockerコンテナを立ち上げます.
$ kachaka <カチャカのIPアドレス> sobit_light no
Note
sobit_lightを書くことによって,ロボットのnamespaceを設定しています.また,noでは,Kachaka側のrobot_descriptionの発行を停止させます.詳細については,Dockerを使ったros2_bridgeの起動を確認してください.
Warning
KachakaのIPが変わる可能性がありますので,ご注意ください.
- 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.xacroのusb_portを更新してください.
- 確認するために
- Kachaka IPが正しいか.
ROS_DOMAIN_IDがカチャカ側と開発環境側と同じか.
(上に戻る)
- コントローラーを使用するためのROSパッケージの確認
$ dpkg -l | grep ros-humble-joy-linux-
Bluetoothを使用して,PCとdualshockの接続を行う.
- 接続方法
- dualshockのHOMEボタンとSHAREボタンを青のランプが点滅するまで同時長押し
- BluetoothをONにして、"Wireless Controller"を選択
- 点滅が終わり、青のランプが付けば接続完了
-
SOBIT LIGHTのreal_minimal.launch.py起動後,テレオペのlaunchを起動.
[!WARNING] 起動時にinitial_poseになるのでマニピュレータの状態を確認してください.
$ ros2 launch sobit_light_teleop dualshock_teleop.launch.py(上に戻る)
dualchockの各種ボタンと操作方法
各操作においてのジョイントの動きは以下の通りです.
| 操作内容 | 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 | 初期位置にもどる |
| 操作内容 | x軸 | y軸 |
|---|---|---|
| L2 + L-stick | 旋回 | 直進・後進 |
上記に加えて[L2_button]を押すとbaseが加速する
(上に戻る)
実機を動かす前段階として,Rviz2上でSOBIT LIGHTを可視化し,ロボットの構成を表示することができます.
$ ros2 launch sobit_light_description display.launch.py正常に動作した場合は,次のような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_modelをgz_minimal.launch.pyで変更してください.
正常に動作した場合は,次のようなGazeboの画面が表示されます.

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_x,robot_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のパンチルト機構とマニピュレータを動かすための情報まとめです.
(上に戻る)
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に確認できます.ポーズの作成方法についてはポーズの設定方法をご参照ください.
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] ジョイント名についてはジョイント名をご確認ください.
-
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
-
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)を動かすための情報まとめです.
(上に戻る)
-
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
-
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にて公開しております.
(上に戻る)
ハードウェアの詳細についてはこちらを確認してください.
- Onshapeにアクセスしましょう.
[!NOTE] ファイルをダウンロードするために,
OnShapeのアカウントを作成する必要はありません.ただし,本ドキュメント全体をコピーする場合,アカウントの作成を推薦します.
Instancesの中にパーツを右クリックで選択します.- 一覧が表示され,
Exportボタンを押してください. - 表示されたウィンドウの中に,
Formatという項目があります.STEPを選択してください. - 最後に,青色の
Exportボタンを押してダウンロードが開始されます.
(上に戻る)
[!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 + 無線(カチャカ) |
モバイルベース「カチャカ」の詳細については、公式仕様サイト(日本語のみ)をご覧ください。
(上に戻る)
[!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ページ をご覧ください.
(上に戻る)
(上に戻る)

