Skip to content

Add OneRobotics A1 robot arm - #7022

Open
uniquemelody wants to merge 13 commits into
cyberbotics:developfrom
uniquemelody:feature-onerobotics-a1
Open

uniquemelody wants to merge 13 commits into
cyberbotics:developfrom
uniquemelody:feature-onerobotics-a1

Conversation

@uniquemelody

@uniquemelody uniquemelody commented Sep 16, 2026 •

Copy link
Copy Markdown

Description

Adds a self-contained Webots model of the OneRobotics A1 independent seven-joint right arm, including motors and position sensors, physical properties, simplified box collisions, an end-effector slot, a Python motion demo, a sample world, documentation and an icon.

The assets derive from OneRobotics' published a1_r.urdf and STL files at source commit ecf530911284ba0e559f7a24dc222fd8e60d31ed. Robot assets are © 2026 OneRobotics, CC BY 4.0. Source STL hashes and modification attribution remain in the OBJ headers. Link1 derives from omichel's simplified mesh supplied for this PR on September 28.

Mesh update — 0bbc181c

The eight visual OBJ meshes now total 3,196,692 bytes / 33,882 triangles, compared with 9,483,046 bytes / 57,904 triangles at a24de471: 66.29% fewer bytes and 41.49% fewer triangles. The requested approximately tenfold file-size reduction remains outstanding.

  • Simplified internal mechanisms and closed deep joint cavities. Link1 follows the maintainer's exterior-shell example. Links3/4/6 use a 0.25 mm reconstruction grid with selected source-measured blind recesses; this spacing is not a surface-error bound.
  • Link5 retains source exterior faces with local seam repairs and cavity closure. Screw and top-slot walls are retained with blind floors; planar UVs were generated for this mesh. Cavity depths and some small openings intentionally differ from CAD.
  • All links use explicit smooth/sharp normals, UVs, the existing Plastic PBR appearance and cast shadows. Final index compaction saves 67,510 bytes while preserving numeric tokens and ordered face corners.
  • This update changes eight meshes and the model documentation. Physics, joint parameters, collision boxes, PROTO, world and controller are unchanged by this update.

Validation

  • GitHub reports all checks passed (11 successful, 10 skipped). Test Sources and Test Doc succeeded; Linux, Windows and macOS build jobs were skipped.
  • All eight meshes pass the offline geometry checks: valid indices and finite attributes, zero boundary/nonmanifold edges or vertices, zero degenerate/duplicate faces and zero strict triangle crossings.
  • Native Assimp raw/full Webots Mesh processing (PP_RVC_FLAGS=1000) and Blender comparisons confirm exact float32 position/normal/UV bits at ordered face corners before and after the final index compaction, including signed zeros.
  • The preceding 3,264,202-byte revision passed a 16-second R2025a desktop simulation: seven moving joints, four settled-pose checks, five screenshots and exit code 0 without detected loading/controller errors. The final index-compacted files reuse this evidence through exact importer equivalence; they were not separately rerun.
  • Visual review covers five fixed-camera stills. Runtime evidence uses R2025a with preserved R2025b source headers; native R2025b runtime validation remains outstanding.

Documentation

OneRobotics A1 model documentation

Screenshot

OneRobotics A1

Known limitations

This independent-arm revision has no gripper. Collision boxes approximate the visual geometry. Link7 mass and inertia retain the source's placeholder values.

@uniquemelody
uniquemelody marked this pull request as ready for review September 16, 2026 05:26
@uniquemelody
uniquemelody requested a review from a team as a code owner September 16, 2026 05:26
Comment thread projects/robots/onerobotics/a1/protos/docs/OneRoboticsA1.md Outdated
Comment thread projects/robots/onerobotics/a1/protos/OneRoboticsA1.proto Outdated
Comment thread projects/robots/onerobotics/a1/protos/OneRoboticsA1.proto Outdated
Co-authored-by: Olivier Michel <Olivier.Michel@cyberbotics.com>
@omichel
omichel self-requested a review September 16, 2026 09:00

@omichel omichel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this contribution.

However, this robot model doesn't meet the quality requirements to be included in the official Webots repository. You may want to include it as is in the community repository or modify this model as follows:

  1. The meshes contain many parts which are not visible (inner parts of the links). You should delete these part to reduce the number of triangles.
  2. A consequence of reducing the number of triangles will be that shadows will be cast for every link of the robot (which is not the case right now), in addition to other benefits (loads faster, reduce download time, etc.)
  3. The meshes are not smoothed. We can see many small faces on them. You should convert them to .obj files (instead of .stl) and add normals so that faces are smooth.
  4. The appearance of the robot should rely on a existing PBR material proto, such as Plastic (or another one if you believe it is best suited).

All the mesh work could be done manually with Blender: deleting non-visible inner parts, generating normals where it makes sense and converting to .obj format.

@uniquemelody

Copy link
Copy Markdown
Author

Thank you for the review, @omichel. I pushed 6c52f7d addressing the four points: removed occluded interior faces and reduced visual triangles by 63.3%, converted the eight visual STLs to smooth-shaded OBJ meshes with UVs, enabled shadows on every link, and switched the materials to the existing Plastic PROTO. I also corrected the sample-world viewpoint and updated the model documentation/PR description to identify these meshes as derivatives. The applicable source checks and an R2025a runtime smoke test pass. Could you please take another look when convenient?

@omichel
omichel self-requested a review September 17, 2026 10:57

@omichel omichel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for making the requested changes.
The shadow is now cast for every part of the robot arm which is great.
However, the meshes are now broken, see this screenshot:
Image
Moreover, there are still many inner triangles which are not visible from the outside and should be deleted.

@omichel

omichel commented Sep 17, 2026 •

Copy link
Copy Markdown
Member

The base link also has the same problem:
image
Before (left), After (right)

@omichel

omichel commented Sep 17, 2026

Copy link
Copy Markdown
Member

Doc filename breaks convention. protos/docs/OneRoboticsA1.md should be oneroboticsa1.md — all 90 existing PROTO doc pages in the repo are lowercase (TurtleBot3Burger.proto → turtlebot3burger.md, Irb4600-40.proto → irb4600-40.md; 0 of 90 contain an uppercase letter). This likely breaks the documentation url lookup declared in the PROTO header.

@omichel

omichel commented Sep 17, 2026

Copy link
Copy Markdown
Member

Unused DEFs: BASE_APPEARANCE and WHITE_APPEARANCE are never USEd (only LINK_APPEARANCE is), likewise DEF JOINT*_A1_R / DEF LINK*.

@uniquemelody

Copy link
Copy Markdown
Author

@omichel Thank you for the close-up screenshots. You were right: the previous camera-sampled deletion of individual faces created visible holes. I have replaced all eight meshes in c958e9c using the pinned source STLs, topology-checked simplification of complete parts, and solid unions for overlapping closed parts; the per-face deletion has been removed. I checked the base from the front and underside and the flange from the front and end in Webots, with no visible slits or missing surfaces. The meshes now have 82,450 triangles (42.6% below source); the largest is 18,857, and Webots reports no shadow/mesh warnings. I also renamed the documentation page to oneroboticsa1.md and removed the unused DEFs. The PR description now records the corrected method and validation. Please let me know if you still see a particular internal region that should be removed.

@omichel
omichel self-requested a review September 17, 2026 14:26

@omichel omichel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fixes.
The missing triangles are now back which is fine.
The doc file name and unused DEF are fixed.
However, there are still too many non-visible triangles in the inner parts of the robot that we should delete to make the model lighter.
I recommend using Blender (or similar 3D editing software) to edit the obj files.

@uniquemelody

Copy link
Copy Markdown
Author

Updated the branch onto the current develop baseline (264c9457f) so the PR is no longer behind. The current mesh revision remains c958e9c24: it restores watertight visual topology after the earlier broken-face attempt, uses smooth OBJ/PBR meshes, and passes the applicable source checks. The remaining requested work is specifically removal of additional non-visible inner geometry; I have not applied another unverified face-deletion pass that could recreate holes. Please re-review the current geometry and point out any particular inner regions that should be removed.

@omichel

omichel commented Sep 24, 2026

Copy link
Copy Markdown
Member

If you open link1.obj in Blender, you will see many inner triangles that are not visible in the simulation:
image
You should delete them manually in Blender to reduce the size of the mesh.
Other OBJ files have the same problem.

@uniquemelody

Copy link
Copy Markdown
Author

Implemented the requested mesh cleanup and pushed it to feature-onerobotics-a1.

  • Removed non-visible interior face records from the eight A1 OBJ meshes using a Blender BVH exterior-visibility pass (the mesh coordinates, normals, UVs, and material indices were left unchanged).
  • The cleaned meshes retain the same outer silhouette: a 32-view, 80x80-pixel-per-view regression measured <0.04% missing original-hit pixels for every mesh (0% for most meshes); no extra silhouette pixels were introduced.
  • Face counts are now: base_link 1,193; link1 8,189; link2 9,321; link3 11,688; link4 8,793; link5 11,708; link6 6,260; link7 752.
  • Assimp validation passed for all OBJ files, and the relevant Webots source tests passed (test_proto, test_header_version, test_line_ending).
  • The branch was also synchronized with the latest develop before this update.

Could you please re-check the meshes in Blender/Webots and let me know if any additional hidden geometry should be removed?

@omichel

omichel commented Sep 28, 2026

Copy link
Copy Markdown
Member

There are still many inner triangles that should be removed.
Here is an example of the simplification of link1.obj which now contains only the outer triangles.
The file size is down from 1452 to 136 KB (more than 10x smaller) and the appearance is the same.
link1_simplified.zip
The holes were closed, so that the object is fully closed (no possibility to see inside).
This work was done in Blender.
Please do the same for the other links, aiming at about a 10x file size reduction without loosing the level of details for the visible parts.
We cannot afford to grow the Webots repository with several MB of useless data.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants