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,42 @@
|
|
|
1
|
+
"""TurtleBot3 Gazebo world + RViz (use_sim_time:=true). For machines with a display."""
|
|
2
|
+
|
|
3
|
+
from launch import LaunchDescription
|
|
4
|
+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
|
|
5
|
+
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
|
6
|
+
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
7
|
+
from launch_ros.substitutions import FindPackageShare
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def generate_launch_description():
|
|
11
|
+
bringup = FindPackageShare("agenticros_bringup")
|
|
12
|
+
gazebo = IncludeLaunchDescription(
|
|
13
|
+
PythonLaunchDescriptionSource(
|
|
14
|
+
PathJoinSubstitution([bringup, "launch", "gazebo_turtlebot3.launch.py"])
|
|
15
|
+
),
|
|
16
|
+
launch_arguments={
|
|
17
|
+
"robot_namespace": LaunchConfiguration("robot_namespace"),
|
|
18
|
+
"turtlebot3_model": LaunchConfiguration("turtlebot3_model"),
|
|
19
|
+
}.items(),
|
|
20
|
+
)
|
|
21
|
+
rviz = IncludeLaunchDescription(
|
|
22
|
+
PythonLaunchDescriptionSource(
|
|
23
|
+
PathJoinSubstitution([bringup, "launch", "rviz.launch.py"])
|
|
24
|
+
),
|
|
25
|
+
launch_arguments={"use_sim_time": "true"}.items(),
|
|
26
|
+
)
|
|
27
|
+
return LaunchDescription(
|
|
28
|
+
[
|
|
29
|
+
DeclareLaunchArgument(
|
|
30
|
+
"turtlebot3_model",
|
|
31
|
+
default_value="burger",
|
|
32
|
+
description="TurtleBot3 model: burger | waffle | waffle_pi",
|
|
33
|
+
),
|
|
34
|
+
DeclareLaunchArgument(
|
|
35
|
+
"robot_namespace",
|
|
36
|
+
default_value="",
|
|
37
|
+
description="Same as AgenticROS robot.namespace; enables cmd_vel relay",
|
|
38
|
+
),
|
|
39
|
+
gazebo,
|
|
40
|
+
rviz,
|
|
41
|
+
]
|
|
42
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
3
|
+
<package format="3">
|
|
4
|
+
<name>agenticros_bringup</name>
|
|
5
|
+
<version>0.0.1</version>
|
|
6
|
+
<description>Launch files and RViz configs for TurtleBot3 Gazebo simulation and visualization aligned with AgenticROS defaults (cmd_vel, /scan, rosbridge).</description>
|
|
7
|
+
<maintainer email="team@plaipin.com">PlaiPin</maintainer>
|
|
8
|
+
<license>Apache-2.0</license>
|
|
9
|
+
|
|
10
|
+
<buildtool_depend>ament_python</buildtool_depend>
|
|
11
|
+
|
|
12
|
+
<exec_depend>ament_index_python</exec_depend>
|
|
13
|
+
<exec_depend>launch</exec_depend>
|
|
14
|
+
<exec_depend>launch_ros</exec_depend>
|
|
15
|
+
<exec_depend>rviz2</exec_depend>
|
|
16
|
+
<exec_depend>rosbridge_server</exec_depend>
|
|
17
|
+
<exec_depend>turtlebot3_gazebo</exec_depend>
|
|
18
|
+
<exec_depend>rclpy</exec_depend>
|
|
19
|
+
<exec_depend>geometry_msgs</exec_depend>
|
|
20
|
+
|
|
21
|
+
<export>
|
|
22
|
+
<build_type>ament_python</build_type>
|
|
23
|
+
</export>
|
|
24
|
+
</package>
|
|
File without changes
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
Panels:
|
|
2
|
+
- Class: rviz_common/Displays
|
|
3
|
+
Help Height: 78
|
|
4
|
+
Name: Displays
|
|
5
|
+
Property Tree Widget:
|
|
6
|
+
Expanded:
|
|
7
|
+
- /Global Options1
|
|
8
|
+
- /Status1
|
|
9
|
+
- /RobotModel1
|
|
10
|
+
- /TF1
|
|
11
|
+
- /LaserScan1
|
|
12
|
+
Splitter Ratio: 0.5
|
|
13
|
+
Tree Height: 464
|
|
14
|
+
- Class: rviz_common/Selection
|
|
15
|
+
Name: Selection
|
|
16
|
+
- Class: rviz_common/Tool Properties
|
|
17
|
+
Expanded:
|
|
18
|
+
- /2D Goal Pose1
|
|
19
|
+
- /Publish Point1
|
|
20
|
+
Name: Tool Properties
|
|
21
|
+
Splitter Ratio: 0.588679
|
|
22
|
+
- Class: rviz_common/Views
|
|
23
|
+
Expanded:
|
|
24
|
+
- /Current View1
|
|
25
|
+
Name: Views
|
|
26
|
+
Splitter Ratio: 0.5
|
|
27
|
+
- Class: rviz_common/Time
|
|
28
|
+
Experimental: false
|
|
29
|
+
Name: Time
|
|
30
|
+
SyncMode: 0
|
|
31
|
+
SyncSource: LaserScan
|
|
32
|
+
Visualization Manager:
|
|
33
|
+
Class: ""
|
|
34
|
+
Displays:
|
|
35
|
+
- Alpha: 0.5
|
|
36
|
+
Cell Size: 1
|
|
37
|
+
Class: rviz_default_plugins/Grid
|
|
38
|
+
Color: 160; 160; 164
|
|
39
|
+
Enabled: true
|
|
40
|
+
Line Style:
|
|
41
|
+
Line Width: 0.03
|
|
42
|
+
Value: Lines
|
|
43
|
+
Name: Grid
|
|
44
|
+
Normal Cell Count: 0
|
|
45
|
+
Offset:
|
|
46
|
+
X: 0
|
|
47
|
+
Y: 0
|
|
48
|
+
Z: 0
|
|
49
|
+
Plane: XY
|
|
50
|
+
Plane Cell Count: 10
|
|
51
|
+
Reference Frame: <Fixed Frame>
|
|
52
|
+
Value: true
|
|
53
|
+
- Alpha: 1
|
|
54
|
+
Class: rviz_default_plugins/RobotModel
|
|
55
|
+
Collision Enabled: false
|
|
56
|
+
Description File: ""
|
|
57
|
+
Description Source: Topic
|
|
58
|
+
Description Topic:
|
|
59
|
+
Depth: 5
|
|
60
|
+
Durability Policy: Volatile
|
|
61
|
+
History Policy: Keep Last
|
|
62
|
+
Reliability Policy: Reliable
|
|
63
|
+
Value: /robot_description
|
|
64
|
+
Enabled: true
|
|
65
|
+
Name: RobotModel
|
|
66
|
+
TF Prefix: ""
|
|
67
|
+
Update Interval: 0
|
|
68
|
+
Value: true
|
|
69
|
+
Visual Enabled: true
|
|
70
|
+
- Class: rviz_default_plugins/TF
|
|
71
|
+
Enabled: true
|
|
72
|
+
Frame Timeout: 15
|
|
73
|
+
Marker Scale: 0.15
|
|
74
|
+
Name: TF
|
|
75
|
+
Show Arrows: true
|
|
76
|
+
Show Axes: true
|
|
77
|
+
Show Names: true
|
|
78
|
+
Update Interval: 0
|
|
79
|
+
Value: true
|
|
80
|
+
- Alpha: 1
|
|
81
|
+
Autocompute Intensity Bounds: true
|
|
82
|
+
Autocompute Value Bounds:
|
|
83
|
+
Max Value: 10
|
|
84
|
+
Min Value: -10
|
|
85
|
+
Value: true
|
|
86
|
+
Axis: Z
|
|
87
|
+
Channel Name: intensity
|
|
88
|
+
Class: rviz_default_plugins/LaserScan
|
|
89
|
+
Color: 255; 85; 0
|
|
90
|
+
Color Transformer: AxisColor
|
|
91
|
+
Decay Time: 0
|
|
92
|
+
Enabled: true
|
|
93
|
+
Invert Rainbow: false
|
|
94
|
+
Max Color: 255; 255; 255
|
|
95
|
+
Max Intensity: 4096
|
|
96
|
+
Min Color: 0; 0; 0
|
|
97
|
+
Min Intensity: 0
|
|
98
|
+
Name: LaserScan
|
|
99
|
+
Position Transformer: XYZ
|
|
100
|
+
Queue Size: 10
|
|
101
|
+
Selectable: true
|
|
102
|
+
Size (m): 0.04
|
|
103
|
+
Style: Flat Squares
|
|
104
|
+
Topic:
|
|
105
|
+
Depth: 5
|
|
106
|
+
Durability Policy: Volatile
|
|
107
|
+
History Policy: Keep Last
|
|
108
|
+
Reliability Policy: Best Effort
|
|
109
|
+
Value: /scan
|
|
110
|
+
Use Fixed Frame: true
|
|
111
|
+
Use rainbow: true
|
|
112
|
+
Value: true
|
|
113
|
+
Enabled: true
|
|
114
|
+
Global Options:
|
|
115
|
+
Background Color: 48; 48; 48
|
|
116
|
+
Fixed Frame: odom
|
|
117
|
+
Frame Rate: 30
|
|
118
|
+
Name: root
|
|
119
|
+
Tools:
|
|
120
|
+
- Class: rviz_default_plugins/Interact
|
|
121
|
+
Hide Inactive Objects: true
|
|
122
|
+
- Class: rviz_default_plugins/MoveCamera
|
|
123
|
+
- Class: rviz_default_plugins/Select
|
|
124
|
+
- Class: rviz_default_plugins/FocusCamera
|
|
125
|
+
- Class: rviz_default_plugins/Measure
|
|
126
|
+
- Class: rviz_default_plugins/SetInitialPose
|
|
127
|
+
Topic: /initialpose
|
|
128
|
+
- Class: rviz_default_plugins/SetGoal
|
|
129
|
+
Topic: /goal_pose
|
|
130
|
+
- Class: rviz_default_plugins/PublishPoint
|
|
131
|
+
Single click: true
|
|
132
|
+
Topic: /clicked_point
|
|
133
|
+
Value: true
|
|
134
|
+
Views:
|
|
135
|
+
Current:
|
|
136
|
+
Class: rviz_default_plugins/Orbit
|
|
137
|
+
Distance: 8
|
|
138
|
+
Enable Stereo Rendering:
|
|
139
|
+
Stereo Eye Separation: 0.06
|
|
140
|
+
Stereo Focal Distance: 1
|
|
141
|
+
Swap Stereo Eyes: false
|
|
142
|
+
Value: false
|
|
143
|
+
Focal Point:
|
|
144
|
+
X: 0
|
|
145
|
+
Y: 0
|
|
146
|
+
Z: 0
|
|
147
|
+
Focal Shape Fixed Size: true
|
|
148
|
+
Focal Shape Size: 0.05
|
|
149
|
+
Invert Z Axis: false
|
|
150
|
+
Name: Current View
|
|
151
|
+
Near Clip Distance: 0.01
|
|
152
|
+
Pitch: 0.5
|
|
153
|
+
Target Frame: <Fixed Frame>
|
|
154
|
+
Value: Orbit (rviz)
|
|
155
|
+
Yaw: 0.8
|
|
156
|
+
Saved: ~
|
|
157
|
+
Window Geometry:
|
|
158
|
+
Displays:
|
|
159
|
+
collapsed: false
|
|
160
|
+
Height: 846
|
|
161
|
+
Hide Left Dock: false
|
|
162
|
+
Hide Right Dock: false
|
|
163
|
+
QMainWindow State: 000000ff00000000fd00000004000000000000013c0000025ffc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000000410000025f000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000025ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a0056006900650077007301000000410000025f000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000028900fffffffb0000000800540069006d00650100000000000004500000000000000000000001eb0000025f00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
|
164
|
+
Selection:
|
|
165
|
+
collapsed: false
|
|
166
|
+
Time:
|
|
167
|
+
collapsed: false
|
|
168
|
+
Tool Properties:
|
|
169
|
+
collapsed: false
|
|
170
|
+
Views:
|
|
171
|
+
collapsed: false
|
|
172
|
+
Width: 1200
|
|
173
|
+
X: 60
|
|
174
|
+
Y: 60
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from glob import glob
|
|
2
|
+
|
|
3
|
+
from setuptools import find_packages, setup
|
|
4
|
+
|
|
5
|
+
package_name = "agenticros_bringup"
|
|
6
|
+
|
|
7
|
+
setup(
|
|
8
|
+
name=package_name,
|
|
9
|
+
version="0.0.1",
|
|
10
|
+
packages=find_packages(exclude=["test"]),
|
|
11
|
+
data_files=[
|
|
12
|
+
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
|
|
13
|
+
("share/" + package_name, ["package.xml"]),
|
|
14
|
+
("share/" + package_name + "/launch", glob("launch/*.py")),
|
|
15
|
+
("share/" + package_name + "/rviz", glob("rviz/*.rviz")),
|
|
16
|
+
],
|
|
17
|
+
install_requires=["setuptools"],
|
|
18
|
+
entry_points={
|
|
19
|
+
"console_scripts": [
|
|
20
|
+
"cmd_vel_relay = agenticros_bringup.cmd_vel_relay:main",
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
zip_safe=True,
|
|
24
|
+
maintainer="PlaiPin",
|
|
25
|
+
maintainer_email="team@plaipin.com",
|
|
26
|
+
description="AgenticROS-friendly simulation and RViz bringup.",
|
|
27
|
+
license="Apache-2.0",
|
|
28
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AgenticROS Discovery Node
|
|
3
|
+
|
|
4
|
+
Introspects the running ROS2 system and publishes a capability manifest
|
|
5
|
+
describing available topics, services, and actions. This manifest is consumed
|
|
6
|
+
by the AgenticROS plugin to inform the AI agent about what the robot can do.
|
|
7
|
+
|
|
8
|
+
Published topic:
|
|
9
|
+
/agenticros/capabilities (agenticros_msgs/msg/CapabilityManifest)
|
|
10
|
+
|
|
11
|
+
Service:
|
|
12
|
+
/agenticros/get_capabilities (agenticros_msgs/srv/GetCapabilities)
|
|
13
|
+
|
|
14
|
+
Parameters:
|
|
15
|
+
robot_name — Name of the robot (default: "Robot")
|
|
16
|
+
robot_namespace — Namespace filter; empty = discover all (default: "")
|
|
17
|
+
publish_interval — Seconds between manifest publications (default: 5.0)
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import rclpy
|
|
23
|
+
from rclpy.node import Node
|
|
24
|
+
from rclpy.qos import QoSProfile, DurabilityPolicy
|
|
25
|
+
|
|
26
|
+
from agenticros_msgs.msg import CapabilityManifest
|
|
27
|
+
from agenticros_msgs.srv import GetCapabilities
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Internal ROS2 topics/services that clutter the manifest
|
|
31
|
+
_INTERNAL_PREFIXES = (
|
|
32
|
+
"/rosout",
|
|
33
|
+
"/parameter_events",
|
|
34
|
+
"/agenticros/",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class DiscoveryNode(Node):
|
|
39
|
+
"""Periodically discovers ROS2 capabilities and publishes a manifest."""
|
|
40
|
+
|
|
41
|
+
def __init__(self) -> None:
|
|
42
|
+
super().__init__("agenticros_discovery")
|
|
43
|
+
|
|
44
|
+
# Parameters
|
|
45
|
+
self.declare_parameter("robot_name", "Robot")
|
|
46
|
+
self.declare_parameter("robot_namespace", "")
|
|
47
|
+
self.declare_parameter("publish_interval", 5.0)
|
|
48
|
+
|
|
49
|
+
self.robot_name: str = self.get_parameter("robot_name").value
|
|
50
|
+
self.robot_namespace: str = self.get_parameter("robot_namespace").value
|
|
51
|
+
self.publish_interval: float = self.get_parameter("publish_interval").value
|
|
52
|
+
|
|
53
|
+
# Publisher — transient local so late subscribers get the last manifest
|
|
54
|
+
qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL)
|
|
55
|
+
self.manifest_pub = self.create_publisher(
|
|
56
|
+
CapabilityManifest, "/agenticros/capabilities", qos
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Service — on-demand query
|
|
60
|
+
self.get_caps_srv = self.create_service(
|
|
61
|
+
GetCapabilities, "/agenticros/get_capabilities", self._handle_get_capabilities
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Timer — periodic discovery
|
|
65
|
+
self.timer = self.create_timer(self.publish_interval, self._on_timer)
|
|
66
|
+
|
|
67
|
+
self.get_logger().info(
|
|
68
|
+
f"Discovery node started: robot={self.robot_name}, "
|
|
69
|
+
f"namespace='{self.robot_namespace}', interval={self.publish_interval}s"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
def _on_timer(self) -> None:
|
|
73
|
+
"""Discover capabilities and publish the manifest."""
|
|
74
|
+
manifest = self._build_manifest()
|
|
75
|
+
self.manifest_pub.publish(manifest)
|
|
76
|
+
self.get_logger().debug(
|
|
77
|
+
f"Published manifest: {len(manifest.topic_names)} topics, "
|
|
78
|
+
f"{len(manifest.service_names)} services, "
|
|
79
|
+
f"{len(manifest.action_names)} actions"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
def _handle_get_capabilities(
|
|
83
|
+
self,
|
|
84
|
+
request: GetCapabilities.Request,
|
|
85
|
+
response: GetCapabilities.Response,
|
|
86
|
+
) -> GetCapabilities.Response:
|
|
87
|
+
"""Handle on-demand capability query."""
|
|
88
|
+
# Allow overriding namespace per-request
|
|
89
|
+
saved_ns = self.robot_namespace
|
|
90
|
+
if request.robot_namespace:
|
|
91
|
+
self.robot_namespace = request.robot_namespace
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
response.manifest = self._build_manifest()
|
|
95
|
+
response.success = True
|
|
96
|
+
response.error_message = ""
|
|
97
|
+
except Exception as e:
|
|
98
|
+
response.success = False
|
|
99
|
+
response.error_message = str(e)
|
|
100
|
+
finally:
|
|
101
|
+
self.robot_namespace = saved_ns
|
|
102
|
+
|
|
103
|
+
return response
|
|
104
|
+
|
|
105
|
+
def _build_manifest(self) -> CapabilityManifest:
|
|
106
|
+
"""Query the ROS2 graph and build a CapabilityManifest message."""
|
|
107
|
+
manifest = CapabilityManifest()
|
|
108
|
+
manifest.robot_name = self.robot_name
|
|
109
|
+
manifest.robot_namespace = self.robot_namespace
|
|
110
|
+
manifest.stamp = self.get_clock().now().to_msg()
|
|
111
|
+
|
|
112
|
+
ns_prefix = self.robot_namespace if self.robot_namespace else ""
|
|
113
|
+
|
|
114
|
+
# Discover topics
|
|
115
|
+
for name, types in self.get_topic_names_and_types():
|
|
116
|
+
if not self._should_include(name, ns_prefix):
|
|
117
|
+
continue
|
|
118
|
+
manifest.topic_names.append(name)
|
|
119
|
+
manifest.topic_types.append(types[0] if types else "")
|
|
120
|
+
|
|
121
|
+
# Discover services
|
|
122
|
+
for name, types in self.get_service_names_and_types():
|
|
123
|
+
if not self._should_include(name, ns_prefix):
|
|
124
|
+
continue
|
|
125
|
+
manifest.service_names.append(name)
|
|
126
|
+
manifest.service_types.append(types[0] if types else "")
|
|
127
|
+
|
|
128
|
+
# Discover actions — heuristic: look for */_action/feedback topics
|
|
129
|
+
feedback_suffix = "/_action/feedback"
|
|
130
|
+
for name, types in self.get_topic_names_and_types():
|
|
131
|
+
if name.endswith(feedback_suffix):
|
|
132
|
+
action_name = name[: -len(feedback_suffix)]
|
|
133
|
+
if not self._should_include(action_name, ns_prefix):
|
|
134
|
+
continue
|
|
135
|
+
action_type = types[0] if types else ""
|
|
136
|
+
# Convert feedback type to action type
|
|
137
|
+
if action_type.endswith("_FeedbackMessage"):
|
|
138
|
+
action_type = action_type[: -len("_FeedbackMessage")]
|
|
139
|
+
manifest.action_names.append(action_name)
|
|
140
|
+
manifest.action_types.append(action_type)
|
|
141
|
+
|
|
142
|
+
return manifest
|
|
143
|
+
|
|
144
|
+
def _should_include(self, name: str, ns_prefix: str) -> bool:
|
|
145
|
+
"""Check if a topic/service/action should be included in the manifest."""
|
|
146
|
+
# Filter by namespace if set
|
|
147
|
+
if ns_prefix and not name.startswith(ns_prefix):
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
# Exclude ROS2 internal topics
|
|
151
|
+
for prefix in _INTERNAL_PREFIXES:
|
|
152
|
+
if name.startswith(prefix):
|
|
153
|
+
return False
|
|
154
|
+
|
|
155
|
+
return True
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def main() -> None:
|
|
159
|
+
"""Entry point for the discovery node."""
|
|
160
|
+
rclpy.init()
|
|
161
|
+
node = DiscoveryNode()
|
|
162
|
+
try:
|
|
163
|
+
rclpy.spin(node)
|
|
164
|
+
except KeyboardInterrupt:
|
|
165
|
+
pass
|
|
166
|
+
finally:
|
|
167
|
+
node.destroy_node()
|
|
168
|
+
rclpy.shutdown()
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
if __name__ == "__main__":
|
|
172
|
+
main()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
3
|
+
<package format="3">
|
|
4
|
+
<name>agenticros_discovery</name>
|
|
5
|
+
<version>0.0.1</version>
|
|
6
|
+
<description>ROS2 node that introspects available topics, services, and actions and publishes a capability manifest</description>
|
|
7
|
+
<maintainer email="team@plaipin.com">PlaiPin</maintainer>
|
|
8
|
+
<license>Apache-2.0</license>
|
|
9
|
+
|
|
10
|
+
<depend>rclpy</depend>
|
|
11
|
+
<depend>std_msgs</depend>
|
|
12
|
+
<depend>agenticros_msgs</depend>
|
|
13
|
+
|
|
14
|
+
<test_depend>ament_copyright</test_depend>
|
|
15
|
+
<test_depend>ament_flake8</test_depend>
|
|
16
|
+
<test_depend>ament_pep257</test_depend>
|
|
17
|
+
<test_depend>python3-pytest</test_depend>
|
|
18
|
+
|
|
19
|
+
<export>
|
|
20
|
+
<build_type>ament_python</build_type>
|
|
21
|
+
</export>
|
|
22
|
+
</package>
|
|
File without changes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from setuptools import find_packages, setup
|
|
2
|
+
|
|
3
|
+
package_name = "agenticros_discovery"
|
|
4
|
+
|
|
5
|
+
setup(
|
|
6
|
+
name=package_name,
|
|
7
|
+
version="0.0.1",
|
|
8
|
+
packages=find_packages(exclude=["test"]),
|
|
9
|
+
data_files=[
|
|
10
|
+
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
|
|
11
|
+
("share/" + package_name, ["package.xml"]),
|
|
12
|
+
],
|
|
13
|
+
install_requires=["setuptools"],
|
|
14
|
+
zip_safe=True,
|
|
15
|
+
maintainer="PlaiPin",
|
|
16
|
+
maintainer_email="team@plaipin.com",
|
|
17
|
+
description="ROS2 capability discovery node for AgenticROS",
|
|
18
|
+
license="Apache-2.0",
|
|
19
|
+
tests_require=["pytest"],
|
|
20
|
+
entry_points={
|
|
21
|
+
"console_scripts": [
|
|
22
|
+
"discovery_node = agenticros_discovery.discovery_node:main",
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# agenticros_follow_me
|
|
2
|
+
|
|
3
|
+
ROS2 node for the **Follow Me** mission: person tracking and follower control. Publishes `geometry_msgs/Twist` to `cmd_vel` and advertises ROS2 services used by the AgenticROS plugin. All Follow Me behavior is in-repo; AgenticROS does not depend on external projects for this mission.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Person detection via **RealSense** depth + **MediaPipe** Pose (or simple depth fallback / mock when unavailable).
|
|
8
|
+
- Follower controller maintains a configurable distance and publishes velocity commands to `cmd_vel`.
|
|
9
|
+
- ROS2 services: `follow_me/start`, `follow_me/stop`, `follow_me/set_distance`, `follow_me/get_status`, `follow_me/set_target`.
|
|
10
|
+
|
|
11
|
+
## Dependencies
|
|
12
|
+
|
|
13
|
+
- **ROS2** (Jazzy or compatible).
|
|
14
|
+
- **agenticros_msgs** (from this workspace).
|
|
15
|
+
- Optional (for real camera + detection):
|
|
16
|
+
- `pyrealsense2` — RealSense SDK.
|
|
17
|
+
- `mediapipe` — pose detection.
|
|
18
|
+
- `opencv-python` — image handling.
|
|
19
|
+
- `numpy`
|
|
20
|
+
|
|
21
|
+
Without them, the node runs in mock mode (simulated person).
|
|
22
|
+
|
|
23
|
+
## Build
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd ros2_ws
|
|
27
|
+
colcon build --packages-select agenticros_msgs agenticros_follow_me
|
|
28
|
+
source install/setup.bash
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Run
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
ros2 run agenticros_follow_me follow_me_node
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**If you get "No executable found"** (e.g. on some boards), run the node as a module instead (from the same shell where you sourced the workspace):
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
source install/setup.bash
|
|
41
|
+
python3 -m agenticros_follow_me
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Parameters:
|
|
45
|
+
|
|
46
|
+
- `use_camera` (bool, default: true) — use RealSense when available; otherwise mock.
|
|
47
|
+
- `target_distance` (float, default: 1.0) — follow distance in meters.
|
|
48
|
+
- `cmd_vel_topic` (string, default: `cmd_vel`) — topic for Twist commands.
|
|
49
|
+
|
|
50
|
+
Example with custom topic (e.g. namespaced):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ros2 run agenticros_follow_me follow_me_node --ros-args -p cmd_vel_topic:=robot_ns/cmd_vel
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Services
|
|
57
|
+
|
|
58
|
+
| Service | Type | Description |
|
|
59
|
+
|--------|------|-------------|
|
|
60
|
+
| `follow_me/start` | FollowMeStart | Start following (optional target description). |
|
|
61
|
+
| `follow_me/stop` | FollowMeStop | Stop following. |
|
|
62
|
+
| `follow_me/set_distance` | FollowMeSetDistance | Set target distance (m). |
|
|
63
|
+
| `follow_me/get_status` | FollowMeGetStatus | Get enabled, tracking, distances, twist. |
|
|
64
|
+
| `follow_me/set_target` | FollowMeSetTarget | Lock onto a person by description (closest match without VLM). |
|
|
65
|
+
|
|
66
|
+
The AgenticROS plugin uses these via the **follow_robot** tool when the user says "follow me", "stop following", etc.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# AgenticROS Follow Me mission
|