Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ project(thais_urdf)
find_package(ament_cmake REQUIRED)

install(
DIRECTORY launch config description hardware_config
DIRECTORY launch config description docs
DESTINATION share/${PROJECT_NAME}/
)

Expand All @@ -15,6 +15,9 @@ if(BUILD_TESTING)
ament_add_pytest_test(xacro_smoke test/test_xacro_smoke.py
TIMEOUT 180
)
ament_add_pytest_test(hardware_yaml test/test_hardware_yaml.py
TIMEOUT 120
)
endif()

ament_package()
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ be under the GNU General Public License, as dictated by that

# More information

- [Developer guide](doc/DEVELOPER.md) — workflow, CI, layout, style
- [Developer guide](docs/DEVELOPER.md) — workflow, CI, layout, style
- [Code of Conduct](CODE_OF_CONDUCT.md)
34 changes: 20 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,27 @@ The **`package.xml` name is `thais_urdf`** (historical name; content is the InMo
```text
thais_urdf/
├── package.xml # ROS package: thais_urdf
├── CMakeLists.txt # Installs launch/, config/, inmoov/ into share/thais_urdf
├── CMakeLists.txt # Installs launch/, config/, description/, docs/
├── docs/ # Developer + hardware mapping (see Documentation map)
├── launch/
│ ├── rviz.launch.py # Real stack + RViz + rosbridge + ros2_control node + spawners
│ ├── gazebo.launch.py # Gazebo + clock bridge + spawn + gz_ros2_control + RViz + rosbridge
│ ├── control.launch.py # ros2_control + spawners (default controllers from this package)
│ ├── rviz.launch.py # Real stack + RViz + rosbridge + ros2_control + spawners
│ ├── gazebo.launch.py # Gazebo + clock bridge + spawn + gz_ros2_control + RViz + rosbridge
│ └── rviz_standalone.launch.py
├── config/
│ └── inmoov_rviz.rviz
└── inmoov/
├── urdf/inmoov.urdf.xacro # Top-level xacro (base_path, use_gazebo_sim, controller_config)
├── 3dmodel/robot_description.urdf.xacro
│ ├── controllers.yaml
│ ├── inmoov_rviz.rviz
│ └── hardware/ # active.yaml — hardware single source of truth
└── description/
├── urdf/inmoov.urdf.xacro
├── robot_description/
├── ros2_control/
│ ├── inmoov_ros2_control.xacro # Real vs sim ros2_control systems
│ ├── inmoov_ros2_control.xacro
│ └── inmoov_gazebo.xacro
└── meshes/ # Collision/visual assets (e.g. dae)
└── meshes/
```

**Install:** `launch/`, `config/`, and **`inmoov/`** (URDF, meshes) install to **`share/thais_urdf`**. Default `urdf_path` / `base_path` in the combo launches use **`ros2 pkg prefix thais_urdf`**; override only for custom trees.
**Install:** `launch/`, `config/`, **`description/`**, and **`docs/`** install to **`share/thais_urdf`**. Default `urdf_path` / `base_path` in the combo launches use **`ros2 pkg prefix thais_urdf`**; override only for custom trees.

## Relationship to lucy_ros_packages

Expand Down Expand Up @@ -73,8 +77,8 @@ ros2 launch thais_urdf gazebo.launch.py

Optional arguments for **`rviz.launch.py`** and **`gazebo.launch.py`** only:

- `urdf_path:=<path>` — default: `$(ros2 pkg prefix thais_urdf)/share/thais_urdf/inmoov/urdf/inmoov.urdf.xacro`
- `base_path:=<path>` — default: `.../share/thais_urdf/inmoov` (mesh and xacro include root)
- `urdf_path:=<path>` — default: `$(ros2 pkg prefix thais_urdf)/share/thais_urdf/description/urdf/inmoov.urdf.xacro`
- `base_path:=<path>` — default: `.../share/thais_urdf/description` (mesh and xacro include root)

### RViz in a second terminal (bringup already running)

Expand Down Expand Up @@ -136,9 +140,11 @@ Tests call **`xacro`** on the URDF; coverage mainly reflects **test + launch** P
| Doc | Content |
|-----|---------|
| This file | Repository scope and integration |
| [**doc/DEVELOPER.md**](doc/DEVELOPER.md) | **Contributors** — URDF/xacro, launches, install layout, extension checklist |
| [**docs/DEVELOPER.md**](docs/DEVELOPER.md) | **Contributors** — URDF/xacro, hardware YAML, launches, install layout, extension checklist |
| [**docs/hardware_mapping.md**](docs/hardware_mapping.md) | Schema and calibration for `config/hardware/active.yaml` |
| [**docs/inmoov_i2.md**](docs/inmoov_i2.md) | i1 scope vs i2 head actuators (YAML appendix) |
| **lucy_ros_packages** repo README | Bringup, hardware control, cameras |
| Workspace **`lucy_ws/docs/developer_lucy_packages.md`** | Index pointing to each repo’s `doc/DEVELOPER.md` |
| Workspace **`lucy_ws/docs/developer_lucy_packages.md`** | Index pointing to each repo’s developer doc (paths vary by repo) |
| Workspace **`lucy_ws/docs/simulation_and_visualization.md`** | Control panel ↔ ROS pipeline, sim time, gaps |

## License and assets
Expand Down
92 changes: 92 additions & 0 deletions config/controllers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
controller_manager:
ros__parameters:
update_rate: 100
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
left_arm_controller:
type: joint_trajectory_controller/JointTrajectoryController
right_arm_controller:
type: joint_trajectory_controller/JointTrajectoryController

# Extra joints (not in ros2_control) published at 0 so robot_state_publisher builds full TF tree.
# Fixes disconnected tree in view_frames (base_node->stand_link vs torso_y_link->arms).
joint_state_broadcaster:
ros__parameters:
extra_joints:
- Empty.001_link_joint
- Empty.002_link_joint
- i01.torso.midStom_link_joint
- i01.torso.topStom_link_joint
- left_shoulder_z_link_joint
- i01.leftHand.wrist.001_link_joint
- i01.leftHand.index2_link_joint
- i01.leftHand.index3_link_joint
- i01.leftHand.majeure2_link_joint
- i01.leftHand.majeure3_link_joint
- i01.leftHand.pinky0_link_joint
- i01.leftHand.pinky2_link_joint
- i01.leftHand.pinky3_link_joint
- i01.leftHand.ringfinger0_link_joint
- i01.leftHand.ringfinger2_link_joint
- i01.leftHand.ringfinger3_link_joint
- i01.leftHand.thumb1_link_joint
- i01.leftHand.thumb3_link_joint
- right_shoulder_z_link_joint
- i01.rightHand.wrist.001_link_joint
- i01.rightHand.index2_link_joint
- i01.rightHand.index3_link_joint
- i01.rightHand.majeure2_link_joint
- i01.rightHand.majeure3_link_joint
- i01.rightHand.pinky0_link_joint
- i01.rightHand.pinky2_link_joint
- i01.rightHand.pinky3_link_joint
- i01.rightHand.ringfinger0_link_joint
- i01.rightHand.ringfinger2_link_joint
- i01.rightHand.ringfinger3_link_joint
- i01.rightHand.thumb1_link_joint
- i01.rightHand.thumb3_link_joint
- i01.head.neck.001_link_joint
- i01.head.rollNeck_link_joint
- i01.head.rothead_link_joint
- i01.head.jaw_link_joint
- i01.head.eyeRight_link_joint
- i01.head.eyeRight.001_link_joint
- i01.head.eyeLeft.001_link_joint
- i01.head.eyeLeft_link_joint

# Joint names must match URDF exactly for correct TF tree (robot_state_publisher + RViz/Gazebo)
left_arm_controller:
ros__parameters:
joints:
- left_shoulder_y_link_joint
- left_shoulder_z_link_joint
- left_shoulder_x_link_joint
- left_elbow_x_link_joint
- left_wrist_z_link_joint
- i01.leftHand.thumb_link_joint
- i01.leftHand.index_link_joint
- i01.leftHand.majeure_link_joint
- i01.leftHand.ringFinger_link_joint
- i01.leftHand.pinky_link_joint
command_interfaces:
- position
state_interfaces:
- position

right_arm_controller:
ros__parameters:
joints:
- right_shoulder_y_link_joint
- right_shoulder_z_link_joint
- right_shoulder_x_link_joint
- right_elbow
- right_wrist_z_link_joint
- i01.rightHand.thumb_link_joint
- i01.rightHand.index_link_joint
- i01.rightHand.majeure_link_joint
- i01.rightHand.ringFinger_link_joint
- i01.rightHand.pinky_link_joint
command_interfaces:
- position
state_interfaces:
- position
7 changes: 7 additions & 0 deletions config/hardware/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Hardware YAML store

Authoritative documentation for the schema, calibration fields, and workflow lives in the installed package docs:

**[docs/hardware_mapping.md](../../docs/hardware_mapping.md)** (also under `share/thais_urdf/docs/` after `colcon` install).

Related: [docs/inmoov_i2.md](../../docs/inmoov_i2.md) — InMoov i1 scope vs i2 head actuators (appendix).
Loading
Loading