Skip to content

feat(market_sim): add the supermarket and robot mesh assets - #1033

Closed
sanchit-badamikar wants to merge 1 commit into
mainfrom
fm/market-sim-assets
Closed

sanchit-badamikar wants to merge 1 commit into
mainfrom
fm/market-sim-assets

Conversation

@sanchit-badamikar

@sanchit-badamikar sanchit-badamikar commented Oct 8, 2026 •

Copy link
Copy Markdown

[written by AI]

Motivation

The Franka Mobile FR3 Duo supermarket example (market_sim) needs shelf, product and robot meshes. They are added on their own, so the PR that adds the market_sim package stays small enough to review.

This is part of the split of #1031 (see that PR for the history). Merge order: #1032, then #1045 (kitchen_sim and dual_arm_sim), then this PR, then #1046 (market_sim) on it. It is based on #1045, which sits on #1032; CI picks the MoveIt Pro image by the base branch, so its integration tests cannot pass until both merge and this PR targets main.

Brief description

  • src/market_sim/market_assets: shelf and product meshes, their MuJoCo body snippets and geometry data, and their licence.
  • src/market_sim/mjcf/assets: the merged rack meshes and colour palette of the store scene, and a copy of the Mobile FR3 Duo meshes for the robot's MuJoCo model, with the MuJoCo Menagerie licence.
  • Files only. The folder has no package.xml yet, so colcon and the MoveIt Pro config loader ignore it until the market_sim package lands.

How it was tested

Notes for reviewers

  • All 29 meshes and images are Git LFS objects under the existing LFS rules. No .gitattributes change is needed.
  • Where the assets came from is described in the market_sim README, which comes with piece 2.

@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@L4co77

L4co77 commented Oct 9, 2026

Copy link
Copy Markdown

[written by AI]

Verified the mechanical claims: the git tree SHAs of market_assets and mjcf/assets are identical between this head and #1031's head, so the whole content is byte-identical, not a sample; all 29 binaries are LFS pointers under the existing .gitattributes rules; no package.xml, and CI confirms colcon ignores the tree. Two things for piece 2 (#1035), neither blocking here — they just need to land in the README that carries the provenance:

  1. LICENSE-mujoco_menagerie names a source six of the meshes cannot come from. link0–link7.stl, hand.stl, and finger_0/1.obj do exist in Menagerie (franka_fr3 and franka_emika_panda) — that part of the attribution checks out. But franka_head.stl, franka_spine.stl, fr3_duo_cover.stl, fr3_duo_mount.stl, and tmrv0_2(_visual).stl are not in Menagerie, and the license file is the bare Apache 2.0 text with no scope note, so the directory implicitly claims Menagerie origin for them too. kitchen_sim/description/mujoco/ already ships Menagerie meshes with an unnamed LICENSE, so this PR follows (and slightly improves) the existing convention — no change requested here. The piece-2 README should just say explicitly where those six come from. If it is franka_description 2.9.0, the license text happens to be Apache 2.0 as well, but the named source would be wrong as it stands.

  2. supermarket_shelf_assets.xml references meshes/visual/*.obj, which does not exist in this tree — the files sit at shelf/meshes/*.obj with no visual/ directory. Not a runtime problem: the file is marked GENERATED by build_supermarket_shelf.py, and the live scene uses the merged rack meshes (pair_empty/pair_full/unit_real.obj), which is why feat(market_sim): add a Mobile FR3 Duo supermarket sim with AMCL and Nav2 #1031 ran. When piece 2 lands the loader, either align those inner paths or have the README state that the component XML is regeneration input for the merge script, not an include the scene loads — otherwise the first person who tries to include it gets a missing-mesh error with no hint why.

@sanchit-badamikar
sanchit-badamikar changed the base branch from main to fm/franka-description-2.9.0 October 9, 2026 19:06
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@sanchit-badamikar
sanchit-badamikar changed the base branch from fm/franka-description-2.9.0 to fm/kitchen-dual-arm-standalone October 9, 2026 20:05
@sanchit-badamikar
sanchit-badamikar force-pushed the fm/kitchen-dual-arm-standalone branch from a110637 to 1bfc0ca Compare October 9, 2026 20:34
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

  • lab_sim
    • ❌ jazzy: no report produced — see run logs
  • hangar_sim
    • ❌ jazzy: no report produced — see run logs

@sanchit-badamikar
sanchit-badamikar removed this pull request from stack #1048 October 12, 2026 16:08
@sanchit-badamikar
sanchit-badamikar marked this pull request as draft October 12, 2026 16:09
@sanchit-badamikar
sanchit-badamikar force-pushed the fm/kitchen-dual-arm-standalone branch from 1bfc0ca to c0e0bc3 Compare October 12, 2026 16:20
Shelf and product meshes with their MuJoCo body snippets, the merged rack
meshes and colour palette the store scene uses, and a copy of the Franka
Mobile FR3 Duo meshes for the robot's MuJoCo model. Files only: the
market_sim package that uses them comes in a later change.
@sanchit-badamikar
sanchit-badamikar changed the base branch from fm/kitchen-dual-arm-standalone to fm/franka-description-2.9.0 October 12, 2026 17:13
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

  • lab_sim
    • ❌ jazzy: no report produced — see run logs
  • hangar_sim
    • ❌ jazzy: no report produced — see run logs

@bkanator bkanator left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI]

Requesting changes for duplicated meshes and data; details inline. After the dedup about 17 files remain, so please fold them into #1046 so they land with the code that uses them and with their attribution.

Please also re-run CI now that the base is main (the current failures are image pulls against the old base), and refresh the PR description.

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] link0–link7, hand, franka_head, franka_spine, fr3_duo_cover, fr3_duo_mount and tmrv0_2 are byte-identical to the collision meshes in the vendored franka_description, which already installs meshes/ (CMakeLists.txt:21-28). Please drop these 15 and install-copy them into share/market_sim/mjcf/assets at build time, as factory_sim/CMakeLists.txt:19-31 does. Keep only finger_0/1.obj and tmrv0_2_visual.stl here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

[written by AI]

In part, through #1087: it vendors franka_description's FER collision meshes in franka_config and has kitchen_sim and dual_arm_sim load them with package://franka_description/... paths, so the copies are removed and nothing is copied at build time either. The reworked #1046, which takes over these files, will do the same for these market_sim meshes, which franka_config already holds, and will keep only the finger meshes and the base's visual meshes here.

@@ -0,0 +1,176 @@
Apache License

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] Only finger_0.obj and finger_1.obj come from MuJoCo Menagerie. The arm, hand, head, spine, mount and tmrv0_2 meshes are byte-identical to franka_description's, so this Menagerie-only licence misattributes them, and Franka's NOTICE is missing. This corrects the earlier comment on this PR, which counted link0–link7 and hand.stl as Menagerie's. Please scope this licence to the fingers and attribute anything else that stays to franka_description with its NOTICE.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

[written by AI]

In part: #1087 loads franka_description's collision meshes at run time from the vendored copy, which carries franka_description's own LICENSE and NOTICE, and updates kitchen_sim's and dual_arm_sim's NOTICE files to say so. In the reworked #1046, which takes over these files, market_sim will load its franka_description meshes the same way, this Menagerie licence copy goes, and the NOTICE attributes only the finger meshes to Menagerie.

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] This is 9.9 MB and about 197k faces: about 90% of the PR's size, and just under MuJoCo's 200k-faces-per-mesh limit. It is the only copy in the repo, so please decimate this visual-only mesh here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Agreed.
The base's visual mesh will be rebuilt from franka_description's tmrv0_2.dae, split into its 5 materials and decimated to roughly 20–40k faces in all, keeping the DAE's texture coordinates and colours. The 9.9 MB STL goes away.

@@ -0,0 +1,276 @@
<!-- GENERATED by build_products.py. Edit the script, not this file. -->

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] This header, and the same header on 45 other files, says GENERATED by build_products.py / build_supermarket_shelf.py ... Edit the script, not this file, but neither script is committed. Please commit the scripts, or change the headers to say these are Blender exports that are edited by hand.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

In #1046's rework the two shelf files will say what they are: Blender exports made once, with no build script, edited by hand. The 44 product files move to a follow-up products PR, which rebuilds them from the YCB object set with its own committed generator.

@@ -0,0 +1,49 @@
<!-- GENERATED by build_products.py. Edit the script, not this file. -->
<mujocoinclude>
<body name="soup_can_v2" pos="0 0 0" quat="1 0 0 0">

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] The 43 body XMLs, and the per-variant materials in products_assets.xml, hold nothing that product_catalog.json's items doesn't already have; v1/v2/v3 differ only in names. Please keep one source of truth: either build the bodies from the catalog in generate_market.py and drop products/bodies/, or trim the catalog to the fields the generator actually reads (items.*.size and stocked_scene).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

The products move to a follow-up PR that rebuilds them from the YCB object set; there the generator builds every body from one catalog, so products/bodies/ and the per-variant materials will go away.

shininess="0.20"
reflectance="0"
/>
<mesh name="shelf_frame_steel" file="meshes/visual/frame_steel.obj" />

@bkanator bkanator Oct 13, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[written by AI] +1 to the earlier comment: meshes/visual/ doesn't exist (the files are in shelf/meshes/), so please fix these paths.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done.

@sanchit-badamikar

Copy link
Copy Markdown
Author

Closing this PR and reworking #1046 to incorporate structural changes and review suggestions:

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants