agenticros 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +192 -0
- package/README.md +90 -4
- package/dist/commands/config.d.ts +20 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +179 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +33 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +232 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/down.d.ts +15 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +91 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/init.d.ts +21 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +259 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +18 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +67 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/status.d.ts +12 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +56 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/up.d.ts +20 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +70 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/menu.d.ts +9 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +96 -0
- package/dist/menu.js.map +1 -0
- package/dist/runners/real-robot.d.ts +15 -0
- package/dist/runners/real-robot.d.ts.map +1 -0
- package/dist/runners/real-robot.js +46 -0
- package/dist/runners/real-robot.js.map +1 -0
- package/dist/runners/sim.d.ts +19 -0
- package/dist/runners/sim.d.ts.map +1 -0
- package/dist/runners/sim.js +53 -0
- package/dist/runners/sim.js.map +1 -0
- package/dist/util/env.d.ts +24 -0
- package/dist/util/env.d.ts.map +1 -0
- package/dist/util/env.js +53 -0
- package/dist/util/env.js.map +1 -0
- package/dist/util/logger.d.ts +24 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +62 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/paths.d.ts +57 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +132 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/pidfile.d.ts +16 -0
- package/dist/util/pidfile.d.ts.map +1 -0
- package/dist/util/pidfile.js +63 -0
- package/dist/util/pidfile.js.map +1 -0
- package/dist/util/state.d.ts +26 -0
- package/dist/util/state.d.ts.map +1 -0
- package/dist/util/state.js +55 -0
- package/dist/util/state.js.map +1 -0
- package/package.json +60 -1
- package/runtime/BUNDLE.json +11 -0
- package/runtime/LICENSE +192 -0
- package/runtime/README.md +273 -0
- package/runtime/docs/architecture.md +366 -0
- package/runtime/docs/cli.md +140 -0
- package/runtime/docs/memory.md +292 -0
- package/runtime/docs/robot-setup.md +347 -0
- package/runtime/package.json +28 -0
- package/runtime/packages/agenticros/agenticros-agenticros-0.0.1.tgz +0 -0
- package/runtime/packages/agenticros/openclaw.plugin.json +451 -0
- package/runtime/packages/agenticros/package.json +41 -0
- package/runtime/packages/agenticros/src/camera-snapshot-cache.ts +59 -0
- package/runtime/packages/agenticros/src/camera-snapshot-routes.ts +44 -0
- package/runtime/packages/agenticros/src/commands/estop.ts +41 -0
- package/runtime/packages/agenticros/src/commands/transport.ts +195 -0
- package/runtime/packages/agenticros/src/config-file.ts +136 -0
- package/runtime/packages/agenticros/src/config-page.ts +498 -0
- package/runtime/packages/agenticros/src/context/robot-context.ts +373 -0
- package/runtime/packages/agenticros/src/depth.ts +313 -0
- package/runtime/packages/agenticros/src/describer.ts +157 -0
- package/runtime/packages/agenticros/src/image-binary-trim.ts +16 -0
- package/runtime/packages/agenticros/src/index.ts +85 -0
- package/runtime/packages/agenticros/src/landing-page.ts +38 -0
- package/runtime/packages/agenticros/src/memory.ts +44 -0
- package/runtime/packages/agenticros/src/plugin-api.ts +173 -0
- package/runtime/packages/agenticros/src/plugin-image-base64.ts +69 -0
- package/runtime/packages/agenticros/src/preflight.ts +110 -0
- package/runtime/packages/agenticros/src/routes.ts +328 -0
- package/runtime/packages/agenticros/src/safety/validator.ts +43 -0
- package/runtime/packages/agenticros/src/service.ts +359 -0
- package/runtime/packages/agenticros/src/skill-api.ts +65 -0
- package/runtime/packages/agenticros/src/skill-loader.ts +146 -0
- package/runtime/packages/agenticros/src/teleop/page.ts +498 -0
- package/runtime/packages/agenticros/src/teleop/routes.ts +650 -0
- package/runtime/packages/agenticros/src/tools/index.ts +26 -0
- package/runtime/packages/agenticros/src/tools/ros2-action.ts +50 -0
- package/runtime/packages/agenticros/src/tools/ros2-camera.ts +221 -0
- package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +58 -0
- package/runtime/packages/agenticros/src/tools/ros2-introspect.ts +62 -0
- package/runtime/packages/agenticros/src/tools/ros2-memory.ts +158 -0
- package/runtime/packages/agenticros/src/tools/ros2-param.ts +87 -0
- package/runtime/packages/agenticros/src/tools/ros2-publish.ts +52 -0
- package/runtime/packages/agenticros/src/tools/ros2-service.ts +46 -0
- package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +71 -0
- package/runtime/packages/agenticros/tsconfig.json +9 -0
- package/runtime/packages/agenticros-claude-code/README.md +260 -0
- package/runtime/packages/agenticros-claude-code/config.example.json +9 -0
- package/runtime/packages/agenticros-claude-code/dist/config.d.ts +8 -0
- package/runtime/packages/agenticros-claude-code/dist/config.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/config.js +93 -0
- package/runtime/packages/agenticros-claude-code/dist/config.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/depth.d.ts +20 -0
- package/runtime/packages/agenticros-claude-code/dist/depth.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/depth.js +126 -0
- package/runtime/packages/agenticros-claude-code/dist/depth.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts +6 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js +36 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +33 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +134 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts +43 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js +73 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts +58 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js +251 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +61 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +268 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/index.d.ts +3 -0
- package/runtime/packages/agenticros-claude-code/dist/index.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/index.js +111 -0
- package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/memory.d.ts +17 -0
- package/runtime/packages/agenticros-claude-code/dist/memory.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/memory.js +44 -0
- package/runtime/packages/agenticros-claude-code/dist/memory.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/safety.d.ts +10 -0
- package/runtime/packages/agenticros-claude-code/dist/safety.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/safety.js +34 -0
- package/runtime/packages/agenticros-claude-code/dist/safety.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +36 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.js +777 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +17 -0
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/transport.js +46 -0
- package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts +42 -0
- package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js +114 -0
- package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/package.json +29 -0
- package/runtime/packages/agenticros-claude-code/src/config.ts +96 -0
- package/runtime/packages/agenticros-claude-code/src/depth.ts +173 -0
- package/runtime/packages/agenticros-claude-code/src/find-object/coco-classes.ts +38 -0
- package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +190 -0
- package/runtime/packages/agenticros-claude-code/src/follow-me/controller.ts +109 -0
- package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +420 -0
- package/runtime/packages/agenticros-claude-code/src/follow-me/detector.ts +303 -0
- package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +330 -0
- package/runtime/packages/agenticros-claude-code/src/index.ts +125 -0
- package/runtime/packages/agenticros-claude-code/src/memory.ts +51 -0
- package/runtime/packages/agenticros-claude-code/src/safety.ts +44 -0
- package/runtime/packages/agenticros-claude-code/src/tools.ts +891 -0
- package/runtime/packages/agenticros-claude-code/src/transport.ts +58 -0
- package/runtime/packages/agenticros-claude-code/src/zero-shot/detector.ts +169 -0
- package/runtime/packages/agenticros-claude-code/tsconfig.json +9 -0
- package/runtime/packages/agenticros-claude-code/yolo-debug.mjs +106 -0
- package/runtime/packages/agenticros-gemini/README.md +139 -0
- package/runtime/packages/agenticros-gemini/package.json +28 -0
- package/runtime/packages/agenticros-gemini/scripts/smoke-api.mjs +42 -0
- package/runtime/packages/agenticros-gemini/src/chat.ts +139 -0
- package/runtime/packages/agenticros-gemini/src/config.ts +92 -0
- package/runtime/packages/agenticros-gemini/src/depth.ts +173 -0
- package/runtime/packages/agenticros-gemini/src/index.ts +58 -0
- package/runtime/packages/agenticros-gemini/src/memory.ts +32 -0
- package/runtime/packages/agenticros-gemini/src/safety.ts +44 -0
- package/runtime/packages/agenticros-gemini/src/tools.ts +516 -0
- package/runtime/packages/agenticros-gemini/src/transport.ts +58 -0
- package/runtime/packages/agenticros-gemini/tsconfig.json +8 -0
- package/runtime/packages/core/package.json +47 -0
- package/runtime/packages/core/src/banner.ts +32 -0
- package/runtime/packages/core/src/cmd-vel-twist.ts +31 -0
- package/runtime/packages/core/src/config.ts +279 -0
- package/runtime/packages/core/src/index.ts +54 -0
- package/runtime/packages/core/src/memory/__tests__/factory.test.ts +70 -0
- package/runtime/packages/core/src/memory/__tests__/local-provider.test.ts +195 -0
- package/runtime/packages/core/src/memory/__tests__/mem0-provider.test.ts +192 -0
- package/runtime/packages/core/src/memory/__tests__/smart-defaults.test.ts +46 -0
- package/runtime/packages/core/src/memory/factory.ts +63 -0
- package/runtime/packages/core/src/memory/index.ts +10 -0
- package/runtime/packages/core/src/memory/local/provider.ts +229 -0
- package/runtime/packages/core/src/memory/mem0/provider.ts +379 -0
- package/runtime/packages/core/src/memory/types.ts +96 -0
- package/runtime/packages/core/src/topic-utils.ts +95 -0
- package/runtime/packages/core/src/transport/factory.ts +47 -0
- package/runtime/packages/core/src/transport/local/conversion.ts +333 -0
- package/runtime/packages/core/src/transport/local/entities.ts +129 -0
- package/runtime/packages/core/src/transport/local/transport.ts +406 -0
- package/runtime/packages/core/src/transport/rosbridge/actions.ts +81 -0
- package/runtime/packages/core/src/transport/rosbridge/adapter.ts +157 -0
- package/runtime/packages/core/src/transport/rosbridge/client.ts +438 -0
- package/runtime/packages/core/src/transport/rosbridge/services.ts +41 -0
- package/runtime/packages/core/src/transport/rosbridge/topics.ts +60 -0
- package/runtime/packages/core/src/transport/rosbridge/types.ts +118 -0
- package/runtime/packages/core/src/transport/transport.ts +77 -0
- package/runtime/packages/core/src/transport/types.ts +137 -0
- package/runtime/packages/core/src/transport/webrtc/signaling-client.ts +196 -0
- package/runtime/packages/core/src/transport/webrtc/signaling-types.ts +130 -0
- package/runtime/packages/core/src/transport/webrtc/transport.ts +516 -0
- package/runtime/packages/core/src/transport/zenoh/adapter.ts +357 -0
- package/runtime/packages/core/src/transport/zenoh/cdr.ts +183 -0
- package/runtime/packages/core/src/transport/zenoh/keys.ts +51 -0
- package/runtime/packages/core/tsconfig.json +9 -0
- package/runtime/packages/ros-camera/package.json +30 -0
- package/runtime/packages/ros-camera/src/index.ts +13 -0
- package/runtime/packages/ros-camera/src/snapshot.ts +372 -0
- package/runtime/packages/ros-camera/tsconfig.json +9 -0
- package/runtime/pnpm-lock.yaml +5260 -0
- package/runtime/pnpm-workspace.yaml +2 -0
- package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/__init__.py +0 -0
- package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/agent_node.py +561 -0
- package/runtime/ros2_ws/src/agenticros_agent/package.xml +25 -0
- package/runtime/ros2_ws/src/agenticros_agent/resource/agenticros_agent +0 -0
- package/runtime/ros2_ws/src/agenticros_agent/setup.cfg +4 -0
- package/runtime/ros2_ws/src/agenticros_agent/setup.py +25 -0
- package/runtime/ros2_ws/src/agenticros_bringup/README.md +128 -0
- package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/__init__.py +1 -0
- package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/cmd_vel_relay.py +33 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/cmd_vel_bridge.launch.py +58 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/gazebo_turtlebot3.launch.py +69 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo.launch.py +55 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo_rviz.launch.py +48 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/realsense_rosbridge.launch.py +154 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/rosbridge_gazebo.launch.py +54 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/rviz.launch.py +38 -0
- package/runtime/ros2_ws/src/agenticros_bringup/launch/turtlebot3_gazebo_rviz.launch.py +42 -0
- package/runtime/ros2_ws/src/agenticros_bringup/package.xml +24 -0
- package/runtime/ros2_ws/src/agenticros_bringup/resource/agenticros_bringup +0 -0
- package/runtime/ros2_ws/src/agenticros_bringup/rviz/turtlebot3_agenticros.rviz +174 -0
- package/runtime/ros2_ws/src/agenticros_bringup/setup.cfg +4 -0
- package/runtime/ros2_ws/src/agenticros_bringup/setup.py +28 -0
- package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/__init__.py +0 -0
- package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +172 -0
- package/runtime/ros2_ws/src/agenticros_discovery/package.xml +22 -0
- package/runtime/ros2_ws/src/agenticros_discovery/resource/agenticros_discovery +0 -0
- package/runtime/ros2_ws/src/agenticros_discovery/setup.cfg +5 -0
- package/runtime/ros2_ws/src/agenticros_discovery/setup.py +25 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/README.md +66 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__init__.py +1 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__main__.py +5 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follow_me_node.py +278 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follower_controller.py +631 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/person_tracker.py +635 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/package.xml +22 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/resource/agenticros_follow_me +0 -0
- package/runtime/ros2_ws/src/agenticros_follow_me/setup.py +25 -0
- package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +26 -0
- package/runtime/ros2_ws/src/agenticros_msgs/msg/CapabilityManifest.msg +9 -0
- package/runtime/ros2_ws/src/agenticros_msgs/package.xml +22 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeGetStatus.srv +11 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetDistance.srv +4 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetTarget.srv +6 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStart.srv +5 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStop.srv +3 -0
- package/runtime/ros2_ws/src/agenticros_msgs/srv/GetCapabilities.srv +5 -0
- package/runtime/ros2_ws/src/agenticros_sim/CMakeLists.txt +24 -0
- package/runtime/ros2_ws/src/agenticros_sim/README.md +120 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/agenticros-sim.config.json +28 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/amr_bridge.yaml +111 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/amr_view.rviz +172 -0
- package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.dsv.in +3 -0
- package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.sh.in +7 -0
- package/runtime/ros2_ws/src/agenticros_sim/launch/sim_amr.launch.py +159 -0
- package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.config +17 -0
- package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.sdf +244 -0
- package/runtime/ros2_ws/src/agenticros_sim/package.xml +27 -0
- package/runtime/ros2_ws/src/agenticros_sim/worlds/agenticros_indoor.sdf +183 -0
- package/runtime/scripts/activate_workspace.sh +285 -0
- package/runtime/scripts/agenticros-describer.policy.yaml +96 -0
- package/runtime/scripts/agenticros-proxy.cjs +99 -0
- package/runtime/scripts/agenticros-rosbridge.policy.yaml +62 -0
- package/runtime/scripts/check-cli-tarball-size.mjs +42 -0
- package/runtime/scripts/configure_agenticros.sh +200 -0
- package/runtime/scripts/configure_for_sim.sh +64 -0
- package/runtime/scripts/fix-openclaw-control-ui-path.sh +20 -0
- package/runtime/scripts/install_cli.sh +94 -0
- package/runtime/scripts/install_rosbridge_from_source.sh +67 -0
- package/runtime/scripts/lib/agenticros-banner.sh +28 -0
- package/runtime/scripts/onboard_robot.sh +75 -0
- package/runtime/scripts/openai.policy.yaml +77 -0
- package/runtime/scripts/openclaw-dashboard-url.cjs +49 -0
- package/runtime/scripts/pack-runtime.mjs +245 -0
- package/runtime/scripts/run_demo_native.sh +43 -0
- package/runtime/scripts/run_nemoclaw_host_stack.sh +91 -0
- package/runtime/scripts/run_robot_rosbridge.sh +36 -0
- package/runtime/scripts/sandbox_rosbridge_relay.py +137 -0
- package/runtime/scripts/setup-openclaw-local.cjs +75 -0
- package/runtime/scripts/setup_gateway_plugin.sh +329 -0
- package/runtime/scripts/setup_robot.sh +113 -0
- package/runtime/scripts/setup_workspace.sh +484 -0
- package/runtime/scripts/sim/run_sim.sh +146 -0
- package/runtime/scripts/smoke_test_nemoclaw.sh +123 -0
- package/runtime/scripts/start_demo.sh +55 -0
- package/runtime/scripts/sync-skill-tools.mjs +335 -0
- package/runtime/scripts/test-follow-me-sim.mjs +135 -0
- package/runtime/scripts/test-mcp-e2e.mjs +184 -0
- package/runtime/scripts/test-rclnodejs.mts +129 -0
- package/runtime/scripts/use-openclaw-2026.2.26.sh +19 -0
- package/runtime/scripts/use-openclaw-2026.3.11.sh +19 -0
- package/runtime/scripts/zenoh-bridge-ros2dds-robot.json5 +30 -0
- package/runtime/scripts/zenohd-agenticros.json5 +11 -0
- package/runtime/scripts/zenohd-rosclaw.json5 +11 -0
- package/runtime/tsconfig.base.json +19 -0
- package/index.js +0 -6
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# agenticros_bringup
|
|
2
|
+
|
|
3
|
+
Launch files and an RViz2 config for **TurtleBot3 in Gazebo** aligned with AgenticROS examples (`/cmd_vel`, `/scan`, rosbridge on port **9090**).
|
|
4
|
+
|
|
5
|
+
**`package 'agenticros_bringup' not found`:** you must build the workspace and **source the overlay** (not only `/opt/ros/jazzy`):
|
|
6
|
+
|
|
7
|
+
`cd …/agenticros/ros2_ws && source /opt/ros/jazzy/setup.bash && source install/setup.bash`
|
|
8
|
+
|
|
9
|
+
## Prerequisites (required for `*_gazebo*` launches)
|
|
10
|
+
|
|
11
|
+
`agenticros_bringup` does **not** vendor TurtleBot3 or Gazebo. Install them from ROS 2 (Ubuntu, **Jazzy** example):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
sudo apt update
|
|
15
|
+
sudo apt install ros-jazzy-turtlebot3-gazebo ros-jazzy-rviz2 ros-jazzy-rosbridge-suite
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Gazebo is pulled in as a dependency of **`ros-jazzy-turtlebot3-gazebo`**. If `apt` cannot find that package, run `apt search turtlebot3-gazebo` for your distro’s exact name.
|
|
19
|
+
|
|
20
|
+
Check before launching:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
source /opt/ros/jazzy/setup.bash
|
|
24
|
+
ros2 pkg prefix turtlebot3_gazebo
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If that prints a path under `/opt/ros/jazzy`, launches that use `FindPackageShare('turtlebot3_gazebo')` will work.
|
|
28
|
+
|
|
29
|
+
**Error: `package 'turtlebot3_gazebo' not found`** — the stack above is not installed (or you only sourced `install/setup.bash` without `/opt/ros/jazzy/setup.bash`). Always source **both**, in order: `source /opt/ros/jazzy/setup.bash` then `source …/ros2_ws/install/setup.bash`.
|
|
30
|
+
|
|
31
|
+
On **ARM boards** (e.g. Radxa), the binary packages must exist for your Ubuntu + ROS repo; if `apt install` has no candidate, build [turtlebot3_simulations](https://github.com/ROBOTIS-GIT/turtlebot3_simulations) from source into your workspace or use the repo’s **Docker** sim image on an `amd64` host.
|
|
32
|
+
|
|
33
|
+
## Namespaced `cmd_vel` (AgenticROS `robot.namespace`)
|
|
34
|
+
|
|
35
|
+
Real robots often use **`/<namespace>/cmd_vel`** (e.g. `/robot3946b404c33e4aa39a8d16deb1c5c593/cmd_vel`). Stock TurtleBot3 Gazebo subscribes to **`/cmd_vel`**. To use the **same** AgenticROS namespace in sim without editing SDF plugins, pass **`robot_namespace`** (the namespace string **without** slashes—same as the plugin’s `robot.namespace` value):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
ros2 launch agenticros_bringup mode_a_gazebo.launch.py \
|
|
39
|
+
robot_namespace:=robot3946b404c33e4aa39a8d16deb1c5c593
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
That starts the package’s built-in **`cmd_vel_relay`** node, republishing `/<namespace>/cmd_vel` → `/cmd_vel` (no `topic_tools` install). It applies to **`gazebo_turtlebot3`**, **`mode_a_*`**, **`turtlebot3_gazebo_rviz`**, and **`rosbridge_gazebo`** launches.
|
|
43
|
+
|
|
44
|
+
If Gazebo is **already running** in another terminal, start **only** the relay (this does **not** open Gazebo or RViz):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
ros2 launch agenticros_bringup cmd_vel_bridge.launch.py \
|
|
48
|
+
src_cmd_vel:=/robot3946b404c33e4aa39a8d16deb1c5c593/cmd_vel
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
To open **Gazebo** (and optionally **RViz**), use **`mode_a_gazebo.launch.py`**, **`turtlebot3_gazebo_rviz.launch.py`**, or **`rosbridge_gazebo.launch.py`**—not `cmd_vel_bridge.launch.py`.
|
|
52
|
+
|
|
53
|
+
**RViz:** the bundled config still uses **`/scan`**, **`odom`**, and **`/robot_description`** because TurtleBot3 Gazebo publishes those at the root. If your **physical** robot also namespaces laser or TF, update the RViz displays (LaserScan topic, fixed frame) or add extra relays—only **`cmd_vel`** is bridged by default.
|
|
54
|
+
|
|
55
|
+
### Teleop / real base moves, but Gazebo (and RViz on the sim) does not
|
|
56
|
+
|
|
57
|
+
AgenticROS teleop and many stacks publish **`/<namespace>/cmd_vel`** (e.g. `/robot3946…/cmd_vel`). The **real** controller subscribes there, so the hardware moves. Stock **TurtleBot3 Gazebo** subscribes to **`/cmd_vel`** only, so the sim never sees those twists until you **relay** or launch with **`robot_namespace:=...`** so `cmd_vel_relay` is running.
|
|
58
|
+
|
|
59
|
+
1. Start Gazebo **first** (with or without `robot_namespace`—if without, you must run the bridge below).
|
|
60
|
+
2. In **another terminal** (same machine, same `ROS_DOMAIN_ID`, both workspaces sourced):
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
ros2 launch agenticros_bringup cmd_vel_bridge.launch.py \
|
|
64
|
+
src_cmd_vel:=/robot3946b404c33e4aa39a8d16deb1c5c593/cmd_vel
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Or one launch that includes sim + relay:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
ros2 launch agenticros_bringup mode_a_gazebo_rviz.launch.py \
|
|
71
|
+
robot_namespace:=robot3946b404c33e4aa39a8d16deb1c5c593
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
3. **Check** that something publishes `/cmd_vel` and Gazebo is a subscriber:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
ros2 topic info /cmd_vel -v
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
While driving teleop, **`ros2 topic echo /cmd_vel`** should show `Twist` messages; if not, the relay source topic does not match where teleop publishes (run `ros2 topic list | grep cmd_vel`).
|
|
81
|
+
|
|
82
|
+
**RViz** is only showing the **sim** robot pose from Gazebo’s TF/odom. If the sim never receives `cmd_vel`, the model stays put. (To visualize the **physical** robot instead, point RViz at your real stack’s TF/odom topics—not the TurtleBot3 Gazebo defaults.)
|
|
83
|
+
|
|
84
|
+
## Launches
|
|
85
|
+
|
|
86
|
+
| Launch | Purpose |
|
|
87
|
+
|--------|--------|
|
|
88
|
+
| `rosbridge_gazebo.launch.py` | **Rosbridge WebSocket + TurtleBot3 world** — use in Docker or headless hosts. |
|
|
89
|
+
| `gazebo_turtlebot3.launch.py` | Gazebo + TurtleBot3 only (no rosbridge). |
|
|
90
|
+
| `rviz.launch.py` | RViz2 with `turtlebot3_agenticros.rviz` (`odom`, `/scan`, `/robot_description`). |
|
|
91
|
+
| `turtlebot3_gazebo_rviz.launch.py` | Gazebo + RViz on one machine (needs a display). |
|
|
92
|
+
| `mode_a_gazebo.launch.py` | **Mode A:** Gazebo + TurtleBot3 only; sets **`ROS_DOMAIN_ID`** (default `0`). Use with AgenticROS **local** transport—no rosbridge. |
|
|
93
|
+
| `mode_a_gazebo_rviz.launch.py` | **Mode A:** Gazebo + RViz + same domain ID setup. |
|
|
94
|
+
| `cmd_vel_bridge.launch.py` | Relay only: namespaced **`src_cmd_vel`** → **`dst_cmd_vel`** (default `/cmd_vel`). |
|
|
95
|
+
|
|
96
|
+
### Examples
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
source /opt/ros/jazzy/setup.bash
|
|
100
|
+
source install/setup.bash
|
|
101
|
+
|
|
102
|
+
# Mode A (local DDS): Gazebo sim on the same machine as OpenClaw + LocalTransport
|
|
103
|
+
ros2 launch agenticros_bringup mode_a_gazebo.launch.py
|
|
104
|
+
# Same + AgenticROS robot.namespace (cmd_vel relay to Gazebo):
|
|
105
|
+
# ros2 launch agenticros_bringup mode_a_gazebo.launch.py robot_namespace:=robot3946b404c33e4aa39a8d16deb1c5c593
|
|
106
|
+
# Optional: ros_domain_id:=1 — must match plugin local.domainId
|
|
107
|
+
|
|
108
|
+
# Mode A + RViz
|
|
109
|
+
ros2 launch agenticros_bringup mode_a_gazebo_rviz.launch.py
|
|
110
|
+
# …robot_namespace:=... as above if needed
|
|
111
|
+
|
|
112
|
+
# Simulation + rosbridge (Mode B–style; plugin uses ws://localhost:9090)
|
|
113
|
+
ros2 launch agenticros_bringup rosbridge_gazebo.launch.py
|
|
114
|
+
|
|
115
|
+
# Gazebo + RViz without forcing ROS_DOMAIN_ID via launch (set export ROS_DOMAIN_ID yourself)
|
|
116
|
+
ros2 launch agenticros_bringup turtlebot3_gazebo_rviz.launch.py
|
|
117
|
+
|
|
118
|
+
# RViz alone while sim is already running
|
|
119
|
+
ros2 launch agenticros_bringup rviz.launch.py use_sim_time:=true
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Parameters
|
|
123
|
+
|
|
124
|
+
- **`turtlebot3_model`** — `burger` (default), `waffle`, or `waffle_pi`
|
|
125
|
+
- **`rviz_config`** — path to a different `.rviz` file
|
|
126
|
+
- **`use_sim_time`** — set `true` with Gazebo
|
|
127
|
+
|
|
128
|
+
See the repository **README** for Docker and OpenClaw plugin settings.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# AgenticROS bringup package
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Subscribe Twist on input_topic and republish on output_topic (no topic_tools dep)."""
|
|
3
|
+
|
|
4
|
+
import rclpy
|
|
5
|
+
from geometry_msgs.msg import Twist
|
|
6
|
+
from rclpy.node import Node
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CmdVelRelay(Node):
|
|
10
|
+
def __init__(self) -> None:
|
|
11
|
+
super().__init__("agenticros_cmd_vel_relay")
|
|
12
|
+
self.declare_parameter("input_topic", "/cmd_vel_in")
|
|
13
|
+
self.declare_parameter("output_topic", "/cmd_vel")
|
|
14
|
+
in_topic = self.get_parameter("input_topic").get_parameter_value().string_value
|
|
15
|
+
out_topic = self.get_parameter("output_topic").get_parameter_value().string_value
|
|
16
|
+
self._pub = self.create_publisher(Twist, out_topic, 10)
|
|
17
|
+
self.create_subscription(Twist, in_topic, self._on_twist, 10)
|
|
18
|
+
self.get_logger().info("Relay %s -> %s" % (in_topic, out_topic))
|
|
19
|
+
|
|
20
|
+
def _on_twist(self, msg: Twist) -> None:
|
|
21
|
+
self._pub.publish(msg)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def main() -> None:
|
|
25
|
+
rclpy.init()
|
|
26
|
+
try:
|
|
27
|
+
rclpy.spin(CmdVelRelay())
|
|
28
|
+
finally:
|
|
29
|
+
rclpy.shutdown()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
main()
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Relay namespaced cmd_vel to the topic TurtleBot3 Gazebo uses (/cmd_vel).
|
|
2
|
+
|
|
3
|
+
Uses the **agenticros_bringup** `cmd_vel_relay` node (rclpy only—no topic_tools).
|
|
4
|
+
|
|
5
|
+
This launch does **not** start Gazebo or RViz—only the relay. Start simulation (and optional
|
|
6
|
+
RViz) in **another terminal** first, e.g.::
|
|
7
|
+
|
|
8
|
+
ros2 launch agenticros_bringup mode_a_gazebo_rviz.launch.py robot_namespace:=YOUR_NS
|
|
9
|
+
|
|
10
|
+
Or use a single launch that includes sim + relay::
|
|
11
|
+
|
|
12
|
+
ros2 launch agenticros_bringup mode_a_gazebo.launch.py robot_namespace:=YOUR_NS
|
|
13
|
+
|
|
14
|
+
Example (relay only, sim already running)::
|
|
15
|
+
|
|
16
|
+
ros2 launch agenticros_bringup cmd_vel_bridge.launch.py \\
|
|
17
|
+
src_cmd_vel:=/robot3946b404c33e4aa39a8d16deb1c5c593/cmd_vel
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from launch import LaunchDescription
|
|
21
|
+
from launch.actions import DeclareLaunchArgument, LogInfo
|
|
22
|
+
from launch.substitutions import LaunchConfiguration
|
|
23
|
+
from launch_ros.actions import Node
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def generate_launch_description():
|
|
27
|
+
return LaunchDescription(
|
|
28
|
+
[
|
|
29
|
+
LogInfo(
|
|
30
|
+
msg=(
|
|
31
|
+
"cmd_vel_bridge: starting relay only (no Gazebo/RViz). "
|
|
32
|
+
"Use mode_a_gazebo.launch.py, turtlebot3_gazebo_rviz.launch.py, "
|
|
33
|
+
"or run this after sim is up in another terminal."
|
|
34
|
+
)
|
|
35
|
+
),
|
|
36
|
+
DeclareLaunchArgument(
|
|
37
|
+
"src_cmd_vel",
|
|
38
|
+
description="Incoming topic (from AgenticROS), e.g. /robot.../cmd_vel",
|
|
39
|
+
),
|
|
40
|
+
DeclareLaunchArgument(
|
|
41
|
+
"dst_cmd_vel",
|
|
42
|
+
default_value="/cmd_vel",
|
|
43
|
+
description="Topic the simulator / base listens on (TurtleBot3 Gazebo: /cmd_vel)",
|
|
44
|
+
),
|
|
45
|
+
Node(
|
|
46
|
+
package="agenticros_bringup",
|
|
47
|
+
executable="cmd_vel_relay",
|
|
48
|
+
name="agenticros_cmd_vel_bridge",
|
|
49
|
+
output="screen",
|
|
50
|
+
parameters=[
|
|
51
|
+
{
|
|
52
|
+
"input_topic": LaunchConfiguration("src_cmd_vel"),
|
|
53
|
+
"output_topic": LaunchConfiguration("dst_cmd_vel"),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
),
|
|
57
|
+
]
|
|
58
|
+
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""TurtleBot3 in Gazebo (TurtleBot3 world). Matches AgenticROS turtlebot examples: /cmd_vel, /scan.
|
|
2
|
+
|
|
3
|
+
Optional **robot_namespace**: when set to the same value as AgenticROS **robot.namespace** (no
|
|
4
|
+
leading slash), launches a **topic_tools relay** from `/<namespace>/cmd_vel` to `/cmd_vel` so
|
|
5
|
+
the diff_drive plugin (which listens on `/cmd_vel`) receives commands from the plugin.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from launch import LaunchDescription
|
|
9
|
+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction, SetEnvironmentVariable
|
|
10
|
+
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
|
11
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
12
|
+
from launch_ros.actions import Node
|
|
13
|
+
from launch_ros.substitutions import FindPackageShare
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _launch_setup(context, *args, **kwargs):
|
|
17
|
+
model = LaunchConfiguration("turtlebot3_model").perform(context)
|
|
18
|
+
ns = LaunchConfiguration("robot_namespace").perform(context).strip()
|
|
19
|
+
|
|
20
|
+
inc = IncludeLaunchDescription(
|
|
21
|
+
PythonLaunchDescriptionSource(
|
|
22
|
+
PathJoinSubstitution(
|
|
23
|
+
[
|
|
24
|
+
FindPackageShare("turtlebot3_gazebo"),
|
|
25
|
+
"launch",
|
|
26
|
+
"turtlebot3_world.launch.py",
|
|
27
|
+
]
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
actions: list = [
|
|
32
|
+
SetEnvironmentVariable(name="TURTLEBOT3_MODEL", value=model),
|
|
33
|
+
inc,
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
if ns:
|
|
37
|
+
ns_clean = ns.strip("/")
|
|
38
|
+
in_topic = f"/{ns_clean}/cmd_vel"
|
|
39
|
+
actions.append(
|
|
40
|
+
Node(
|
|
41
|
+
package="agenticros_bringup",
|
|
42
|
+
executable="cmd_vel_relay",
|
|
43
|
+
name="agenticros_cmd_vel_to_gazebo",
|
|
44
|
+
output="screen",
|
|
45
|
+
parameters=[
|
|
46
|
+
{"input_topic": in_topic, "output_topic": "/cmd_vel"},
|
|
47
|
+
],
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
return actions
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def generate_launch_description():
|
|
55
|
+
return LaunchDescription(
|
|
56
|
+
[
|
|
57
|
+
DeclareLaunchArgument(
|
|
58
|
+
"turtlebot3_model",
|
|
59
|
+
default_value="burger",
|
|
60
|
+
description="TurtleBot3 model: burger | waffle | waffle_pi",
|
|
61
|
+
),
|
|
62
|
+
DeclareLaunchArgument(
|
|
63
|
+
"robot_namespace",
|
|
64
|
+
default_value="",
|
|
65
|
+
description="Same as AgenticROS robot.namespace (no slashes). When non-empty, relays /<namespace>/cmd_vel -> /cmd_vel for Gazebo (built-in cmd_vel_relay node).",
|
|
66
|
+
),
|
|
67
|
+
OpaqueFunction(function=_launch_setup),
|
|
68
|
+
]
|
|
69
|
+
)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Gazebo + TurtleBot3 for **Mode A (local DDS)**.
|
|
3
|
+
|
|
4
|
+
Runs the standard TurtleBot3 world so topics (`/cmd_vel`, `/scan`, etc.) are on the
|
|
5
|
+
local ROS 2 domain. Use with AgenticROS **transport: local** and the same
|
|
6
|
+
**ROS_DOMAIN_ID** as set here (default `0`). No rosbridge required if OpenClaw runs
|
|
7
|
+
on this machine with LocalTransport.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from launch import LaunchDescription
|
|
11
|
+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, SetEnvironmentVariable
|
|
12
|
+
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
|
13
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
14
|
+
from launch_ros.substitutions import FindPackageShare
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def generate_launch_description():
|
|
18
|
+
return LaunchDescription(
|
|
19
|
+
[
|
|
20
|
+
DeclareLaunchArgument(
|
|
21
|
+
"ros_domain_id",
|
|
22
|
+
default_value="0",
|
|
23
|
+
description="ROS_DOMAIN_ID; must match AgenticROS local transport domainId",
|
|
24
|
+
),
|
|
25
|
+
SetEnvironmentVariable(
|
|
26
|
+
name="ROS_DOMAIN_ID",
|
|
27
|
+
value=LaunchConfiguration("ros_domain_id"),
|
|
28
|
+
),
|
|
29
|
+
DeclareLaunchArgument(
|
|
30
|
+
"robot_namespace",
|
|
31
|
+
default_value="",
|
|
32
|
+
description="Same as AgenticROS robot.namespace; relays /<ns>/cmd_vel -> /cmd_vel",
|
|
33
|
+
),
|
|
34
|
+
DeclareLaunchArgument(
|
|
35
|
+
"turtlebot3_model",
|
|
36
|
+
default_value="burger",
|
|
37
|
+
description="TurtleBot3 model: burger | waffle | waffle_pi",
|
|
38
|
+
),
|
|
39
|
+
IncludeLaunchDescription(
|
|
40
|
+
PythonLaunchDescriptionSource(
|
|
41
|
+
PathJoinSubstitution(
|
|
42
|
+
[
|
|
43
|
+
FindPackageShare("agenticros_bringup"),
|
|
44
|
+
"launch",
|
|
45
|
+
"gazebo_turtlebot3.launch.py",
|
|
46
|
+
]
|
|
47
|
+
)
|
|
48
|
+
),
|
|
49
|
+
launch_arguments={
|
|
50
|
+
"robot_namespace": LaunchConfiguration("robot_namespace"),
|
|
51
|
+
"turtlebot3_model": LaunchConfiguration("turtlebot3_model"),
|
|
52
|
+
}.items(),
|
|
53
|
+
),
|
|
54
|
+
]
|
|
55
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Gazebo + TurtleBot3 + RViz for **Mode A (local DDS)**.
|
|
3
|
+
|
|
4
|
+
Sets **ROS_DOMAIN_ID** for the whole tree, then starts simulation + RViz with
|
|
5
|
+
**use_sim_time:=true**. Configure AgenticROS with **transport: local** and the same domain.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from launch import LaunchDescription
|
|
9
|
+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, SetEnvironmentVariable
|
|
10
|
+
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
|
11
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
12
|
+
from launch_ros.substitutions import FindPackageShare
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def generate_launch_description():
|
|
16
|
+
bringup = FindPackageShare("agenticros_bringup")
|
|
17
|
+
return LaunchDescription(
|
|
18
|
+
[
|
|
19
|
+
DeclareLaunchArgument(
|
|
20
|
+
"ros_domain_id",
|
|
21
|
+
default_value="0",
|
|
22
|
+
description="ROS_DOMAIN_ID; must match AgenticROS local domainId",
|
|
23
|
+
),
|
|
24
|
+
SetEnvironmentVariable(
|
|
25
|
+
name="ROS_DOMAIN_ID",
|
|
26
|
+
value=LaunchConfiguration("ros_domain_id"),
|
|
27
|
+
),
|
|
28
|
+
DeclareLaunchArgument(
|
|
29
|
+
"robot_namespace",
|
|
30
|
+
default_value="",
|
|
31
|
+
description="Same as AgenticROS robot.namespace; enables cmd_vel relay",
|
|
32
|
+
),
|
|
33
|
+
DeclareLaunchArgument(
|
|
34
|
+
"turtlebot3_model",
|
|
35
|
+
default_value="burger",
|
|
36
|
+
description="TurtleBot3 model: burger | waffle | waffle_pi",
|
|
37
|
+
),
|
|
38
|
+
IncludeLaunchDescription(
|
|
39
|
+
PythonLaunchDescriptionSource(
|
|
40
|
+
PathJoinSubstitution([bringup, "launch", "turtlebot3_gazebo_rviz.launch.py"])
|
|
41
|
+
),
|
|
42
|
+
launch_arguments={
|
|
43
|
+
"robot_namespace": LaunchConfiguration("robot_namespace"),
|
|
44
|
+
"turtlebot3_model": LaunchConfiguration("turtlebot3_model"),
|
|
45
|
+
}.items(),
|
|
46
|
+
),
|
|
47
|
+
]
|
|
48
|
+
)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""RealSense + rosbridge + cmd_vel relay — host-side stack for the NemoClaw hybrid setup.
|
|
2
|
+
|
|
3
|
+
This launch is intended to run **on the host** (or robot) alongside a NemoClaw
|
|
4
|
+
sandbox that hosts the AgenticROS OpenClaw plugin. The plugin connects to
|
|
5
|
+
rosbridge on this host via ``ws://host.docker.internal:9090`` (i.e.
|
|
6
|
+
``ws://172.19.0.1:9090`` from inside the sandbox).
|
|
7
|
+
|
|
8
|
+
Topics published by realsense2_camera (default ``camera_name=camera``)::
|
|
9
|
+
|
|
10
|
+
/camera/camera/color/image_raw sensor_msgs/Image
|
|
11
|
+
/camera/camera/color/image_raw/compressed sensor_msgs/CompressedImage (via image_transport_plugins)
|
|
12
|
+
/camera/camera/depth/image_rect_raw sensor_msgs/Image
|
|
13
|
+
/camera/camera/aligned_depth_to_color/image_raw sensor_msgs/Image
|
|
14
|
+
|
|
15
|
+
cmd_vel relay: the AgenticROS plugin publishes Twist on
|
|
16
|
+
``/<robot_namespace>/cmd_vel``. This launch relays that to ``/cmd_vel`` so a
|
|
17
|
+
robot base controller listening on the unnamespaced topic still gets driven.
|
|
18
|
+
Disable the relay by setting ``relay_cmd_vel:=false``.
|
|
19
|
+
|
|
20
|
+
Example::
|
|
21
|
+
|
|
22
|
+
ros2 launch agenticros_bringup realsense_rosbridge.launch.py \\
|
|
23
|
+
robot_namespace:=3946b404-c33e-4aa3-9a8d-16deb1c5c593 \\
|
|
24
|
+
enable_depth:=true \\
|
|
25
|
+
align_depth:=true
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from launch import LaunchDescription
|
|
29
|
+
from launch.actions import DeclareLaunchArgument, GroupAction, IncludeLaunchDescription, LogInfo
|
|
30
|
+
from launch.conditions import IfCondition
|
|
31
|
+
from launch.launch_description_sources import AnyLaunchDescriptionSource, PythonLaunchDescriptionSource
|
|
32
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution, PythonExpression
|
|
33
|
+
from launch_ros.actions import Node
|
|
34
|
+
from launch_ros.substitutions import FindPackageShare
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def generate_launch_description() -> LaunchDescription:
|
|
38
|
+
realsense = IncludeLaunchDescription(
|
|
39
|
+
PythonLaunchDescriptionSource(
|
|
40
|
+
PathJoinSubstitution(
|
|
41
|
+
[FindPackageShare("realsense2_camera"), "launch", "rs_launch.py"]
|
|
42
|
+
)
|
|
43
|
+
),
|
|
44
|
+
launch_arguments={
|
|
45
|
+
"camera_name": "camera",
|
|
46
|
+
"camera_namespace": "camera",
|
|
47
|
+
"enable_color": LaunchConfiguration("enable_color"),
|
|
48
|
+
"enable_depth": LaunchConfiguration("enable_depth"),
|
|
49
|
+
"align_depth.enable": LaunchConfiguration("align_depth"),
|
|
50
|
+
"rgb_camera.color_profile": LaunchConfiguration("color_profile"),
|
|
51
|
+
"depth_module.depth_profile": LaunchConfiguration("depth_profile"),
|
|
52
|
+
"pointcloud.enable": "false",
|
|
53
|
+
}.items(),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
rosbridge = IncludeLaunchDescription(
|
|
57
|
+
AnyLaunchDescriptionSource(
|
|
58
|
+
PathJoinSubstitution(
|
|
59
|
+
[FindPackageShare("rosbridge_server"), "launch", "rosbridge_websocket_launch.xml"]
|
|
60
|
+
)
|
|
61
|
+
),
|
|
62
|
+
launch_arguments={
|
|
63
|
+
"port": LaunchConfiguration("rosbridge_port"),
|
|
64
|
+
"address": LaunchConfiguration("rosbridge_address"),
|
|
65
|
+
}.items(),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
cmd_vel_relay = GroupAction(
|
|
69
|
+
actions=[
|
|
70
|
+
Node(
|
|
71
|
+
package="agenticros_bringup",
|
|
72
|
+
executable="cmd_vel_relay",
|
|
73
|
+
name="agenticros_cmd_vel_bridge",
|
|
74
|
+
output="screen",
|
|
75
|
+
parameters=[
|
|
76
|
+
{
|
|
77
|
+
"input_topic": PythonExpression(
|
|
78
|
+
[
|
|
79
|
+
"'/' + '",
|
|
80
|
+
LaunchConfiguration("robot_namespace"),
|
|
81
|
+
"'.strip('/') + '/cmd_vel'",
|
|
82
|
+
]
|
|
83
|
+
),
|
|
84
|
+
"output_topic": LaunchConfiguration("dst_cmd_vel"),
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
),
|
|
88
|
+
],
|
|
89
|
+
condition=IfCondition(LaunchConfiguration("relay_cmd_vel")),
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
return LaunchDescription(
|
|
93
|
+
[
|
|
94
|
+
DeclareLaunchArgument(
|
|
95
|
+
"robot_namespace",
|
|
96
|
+
default_value="3946b404-c33e-4aa3-9a8d-16deb1c5c593",
|
|
97
|
+
description="ROS2 namespace AgenticROS publishes cmd_vel under, e.g. 3946b404-...",
|
|
98
|
+
),
|
|
99
|
+
DeclareLaunchArgument(
|
|
100
|
+
"dst_cmd_vel",
|
|
101
|
+
default_value="/cmd_vel",
|
|
102
|
+
description="Topic the robot base listens on; the relay republishes namespaced cmd_vel here.",
|
|
103
|
+
),
|
|
104
|
+
DeclareLaunchArgument(
|
|
105
|
+
"relay_cmd_vel",
|
|
106
|
+
default_value="true",
|
|
107
|
+
description="Relay /<robot_namespace>/cmd_vel -> dst_cmd_vel.",
|
|
108
|
+
),
|
|
109
|
+
DeclareLaunchArgument(
|
|
110
|
+
"rosbridge_port",
|
|
111
|
+
default_value="9090",
|
|
112
|
+
description="rosbridge_websocket port (sandbox connects via host.docker.internal:9090).",
|
|
113
|
+
),
|
|
114
|
+
DeclareLaunchArgument(
|
|
115
|
+
"rosbridge_address",
|
|
116
|
+
default_value="0.0.0.0",
|
|
117
|
+
description="rosbridge_websocket bind address; 0.0.0.0 lets the docker bridge reach it.",
|
|
118
|
+
),
|
|
119
|
+
DeclareLaunchArgument(
|
|
120
|
+
"enable_color",
|
|
121
|
+
default_value="true",
|
|
122
|
+
description="Enable RealSense RGB color stream.",
|
|
123
|
+
),
|
|
124
|
+
DeclareLaunchArgument(
|
|
125
|
+
"enable_depth",
|
|
126
|
+
default_value="true",
|
|
127
|
+
description="Enable RealSense depth stream.",
|
|
128
|
+
),
|
|
129
|
+
DeclareLaunchArgument(
|
|
130
|
+
"align_depth",
|
|
131
|
+
default_value="true",
|
|
132
|
+
description="Publish depth aligned to color (better for ros2_depth_distance center sampling).",
|
|
133
|
+
),
|
|
134
|
+
DeclareLaunchArgument(
|
|
135
|
+
"color_profile",
|
|
136
|
+
default_value="640x480x15",
|
|
137
|
+
description="RealSense color profile WxHxFPS; lower fps reduces rosbridge bandwidth.",
|
|
138
|
+
),
|
|
139
|
+
DeclareLaunchArgument(
|
|
140
|
+
"depth_profile",
|
|
141
|
+
default_value="640x480x15",
|
|
142
|
+
description="RealSense depth profile WxHxFPS.",
|
|
143
|
+
),
|
|
144
|
+
LogInfo(
|
|
145
|
+
msg=(
|
|
146
|
+
"agenticros_bringup: launching RealSense + rosbridge (0.0.0.0:9090) + cmd_vel relay."
|
|
147
|
+
" The NemoClaw sandbox should connect to ws://host.docker.internal:9090."
|
|
148
|
+
)
|
|
149
|
+
),
|
|
150
|
+
realsense,
|
|
151
|
+
rosbridge,
|
|
152
|
+
cmd_vel_relay,
|
|
153
|
+
]
|
|
154
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Rosbridge WebSocket + TurtleBot3 Gazebo world — same topology the AgenticROS Docker image expects (ws://…:9090)."""
|
|
2
|
+
|
|
3
|
+
from launch import LaunchDescription
|
|
4
|
+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
|
|
5
|
+
from launch.launch_description_sources import AnyLaunchDescriptionSource, PythonLaunchDescriptionSource
|
|
6
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
7
|
+
from launch_ros.substitutions import FindPackageShare
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def generate_launch_description():
|
|
11
|
+
rosbridge = IncludeLaunchDescription(
|
|
12
|
+
AnyLaunchDescriptionSource(
|
|
13
|
+
PathJoinSubstitution(
|
|
14
|
+
[
|
|
15
|
+
FindPackageShare("rosbridge_server"),
|
|
16
|
+
"launch",
|
|
17
|
+
"rosbridge_websocket_launch.xml",
|
|
18
|
+
]
|
|
19
|
+
)
|
|
20
|
+
),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
gazebo = IncludeLaunchDescription(
|
|
24
|
+
PythonLaunchDescriptionSource(
|
|
25
|
+
PathJoinSubstitution(
|
|
26
|
+
[
|
|
27
|
+
FindPackageShare("agenticros_bringup"),
|
|
28
|
+
"launch",
|
|
29
|
+
"gazebo_turtlebot3.launch.py",
|
|
30
|
+
]
|
|
31
|
+
)
|
|
32
|
+
),
|
|
33
|
+
launch_arguments={
|
|
34
|
+
"turtlebot3_model": LaunchConfiguration("turtlebot3_model"),
|
|
35
|
+
"robot_namespace": LaunchConfiguration("robot_namespace"),
|
|
36
|
+
}.items(),
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
return LaunchDescription(
|
|
40
|
+
[
|
|
41
|
+
DeclareLaunchArgument(
|
|
42
|
+
"turtlebot3_model",
|
|
43
|
+
default_value="burger",
|
|
44
|
+
description="TurtleBot3 model: burger | waffle | waffle_pi",
|
|
45
|
+
),
|
|
46
|
+
DeclareLaunchArgument(
|
|
47
|
+
"robot_namespace",
|
|
48
|
+
default_value="",
|
|
49
|
+
description="Same as AgenticROS robot.namespace; enables cmd_vel relay to /cmd_vel",
|
|
50
|
+
),
|
|
51
|
+
rosbridge,
|
|
52
|
+
gazebo,
|
|
53
|
+
]
|
|
54
|
+
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""RViz2 with a TurtleBot3-friendly layout: grid, TF, robot model, laser scan (/scan)."""
|
|
2
|
+
|
|
3
|
+
from launch import LaunchDescription
|
|
4
|
+
from launch.actions import DeclareLaunchArgument
|
|
5
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
6
|
+
from launch_ros.actions import Node
|
|
7
|
+
from launch_ros.parameter_descriptions import ParameterValue
|
|
8
|
+
from launch_ros.substitutions import FindPackageShare
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def generate_launch_description():
|
|
12
|
+
pkg = FindPackageShare("agenticros_bringup")
|
|
13
|
+
default_cfg = PathJoinSubstitution([pkg, "rviz", "turtlebot3_agenticros.rviz"])
|
|
14
|
+
|
|
15
|
+
return LaunchDescription(
|
|
16
|
+
[
|
|
17
|
+
DeclareLaunchArgument(
|
|
18
|
+
"rviz_config",
|
|
19
|
+
default_value=default_cfg,
|
|
20
|
+
description="Path to an RViz2 config file",
|
|
21
|
+
),
|
|
22
|
+
DeclareLaunchArgument(
|
|
23
|
+
"use_sim_time",
|
|
24
|
+
default_value="false",
|
|
25
|
+
description="Set true when Gazebo (or other sim) is publishing /clock",
|
|
26
|
+
),
|
|
27
|
+
Node(
|
|
28
|
+
package="rviz2",
|
|
29
|
+
executable="rviz2",
|
|
30
|
+
name="rviz2",
|
|
31
|
+
arguments=["-d", LaunchConfiguration("rviz_config")],
|
|
32
|
+
parameters=[
|
|
33
|
+
{"use_sim_time": ParameterValue(LaunchConfiguration("use_sim_time"), value_type=bool)}
|
|
34
|
+
],
|
|
35
|
+
output="screen",
|
|
36
|
+
),
|
|
37
|
+
]
|
|
38
|
+
)
|