Warning
本ロボット,及び本リポジトリはサポートされて間もないため,今後も頻繁に大きく改良される可能性があります.
目次
Preferred Robotics(c)が開発したカチャカを用いたSOBITS自作のモバイルマニピュレータを動かすためのライブラリです.
Warning
初心者の場合,実機のロボットを扱う際に,先輩方に付き添ってもらいながらロボットを動かしましょう.
(上に戻る)
ここで,本レポジトリのセットアップ方法について説明します.
(上に戻る)
まず,以下の環境を整えてから,次のインストール段階に進んでください.
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.git
-
最新の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
を設定します.一例として,10
とします.$ echo 'export ROS_DOMAIN_ID=10' >> ~/.bashrc $ source ~/.bashrc
Important
データ通信のため,ローカル環境以外(Docker等)でROSのワークスペースを使用している場合は,ROS_DOMAIN_ID
の値を統一させる必要があることを忘れないでください.
-
KachakaのIPアドレスを確認します.
- One way is to ask Kachaka by saying, "Hey Kachaka, what's your IP address?"
Kachaka will then read out the IP address. - Another way is to open the
Settings
tab in the Kachaka app, tap onApp Information
in theSettings & Information
category, and check theIP Address
field in theKachaka
category.
- One way is to ask Kachaka by saying, "Hey Kachaka, what's your IP address?"
-
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
がカチャカ側と開発環境側と同じか
(上に戻る)
実機を動かす前段階として,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
正常に動作した場合は,次のようなGazeboの画面が表示されます.
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_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 # 事前に定義したポーズ名 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に確認できます.ポーズの作成方法についてはポーズの設定方法をご参照ください.
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] ジョイント名についてはジョイント名をご確認ください.
-
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 # 対象物までの距離
-
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)を動かすための情報まとめです.
(上に戻る)
-
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 # 現在までにかかった時間
-
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にて公開しております.
(上に戻る)
ハードウェアの詳細についてはこちらを確認してください.
- Onshapeにアクセスしましょう.
[!NOTE] ファイルをダウンロードするために,
OnShape
のアカウントを作成する必要はありません.ただし,本ドキュメント全体をコピーする場合,アカウントの作成を推薦します.
Instances
の中にパーツを右クリックで選択します.- 一覧が表示され,
Export
ボタンを押してください. - 表示されたウィンドウの中に,
Format
という項目があります.STEP
を選択してください. - 最後に,青色の
Export
ボタンを押してダウンロードが開始されます.
(上に戻る)
TBD
(上に戻る)
TBD
(上に戻る)
TBD
項目 | 詳細 |
---|
(上に戻る)
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ページ をご覧ください.
(上に戻る)
(上に戻る)