Skip to content

Add a camera-renderer setting to lab_sim - #970

Merged
nbbrooks merged 5 commits into
v10.2from
nyx-renderer
Oct 21, 2026
Merged

nbbrooks merged 5 commits into
v10.2from
nyx-renderer

Conversation

@danwahl

@danwahl danwahl commented Sep 17, 2026 •

Copy link
Copy Markdown

[written by AI]

Refs PickNikRobotics/moveit_pro#20960

Motivation

PickNikRobotics/moveit_pro#22738 added an optional path-traced camera renderer that no configuration starts. This lets lab_sim start it.

Brief description

MOVEIT_PRO_CAMERA_RENDERER selects which renderer produces the color topics of lab_sim's RGB cameras, scene_camera and wrist_camera:

value <camera>/color, camera_info <camera>/depth, points <camera>/opengl/* <camera>/nyx/*
opengl (default) MuJoCo MuJoCo none none
nyx Nyx MuJoCo none none
both none MuJoCo MuJoCo Nyx

opengl is the only option on images without the Nyx runtime, which is every image except amd64 NVIDIA.

picknik_ur.xacro adds a <sensor> block per camera for nyx (color_enabled false) and for both (rgb_topic and camera_info_topic under opengl/). runtime.launch.xml starts one Nyx node per camera, since the node renders a single camera per instance, and sets topic_namespace (empty for nyx, nyx for both). both leaves <camera>/color empty so no consumer reads one renderer while expecting the other. Depth and points publish in every mode. Ten of lab_sim's Objectives read wrist_camera/color, so nyx and both change what they see.

An unrecognized value fails the description instead of leaving the config without a camera.

april_tag_sim and hand_eye_calibration_sim reuse this description with their own runtime launch files and no Nyx nodes, so both pin camera_renderer: "opengl" in urdf_params. Without the pin, setting the variable for the deployment disables their cameras' color with nothing to replace it, and wrist_camera is the camera hand_eye_calibration_sim calibrates.

Release notes

lab_sim can render scene_camera and wrist_camera with the Nyx path-traced renderer by setting MOVEIT_PRO_CAMERA_RENDERER to nyx or both.

How it was tested

  • pre-commit run on the changed files.
  • xacro with opengl, nyx, both, unset, and bogus: the first three emit the intended <sensor> block for both cameras with unchanged publish rates, unset behaves as opengl, and bogus fails naming the value.
  • ros2 launch of the launch file's <let> bindings in a Pro image: nyx_enabled is False for unset and opengl and True for nyx and both, and nyx_namespace is empty for nyx and nyx for both.
  • lab_sim under ros2_control_node with a moveit_pro#22738 build of picknik_mujoco_ros, probing every scene_camera topic in each mode: MuJoCo's publishers match the table.
  • ros2 launch of runtime.launch.xml passes --topic-namespace= to the Nyx node in nyx mode and --topic-namespace=nyx in both.

Claude agent checks

  • code-reviewer
  • documentation-bot
    • no impact; the moveit_pro README and design doc already describe this wiring
  • SKIPPED licensing-privacy-bot
    • xacro, launch, and config changes only; no vendored or copied code
  • platform-architect-bot
  • roboticist-bot
  • SKIPPED frontend-noah-bot
    • no frontend files changed
  • security-auditor
  • compatibility-bot
    • no impact; with MOVEIT_PRO_CAMERA_RENDERER unset, xacro and ros2 launch were run in an image without picknik_nyx_renderer and behave as before
  • SKIPPED sonar-bot
    • no Python or C++ changed
  • SKIPPED test-runner
    • no buildable code; the lab_sim and hangar_sim integration tests pass in CI

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Summary

Summary by CodeRabbit

  • New Features
    • Lab simulation camera rendering can be configured to use MuJoCo (OpenGL), Nyx, or both, with OpenGL remaining the default.
    • Nyx modes provide camera color and camera information through Nyx and require an exported lab simulation scene and the Nyx renderer.
    • In both-renderer mode, OpenGL and Nyx camera topics are available under separate namespaces. Depth and point topics remain provided through MuJoCo.
    • Invalid renderer selections now produce an error.

The simulation selects opengl, nyx, or both through MOVEIT_PRO_CAMERA_RENDERER. Xacro configures MuJoCo camera output for the selected mode. The runtime launch starts Nyx camera nodes for Nyx modes, subject to package and scene prerequisites.

Changes: Camera rendering

Layer / File(s) Summary
Renderer-specific camera configuration
src/lab_sim/description/picknik_ur.xacro, src/april_tag_sim/config/config.yaml, src/hand_eye_calibration_sim/config/config.yaml
Xacro validates the renderer setting and applies sensor settings to the configured cameras. The simulation configurations set camera_renderer to opengl.
Conditional Nyx renderer launch
src/lab_sim/launch/nyx_cameras.launch.py, src/lab_sim/launch/runtime.launch.xml, .gitignore
For Nyx modes, the launch checks for the Nyx package, USER_WS, and an exported scene. It includes one Nyx camera launch per configured camera. The both mode uses the nyx namespace. .gitignore excludes .nyx_scenes/.
Renderer tests and pinned configurations
src/lab_sim/test/test_camera_renderer.py, src/lab_sim/CMakeLists.txt, src/april_tag_sim/CMakeLists.txt
Tests cover launch selection, invalid values, and Xacro sensor settings. Integration-test environments set MOVEIT_PRO_CAMERA_RENDERER to opengl, and CMake registers the renderer test target.

Suggested reviewers: fdavulcu

Priority: ➖ Normal

Merge Risk: 🔵 Low · up to 43630

The renderer change is mergeable with a bounded test follow-up: assert the actual color-disabled setting and both-mode topic names so future regressions are caught.

Pre-merge checks: Passed 4
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Human Review Check Passed PASS. The PR adds renderer selection for simulation cameras, related launch logic, tests, and simulation configuration. The changes are limited to lab_sim, april_tag_sim, and `hand_eye_calibration…
Description check Passed The pull request description directly matches the changes. It explains the renderer modes, Nyx integration, camera-topic behavior, configuration updates, and reported testing.
Full details: Human Review Check

Explanation

PASS. The PR adds renderer selection for simulation cameras, related launch logic, tests, and simulation configuration. The changes are limited to lab_sim, april_tag_sim, and hand_eye_calibration_sim. They do not modify auth, permissions, secrets, CI/CD pipelines, deployment or production hosting configuration, behavior packages, SDKs, or files under bin/scripts. The 342 added lines form one focused simulation feature, not a large cross-cutting change.

✨ Finishing Touches: 💡 1
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR

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

@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

@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@danwahl danwahl self-assigned this Sep 28, 2026
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

1 similar comment
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

1 similar comment
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@danwahl
danwahl requested a review from nbbrooks September 28, 2026 19:00
@danwahl
danwahl marked this pull request as ready for review September 28, 2026 19:00
coderabbitai[bot]
coderabbitai Bot previously approved these changes Sep 28, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 2, 2026
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 3, 2026
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 7, 2026
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@nbbrooks

Copy link
Copy Markdown
Member

[written by AI]

MOVEIT_PRO_CAMERA_RENDERER covers scene_camera only, and wrist_camera stays on MuJoCo in every mode. The exported Nyx scene already carries wrist_camera (camera 1, 1280x720), but the xacro has no <sensor name="wrist_camera"> override, and runtime.launch.xml starts one Nyx node with camera=scene_camera.

Running lab_sim in nyx mode on an AMD (ROCm) build of moveit_pro#23219, ros2 topic info -v shows:

Topic Publisher
scene_camera/color, camera_info nyx_camera_scene_camera
scene_camera/depth, points mujoco_system_render
wrist_camera/color, camera_info, depth, points mujoco_system_render

Unlike scene_camera, the wrist camera has consumers: take_picture_with_wrist_camera.xml, ml_segment_point_cloud_from_clicked_point.xml, select_region_for_coverage_path.xml and pick_all_pill_bottles.xml read /wrist_camera/color, and three of them read /wrist_camera/camera_info. Extending the both layout to it leaves wrist_camera/color empty, so those Objectives get no image in both mode. In nyx mode they would read Nyx's image, whose camera_info matches MuJoCo's depth as long as the export keeps the MJCF resolution.

Either extend the setting to wrist_camera and state that both is a comparison mode those Objectives do not run in, or keep the setting scene_camera-only and say so in the xacro comment and the PR description.

@nbbrooks

nbbrooks commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

This PR is proof of compatibility with user-installed Nyx feeds - not fine tuning of assets/lighting

image

@nbbrooks nbbrooks 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.

See note above about

MOVEIT_PRO_CAMERA_RENDERER covers scene_camera only, and wrist_camera stays on MuJoCo in every mode

@nbbrooks nbbrooks 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.

@danwahl to extend renderer param pattern to wrist camera

<!-- Whether to launch the MuJoCo interactive viewer -->
<param name="mujoco_viewer">$(arg mujoco_viewer)</param>
</hardware>
<!-- nyx: the Nyx node publishes scene_camera/color and camera_info, so MuJoCo publishes only depth and points. -->

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.

MOVEIT_PRO_CAMERA_RENDERER covers scene_camera only, and wrist_camera stays on MuJoCo in every mode. Should apply to both.

@danwahl
danwahl force-pushed the nyx-renderer branch 3 times, most recently from 42973c6 to a53f35e Compare October 19, 2026 19:43
@danwahl
danwahl requested a review from nbbrooks October 19, 2026 19:46
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@picknik-baymax-bot picknik-baymax-bot Bot 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]

Reviewed at 375dc44. CI is green and wrist_camera is now covered. Thanks.

Requesting changes because of what this PR is for. moveit_pro#23927 documents this PR as the way to wire MOVEIT_PRO_CAMERA_RENDERER and the Nyx launch into a robot config. #1075 then copies the pattern to every MuJoCo config. So the bar is "a pattern users copy into their own configs", not "works for lab_sim".

The force-push from 4363050 to 375dc44 dropped several pieces that pattern needs. The earlier version had all of them, and #1075 still carries some:

  1. An empty value fails the description. Details inline. moveit_pro run accepts empty, and the launch file treats empty as opengl.
  2. The value is evaluated, not compared. Details inline. Both the xacro dict[...] lookup and the launch $(eval ...) paste the raw variable into a Python expression. 4363050 bound it to a property first and explained why.
  3. The camera list is hard-coded twice. A config with other cameras has to copy and edit two <sensor> blocks per mode, plus one <include> per camera. 4363050 had a nyx_cameras arg and a camera_renderer_sensors macro. #23927 links readers to that macro (See the camera_renderer argument and the camera_renderer_sensors macro in lab_sim/description/picknik_ur.xacro), and the macro doesn't exist at this head. #1075 builds on it too (hand_eye_calibration_sim sets nyx_cameras for its three cameras).
  4. Pinned through urdf_params vs. "set it in the environment". This head pins camera_renderer in urdf_params for april_tag_sim and hand_eye_calibration_sim. #1075's description says: "Set it in the environment, not urdf_params: the launch file reads only the environment." The two PRs need one rule before #23927 documents it. Pinning is right for configs that start no Nyx nodes, but the xacro comment should say that pins are only for configs that start no Nyx nodes. Otherwise a user config that inherits lab_sim's launch file and pins the renderer ends up with the description in one mode and the launch file in another.
  5. Lost safeguards.
    • test_camera_renderer.py and its CMake entry were removed. That test checked the modes, the camera list, and the invalid value, and it would have caught item 1.
    • The MOVEIT_PRO_CAMERA_RENDERER=opengl pins on the lab_sim and april_tag_sim integration-test environments were removed. Without them, a developer who exports both and runs colcon test sees the wrist-camera Objectives fail.
    • The .nyx_scenes/ entry in .gitignore was removed. #23927 states "The example workspace's .gitignore excludes .nyx_scenes/", and exports can be hundreds of MB inside $USER_WS.
  6. Missing-scene handling. 4363050's nyx_cameras.launch.py failed at launch when the Nyx package was missing, when USER_WS was unset, or when the exported scene directory didn't exist. Each message said what to do, because MuJoCo color is already off in nyx mode and those cases would otherwise leave the cameras with no color. At this head, find-pkg-share picknik_nyx_renderer gives a bare launch error, and a missing scene is reported only by the node after it starts. Either approach is fine, but whichever is canonical should fail loudly and say what to do.

Suggested path: restore the 4363050 design (arg + macro + guard, the launch checks, the test, the env pins, .gitignore) on top of the wrist_camera and pin changes. Then rebase #1075 onto it. #1075 is stacked on the older 80592ed commit and will need the rebase anyway. After that, recheck #23927's lab_sim references against the merged result.

Not blocking, but please state it where users will see it: in both, nothing publishes wrist_camera/color. Ten lab_sim Objectives read that topic (take_picture_with_wrist_camera, pick_all_pill_bottles, ml_segment_point_cloud*, select_region_*, addbottlestoplanningscene, …), so both is for comparison only. #23927 says this; the xacro comment and this PR's description should too.

Verified: xacro on a reduced copy of the selector (unset/opengl/nyx/both OK; empty → error: ''; a quoted value is evaluated); moveit_pro main launcher validation, nyx_camera.launch.py and camera_node.py. No ROS launch was run.

Comment thread src/lab_sim/description/picknik_ur.xacro Outdated
Comment thread src/lab_sim/description/picknik_ur.xacro Outdated
Comment thread src/lab_sim/description/picknik_ur.xacro Outdated
Comment thread src/lab_sim/description/picknik_ur.xacro Outdated
name="nyx_namespace"
value="$(eval '&quot;nyx&quot; if &quot;$(var camera_renderer)&quot; == &quot;both&quot; else &quot;&quot;')"
/>
<include

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]

In nyx mode, MuJoCo color is already disabled. When the Nyx package is missing, USER_WS is unset, or .nyx_scenes/lab_sim was never exported, the result is a bare find-pkg-share error or a node that exits after it starts. Either way the cameras have no color. 4363050's nyx_cameras.launch.py checked all three before starting and said how to fix each one. For the canonical example, I'd restore those checks or something like them.

Comment thread src/hand_eye_calibration_sim/config/config.yaml
@github-actions

Copy link
Copy Markdown

⚠️ This PR modifies 1 file(s) that also exist in PickNikRobotics/moveit_pro_empty_ws.

Consider whether the change should land upstream in moveit_pro_empty_ws first so downstream forks pick it up on the next sync.

Overlapping files
  • .gitignore

@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@danwahl

danwahl commented Oct 20, 2026

Copy link
Copy Markdown
Author

[written by AI]

Items 1 and 2 are real and are fixed in 2542cba, which also restores the .nyx_scenes/ ignore and the MOVEIT_PRO_CAMERA_RENDERER=opengl pins on the lab_sim and april_tag_sim integration tests. The empty value was reachable: MOVEIT_PRO_CAMERA_RENDERER_validator returns not value or value in CAMERA_RENDERERS, so a bare assignment in a workspace .env passed validation and took the description down. The both consequence is in the PR description.

Item 3, a proposal

Put the arg, the validation and the macro in picknik_accessories/descriptions/sensors/camera_renderer.urdf.xacro, and have lab_sim include them:

<xacro:include filename="$(find picknik_accessories)/descriptions/sensors/camera_renderer.urdf.xacro" />
<xacro:arg name="nyx_cameras" default="scene_camera wrist_camera" />
...
<xacro:camera_renderer_sensors cameras="$(arg nyx_cameras)" />

That package is already an exec_depend of lab_sim, april_tag_sim, hand_eye_calibration_sim, hangar_sim, factory_sim, grinding_sim, picknik_ur_base_config and kinova_gen3_base_config, so nothing gains a dependency, and it is where reusable sensor xacro already lives, beside realsense_d415.urdf.xacro. The prose describing the three values gets written once, and #1075's configs would include the one definition and pass their own camera list rather than each carrying a copy of the pattern.

Two changes from your version while moving it. The renderer value is bound to a property before it is compared, which is also what closes item 2: in ${'$(arg camera_renderer)' not in ('', 'opengl', 'nyx', 'both')} the value lands inside the expression, so the guard itself can be bypassed through the variable. With it bound, the dict(opengl=..., nyx=..., both=...)[...] indexing becomes camera_renderer == 'nyx'.

Verified on the full lab_sim description, not a reduced copy: the five valid values behave as they do today, an unrecognized value and an injected one both fail with the value named, a camera_renderer pin in urdf_params still overrides the environment, and a three-camera list emits three blocks.

Pushed as c21e61f so the shape is visible rather than described. Happy to revert it and put the macro back in lab_sim if you would rather keep #1075 as it stands.

Item 4

The pins in april_tag_sim and hand_eye_calibration_sim set the xacro arg because that is the only channel those two have: neither carries a description of its own, and both reuse lab_sim's through based_on_package. They start no Nyx nodes today, so the pin keeps them on MuJoCo rather than leaving them with color_enabled false and nothing publishing. They should come out when #1075 gives those configs Nyx nodes, which is cleaner there than here.

Item 6

This could be broken out into a separate PR together with the launch file's two $(eval) expressions. A Python launch file removes the $(eval), loops the camera list instead of duplicating the include per camera, and gives one place to report a missing exported scene. Flagging rather than asking, in case you would rather have it here.

One note on the rationale: the sentence quoted from moveit_pro#23927 pointing at the camera_renderer_sensors macro is not in that issue, so I took the requirement from #1075, where the macro is.

@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

picknik-baymax-bot[bot]
picknik-baymax-bot Bot previously approved these changes Oct 20, 2026

@picknik-baymax-bot picknik-baymax-bot Bot 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]

Re-reviewed at c21e61f (2542cba + c21e61f since my last review). Approving: the description side is now a pattern worth copying, and CI is green (lab_sim 34, hangar_sim 19).

Checked by running xacro 2.1.1 (the Jazzy release) on camera_renderer.urdf.xacro from this head with a two-camera caller:

  • unset, empty, opengl → no <sensor> blocks; nyx → color_enabled false for both; both → opengl/ topics for both.
  • bogus, Nyx, nyx, nyx'] or True or [', nyx' or 'x, ${"nyx"}, $(env HOME) → all fail with exit 2 and the message naming the value. Binding to a property closed the injection, guard included.
  • A camera_renderer:=opengl pin overrides MOVEIT_PRO_CAMERA_RENDERER=nyx; nyx_cameras:="a b c" emits three blocks.

Status of my earlier items

  1. Empty value: fixed.
  2. Evaluated value: fixed in the xacro. The two $(eval) lets in runtime.launch.xml still paste the value in, but any value they'd misread now fails the description first, so deferring that is fine.
  3. Shared macro: fixed, and picknik_accessories is a better home than lab_sim, since every MuJoCo config already depends on it.
  4. Pins: the reasoning in the comments and the YAML (no description of their own, no Nyx nodes, remove in #1075) settles it.
  5. .gitignore and the integration-test pins are restored. test_camera_renderer.py is not. With the macro now shared by every config in #1075, a small test in picknik_accessories would protect all of them; fine as a follow-up.
  6. Launch-time checks: OK as a separate PR, along with the Python launch file.

On the #23927 quote: it is in that PR's diff, not the description. In the new tutorial page: "See the camera_renderer argument and the camera_renderer_sensors macro in lab_sim/description/picknik_ur.xacro". Since the macro has moved to picknik_accessories/descriptions/sensors/camera_renderer.urdf.xacro, that line now needs to change in #23927. I'll flag it there.

Before #23927 merges

  • #23927 points to lab_sim/launch/runtime.launch.xml as the launch example. If the follow-up for item 6 replaces that file with a Python launch file, land the follow-up first or recheck the link.
  • #1075 is stacked on 80592ed and carries its own copy of the macro. Rebase it onto this head and change it to include the shared file.
  • The overlap bot flagged .gitignore. Since #23927 tells users to add .nyx_scenes/ to their own workspace, adding it to moveit_pro_empty_ws too means new workspaces get it automatically.

Two small inline notes; neither blocks.

<robot xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Which renderer produces a MuJoCo config's camera color topics. Set it in the environment: the
config's runtime.launch.xml reads MOVEIT_PRO_CAMERA_RENDERER directly to start one Nyx node per
camera, and cannot see urdf_params. An empty value means opengl, and an unrecognized one fails

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]

Nit: "Set it in the environment … cannot see urdf_params" is the right rule for configs that start Nyx nodes. But april_tag_sim and hand_eye_calibration_sim pin camera_renderer in urdf_params deliberately, and someone copying this file will read only this comment. One sentence would settle it: a config that starts no Nyx nodes pins camera_renderer: opengl in urdf_params, so the environment can't disable its cameras' color.

selected. Call it inside <ros2_control>. opengl emits nothing, since MuJoCo's defaults already
publish <camera>/color. -->
<xacro:macro name="camera_renderer_sensors" params="cameras">
<xacro:if value="${len(cameras.split()) > 0}">

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]

Nit: the list is split on whitespace only, so nyx_cameras: "a,b" emits a single <sensor name="a,b"> without any error. Since this is now the shared entry point, either state "space-separated, no commas" in the nyx_cameras comment in lab_sim or fail on a comma. Also worth knowing: an empty nyx_cameras:= falls back to the arg default rather than emitting nothing, so a config can't use it to opt all cameras out. Probably fine; the pin covers that.

@nbbrooks nbbrooks added this to the 10.2.0 milestone Oct 21, 2026
@nbbrooks
nbbrooks changed the base branch from main to v10.2 October 21, 2026 18:08
@nbbrooks
nbbrooks dismissed picknik-baymax-bot[bot]’s stale review October 21, 2026 18:08

The base branch was changed.

@nbbrooks
nbbrooks changed the base branch from v10.2 to main October 21, 2026 18:08
danwahl and others added 5 commits October 21, 2026 18:12
MOVEIT_PRO_CAMERA_RENDERER picks opengl (the default), nyx, or both. The robot description places scene_camera's MuJoCo topics from it, and runtime.launch.xml reads the same variable to decide whether to start picknik_nyx_renderer and where it publishes, so the two halves cannot disagree.

nyx: the camera's <sensor> block sets color_enabled=false, so MuJoCo publishes only depth and points and the Nyx node publishes scene_camera/color and camera_info.

both: MuJoCo's color and camera_info move to scene_camera/opengl/ and Nyx publishes on scene_camera/nyx/, leaving scene_camera/color empty so no consumer reads one renderer while expecting the other. Depth and points stay where they are.

An unrecognized value fails the description rather than leaving the config with no camera.

Needs the Nyx renderer package and the color_enabled param, which are not in a released image yet, so anything other than the default requires a moveit_pro build that carries them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YCk2yNsEQkVUSvhAmsJ4m
MOVEIT_PRO_CAMERA_RENDERER covered scene_camera only, so wrist_camera
stayed on MuJoCo in every mode. The nyx and both overrides now name both
cameras, and runtime.launch.xml starts a Nyx node for each, since the
node renders one camera per instance.

The renderer comment drops to one line, since Pro documents the values,
and the launch file binds the two expressions once rather than repeating
them per camera.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Both configs use lab_sim's robot description but ship their own runtime
launch file with no Nyx nodes, so MOVEIT_PRO_CAMERA_RENDERER disabled
MuJoCo's color for their cameras with nothing to replace it. Pinning
camera_renderer in urdf_params overrides the environment default and
keeps them on MuJoCo. hand_eye_calibration_sim is the one that mattered:
its scene has no scene_camera, so the setting was inert there until
wrist_camera joined it, and wrist_camera is the camera it calibrates.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
An empty MOVEIT_PRO_CAMERA_RENDERER failed the robot description.
moveit_pro's validator accepts an empty value and docker-compose forwards
it as-is, so a bare assignment in the workspace .env took the description
down. The value is now bound to a property and read as data, with an
empty value treated as opengl, which also keeps a quote in the value from
closing the string literal and being evaluated instead of compared.

The lab_sim and april_tag_sim integration tests pin the renderer to
opengl so colcon test does not depend on a developer's exported value,
and .nyx_scenes/ is ignored, where nyx_export_scene writes hundreds of
megabytes inside $USER_WS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
MOVEIT_PRO_CAMERA_RENDERER applies to every MuJoCo config, so the arg,
the validation and the per-camera <sensor> blocks move into
picknik_accessories, which the configs already depend on, and lab_sim
includes them and passes its camera list. A config with other cameras
sets nyx_cameras in urdf_params or calls the macro with its own list.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@picknik-baymax-bot
picknik-baymax-bot Bot changed the base branch from main to v10.2 October 21, 2026 18:13
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

@nbbrooks nbbrooks 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.

lgtm, will file followup items for nit feedback

@nbbrooks
nbbrooks enabled auto-merge (squash) October 21, 2026 19:28
@nbbrooks
nbbrooks disabled auto-merge October 21, 2026 19:28
@nbbrooks
nbbrooks merged commit bf0b686 into v10.2 Oct 21, 2026
19 of 20 checks passed
@nbbrooks
nbbrooks deleted the nyx-renderer branch October 21, 2026 19:29
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.

2 participants