Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
3 changes: 3 additions & 0 deletions config/control.launch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
urdf_path: description/urdf/inmoov.urdf.xacro
base_path: description
controllers_yaml: config/controllers.yaml
102 changes: 102 additions & 0 deletions config/controllers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Generated by lucy_config_generator — do not edit.
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
torso_head_controller:
type: joint_trajectory_controller/JointTrajectoryController

joint_state_broadcaster:
ros__parameters:
extra_joints:
- Empty.001_link_joint
- Empty.002_link_joint
- i01.head.eyeLeft.001_link_joint
- i01.head.eyeLeft_link_joint
- i01.head.eyeRight.001_link_joint
- i01.head.eyeRight_link_joint
- i01.head.jaw_link_joint
- i01.head.neck.001_link_joint
- i01.head.rollNeck_link_joint
- i01.head.rothead_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
- i01.leftHand.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.rightHand.wrist.001_link_joint
- i01.torso.midStom_link_joint
- i01.torso.topStom_link_joint

left_arm_controller:
ros__parameters:
allow_nonzero_velocity_at_trajectory_end: false
joints:
- 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:
allow_nonzero_velocity_at_trajectory_end: false
joints:
- 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

torso_head_controller:
ros__parameters:
allow_nonzero_velocity_at_trajectory_end: false
joints:
- left_shoulder_y_link_joint
- right_shoulder_y_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