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.
Files changed (330) hide show
  1. package/LICENSE +192 -0
  2. package/README.md +90 -4
  3. package/dist/commands/config.d.ts +20 -0
  4. package/dist/commands/config.d.ts.map +1 -0
  5. package/dist/commands/config.js +179 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +33 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +232 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/down.d.ts +15 -0
  12. package/dist/commands/down.d.ts.map +1 -0
  13. package/dist/commands/down.js +91 -0
  14. package/dist/commands/down.js.map +1 -0
  15. package/dist/commands/init.d.ts +21 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +259 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/logs.d.ts +18 -0
  20. package/dist/commands/logs.d.ts.map +1 -0
  21. package/dist/commands/logs.js +67 -0
  22. package/dist/commands/logs.js.map +1 -0
  23. package/dist/commands/status.d.ts +12 -0
  24. package/dist/commands/status.d.ts.map +1 -0
  25. package/dist/commands/status.js +56 -0
  26. package/dist/commands/status.js.map +1 -0
  27. package/dist/commands/up.d.ts +20 -0
  28. package/dist/commands/up.d.ts.map +1 -0
  29. package/dist/commands/up.js +70 -0
  30. package/dist/commands/up.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +107 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/menu.d.ts +9 -0
  36. package/dist/menu.d.ts.map +1 -0
  37. package/dist/menu.js +96 -0
  38. package/dist/menu.js.map +1 -0
  39. package/dist/runners/real-robot.d.ts +15 -0
  40. package/dist/runners/real-robot.d.ts.map +1 -0
  41. package/dist/runners/real-robot.js +46 -0
  42. package/dist/runners/real-robot.js.map +1 -0
  43. package/dist/runners/sim.d.ts +19 -0
  44. package/dist/runners/sim.d.ts.map +1 -0
  45. package/dist/runners/sim.js +53 -0
  46. package/dist/runners/sim.js.map +1 -0
  47. package/dist/util/env.d.ts +24 -0
  48. package/dist/util/env.d.ts.map +1 -0
  49. package/dist/util/env.js +53 -0
  50. package/dist/util/env.js.map +1 -0
  51. package/dist/util/logger.d.ts +24 -0
  52. package/dist/util/logger.d.ts.map +1 -0
  53. package/dist/util/logger.js +62 -0
  54. package/dist/util/logger.js.map +1 -0
  55. package/dist/util/paths.d.ts +57 -0
  56. package/dist/util/paths.d.ts.map +1 -0
  57. package/dist/util/paths.js +132 -0
  58. package/dist/util/paths.js.map +1 -0
  59. package/dist/util/pidfile.d.ts +16 -0
  60. package/dist/util/pidfile.d.ts.map +1 -0
  61. package/dist/util/pidfile.js +63 -0
  62. package/dist/util/pidfile.js.map +1 -0
  63. package/dist/util/state.d.ts +26 -0
  64. package/dist/util/state.d.ts.map +1 -0
  65. package/dist/util/state.js +55 -0
  66. package/dist/util/state.js.map +1 -0
  67. package/package.json +60 -1
  68. package/runtime/BUNDLE.json +11 -0
  69. package/runtime/LICENSE +192 -0
  70. package/runtime/README.md +273 -0
  71. package/runtime/docs/architecture.md +366 -0
  72. package/runtime/docs/cli.md +140 -0
  73. package/runtime/docs/memory.md +292 -0
  74. package/runtime/docs/robot-setup.md +347 -0
  75. package/runtime/package.json +28 -0
  76. package/runtime/packages/agenticros/agenticros-agenticros-0.0.1.tgz +0 -0
  77. package/runtime/packages/agenticros/openclaw.plugin.json +451 -0
  78. package/runtime/packages/agenticros/package.json +41 -0
  79. package/runtime/packages/agenticros/src/camera-snapshot-cache.ts +59 -0
  80. package/runtime/packages/agenticros/src/camera-snapshot-routes.ts +44 -0
  81. package/runtime/packages/agenticros/src/commands/estop.ts +41 -0
  82. package/runtime/packages/agenticros/src/commands/transport.ts +195 -0
  83. package/runtime/packages/agenticros/src/config-file.ts +136 -0
  84. package/runtime/packages/agenticros/src/config-page.ts +498 -0
  85. package/runtime/packages/agenticros/src/context/robot-context.ts +373 -0
  86. package/runtime/packages/agenticros/src/depth.ts +313 -0
  87. package/runtime/packages/agenticros/src/describer.ts +157 -0
  88. package/runtime/packages/agenticros/src/image-binary-trim.ts +16 -0
  89. package/runtime/packages/agenticros/src/index.ts +85 -0
  90. package/runtime/packages/agenticros/src/landing-page.ts +38 -0
  91. package/runtime/packages/agenticros/src/memory.ts +44 -0
  92. package/runtime/packages/agenticros/src/plugin-api.ts +173 -0
  93. package/runtime/packages/agenticros/src/plugin-image-base64.ts +69 -0
  94. package/runtime/packages/agenticros/src/preflight.ts +110 -0
  95. package/runtime/packages/agenticros/src/routes.ts +328 -0
  96. package/runtime/packages/agenticros/src/safety/validator.ts +43 -0
  97. package/runtime/packages/agenticros/src/service.ts +359 -0
  98. package/runtime/packages/agenticros/src/skill-api.ts +65 -0
  99. package/runtime/packages/agenticros/src/skill-loader.ts +146 -0
  100. package/runtime/packages/agenticros/src/teleop/page.ts +498 -0
  101. package/runtime/packages/agenticros/src/teleop/routes.ts +650 -0
  102. package/runtime/packages/agenticros/src/tools/index.ts +26 -0
  103. package/runtime/packages/agenticros/src/tools/ros2-action.ts +50 -0
  104. package/runtime/packages/agenticros/src/tools/ros2-camera.ts +221 -0
  105. package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +58 -0
  106. package/runtime/packages/agenticros/src/tools/ros2-introspect.ts +62 -0
  107. package/runtime/packages/agenticros/src/tools/ros2-memory.ts +158 -0
  108. package/runtime/packages/agenticros/src/tools/ros2-param.ts +87 -0
  109. package/runtime/packages/agenticros/src/tools/ros2-publish.ts +52 -0
  110. package/runtime/packages/agenticros/src/tools/ros2-service.ts +46 -0
  111. package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +71 -0
  112. package/runtime/packages/agenticros/tsconfig.json +9 -0
  113. package/runtime/packages/agenticros-claude-code/README.md +260 -0
  114. package/runtime/packages/agenticros-claude-code/config.example.json +9 -0
  115. package/runtime/packages/agenticros-claude-code/dist/config.d.ts +8 -0
  116. package/runtime/packages/agenticros-claude-code/dist/config.d.ts.map +1 -0
  117. package/runtime/packages/agenticros-claude-code/dist/config.js +93 -0
  118. package/runtime/packages/agenticros-claude-code/dist/config.js.map +1 -0
  119. package/runtime/packages/agenticros-claude-code/dist/depth.d.ts +20 -0
  120. package/runtime/packages/agenticros-claude-code/dist/depth.d.ts.map +1 -0
  121. package/runtime/packages/agenticros-claude-code/dist/depth.js +126 -0
  122. package/runtime/packages/agenticros-claude-code/dist/depth.js.map +1 -0
  123. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts +6 -0
  124. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts.map +1 -0
  125. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js +36 -0
  126. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js.map +1 -0
  127. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +33 -0
  128. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -0
  129. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +134 -0
  130. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -0
  131. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts +43 -0
  132. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts.map +1 -0
  133. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js +73 -0
  134. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js.map +1 -0
  135. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts +58 -0
  136. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts.map +1 -0
  137. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js +251 -0
  138. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js.map +1 -0
  139. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +61 -0
  140. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -0
  141. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +268 -0
  142. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -0
  143. package/runtime/packages/agenticros-claude-code/dist/index.d.ts +3 -0
  144. package/runtime/packages/agenticros-claude-code/dist/index.d.ts.map +1 -0
  145. package/runtime/packages/agenticros-claude-code/dist/index.js +111 -0
  146. package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -0
  147. package/runtime/packages/agenticros-claude-code/dist/memory.d.ts +17 -0
  148. package/runtime/packages/agenticros-claude-code/dist/memory.d.ts.map +1 -0
  149. package/runtime/packages/agenticros-claude-code/dist/memory.js +44 -0
  150. package/runtime/packages/agenticros-claude-code/dist/memory.js.map +1 -0
  151. package/runtime/packages/agenticros-claude-code/dist/safety.d.ts +10 -0
  152. package/runtime/packages/agenticros-claude-code/dist/safety.d.ts.map +1 -0
  153. package/runtime/packages/agenticros-claude-code/dist/safety.js +34 -0
  154. package/runtime/packages/agenticros-claude-code/dist/safety.js.map +1 -0
  155. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +36 -0
  156. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -0
  157. package/runtime/packages/agenticros-claude-code/dist/tools.js +777 -0
  158. package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -0
  159. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +17 -0
  160. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -0
  161. package/runtime/packages/agenticros-claude-code/dist/transport.js +46 -0
  162. package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -0
  163. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts +42 -0
  164. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts.map +1 -0
  165. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js +114 -0
  166. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js.map +1 -0
  167. package/runtime/packages/agenticros-claude-code/package.json +29 -0
  168. package/runtime/packages/agenticros-claude-code/src/config.ts +96 -0
  169. package/runtime/packages/agenticros-claude-code/src/depth.ts +173 -0
  170. package/runtime/packages/agenticros-claude-code/src/find-object/coco-classes.ts +38 -0
  171. package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +190 -0
  172. package/runtime/packages/agenticros-claude-code/src/follow-me/controller.ts +109 -0
  173. package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +420 -0
  174. package/runtime/packages/agenticros-claude-code/src/follow-me/detector.ts +303 -0
  175. package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +330 -0
  176. package/runtime/packages/agenticros-claude-code/src/index.ts +125 -0
  177. package/runtime/packages/agenticros-claude-code/src/memory.ts +51 -0
  178. package/runtime/packages/agenticros-claude-code/src/safety.ts +44 -0
  179. package/runtime/packages/agenticros-claude-code/src/tools.ts +891 -0
  180. package/runtime/packages/agenticros-claude-code/src/transport.ts +58 -0
  181. package/runtime/packages/agenticros-claude-code/src/zero-shot/detector.ts +169 -0
  182. package/runtime/packages/agenticros-claude-code/tsconfig.json +9 -0
  183. package/runtime/packages/agenticros-claude-code/yolo-debug.mjs +106 -0
  184. package/runtime/packages/agenticros-gemini/README.md +139 -0
  185. package/runtime/packages/agenticros-gemini/package.json +28 -0
  186. package/runtime/packages/agenticros-gemini/scripts/smoke-api.mjs +42 -0
  187. package/runtime/packages/agenticros-gemini/src/chat.ts +139 -0
  188. package/runtime/packages/agenticros-gemini/src/config.ts +92 -0
  189. package/runtime/packages/agenticros-gemini/src/depth.ts +173 -0
  190. package/runtime/packages/agenticros-gemini/src/index.ts +58 -0
  191. package/runtime/packages/agenticros-gemini/src/memory.ts +32 -0
  192. package/runtime/packages/agenticros-gemini/src/safety.ts +44 -0
  193. package/runtime/packages/agenticros-gemini/src/tools.ts +516 -0
  194. package/runtime/packages/agenticros-gemini/src/transport.ts +58 -0
  195. package/runtime/packages/agenticros-gemini/tsconfig.json +8 -0
  196. package/runtime/packages/core/package.json +47 -0
  197. package/runtime/packages/core/src/banner.ts +32 -0
  198. package/runtime/packages/core/src/cmd-vel-twist.ts +31 -0
  199. package/runtime/packages/core/src/config.ts +279 -0
  200. package/runtime/packages/core/src/index.ts +54 -0
  201. package/runtime/packages/core/src/memory/__tests__/factory.test.ts +70 -0
  202. package/runtime/packages/core/src/memory/__tests__/local-provider.test.ts +195 -0
  203. package/runtime/packages/core/src/memory/__tests__/mem0-provider.test.ts +192 -0
  204. package/runtime/packages/core/src/memory/__tests__/smart-defaults.test.ts +46 -0
  205. package/runtime/packages/core/src/memory/factory.ts +63 -0
  206. package/runtime/packages/core/src/memory/index.ts +10 -0
  207. package/runtime/packages/core/src/memory/local/provider.ts +229 -0
  208. package/runtime/packages/core/src/memory/mem0/provider.ts +379 -0
  209. package/runtime/packages/core/src/memory/types.ts +96 -0
  210. package/runtime/packages/core/src/topic-utils.ts +95 -0
  211. package/runtime/packages/core/src/transport/factory.ts +47 -0
  212. package/runtime/packages/core/src/transport/local/conversion.ts +333 -0
  213. package/runtime/packages/core/src/transport/local/entities.ts +129 -0
  214. package/runtime/packages/core/src/transport/local/transport.ts +406 -0
  215. package/runtime/packages/core/src/transport/rosbridge/actions.ts +81 -0
  216. package/runtime/packages/core/src/transport/rosbridge/adapter.ts +157 -0
  217. package/runtime/packages/core/src/transport/rosbridge/client.ts +438 -0
  218. package/runtime/packages/core/src/transport/rosbridge/services.ts +41 -0
  219. package/runtime/packages/core/src/transport/rosbridge/topics.ts +60 -0
  220. package/runtime/packages/core/src/transport/rosbridge/types.ts +118 -0
  221. package/runtime/packages/core/src/transport/transport.ts +77 -0
  222. package/runtime/packages/core/src/transport/types.ts +137 -0
  223. package/runtime/packages/core/src/transport/webrtc/signaling-client.ts +196 -0
  224. package/runtime/packages/core/src/transport/webrtc/signaling-types.ts +130 -0
  225. package/runtime/packages/core/src/transport/webrtc/transport.ts +516 -0
  226. package/runtime/packages/core/src/transport/zenoh/adapter.ts +357 -0
  227. package/runtime/packages/core/src/transport/zenoh/cdr.ts +183 -0
  228. package/runtime/packages/core/src/transport/zenoh/keys.ts +51 -0
  229. package/runtime/packages/core/tsconfig.json +9 -0
  230. package/runtime/packages/ros-camera/package.json +30 -0
  231. package/runtime/packages/ros-camera/src/index.ts +13 -0
  232. package/runtime/packages/ros-camera/src/snapshot.ts +372 -0
  233. package/runtime/packages/ros-camera/tsconfig.json +9 -0
  234. package/runtime/pnpm-lock.yaml +5260 -0
  235. package/runtime/pnpm-workspace.yaml +2 -0
  236. package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/__init__.py +0 -0
  237. package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/agent_node.py +561 -0
  238. package/runtime/ros2_ws/src/agenticros_agent/package.xml +25 -0
  239. package/runtime/ros2_ws/src/agenticros_agent/resource/agenticros_agent +0 -0
  240. package/runtime/ros2_ws/src/agenticros_agent/setup.cfg +4 -0
  241. package/runtime/ros2_ws/src/agenticros_agent/setup.py +25 -0
  242. package/runtime/ros2_ws/src/agenticros_bringup/README.md +128 -0
  243. package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/__init__.py +1 -0
  244. package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/cmd_vel_relay.py +33 -0
  245. package/runtime/ros2_ws/src/agenticros_bringup/launch/cmd_vel_bridge.launch.py +58 -0
  246. package/runtime/ros2_ws/src/agenticros_bringup/launch/gazebo_turtlebot3.launch.py +69 -0
  247. package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo.launch.py +55 -0
  248. package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo_rviz.launch.py +48 -0
  249. package/runtime/ros2_ws/src/agenticros_bringup/launch/realsense_rosbridge.launch.py +154 -0
  250. package/runtime/ros2_ws/src/agenticros_bringup/launch/rosbridge_gazebo.launch.py +54 -0
  251. package/runtime/ros2_ws/src/agenticros_bringup/launch/rviz.launch.py +38 -0
  252. package/runtime/ros2_ws/src/agenticros_bringup/launch/turtlebot3_gazebo_rviz.launch.py +42 -0
  253. package/runtime/ros2_ws/src/agenticros_bringup/package.xml +24 -0
  254. package/runtime/ros2_ws/src/agenticros_bringup/resource/agenticros_bringup +0 -0
  255. package/runtime/ros2_ws/src/agenticros_bringup/rviz/turtlebot3_agenticros.rviz +174 -0
  256. package/runtime/ros2_ws/src/agenticros_bringup/setup.cfg +4 -0
  257. package/runtime/ros2_ws/src/agenticros_bringup/setup.py +28 -0
  258. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/__init__.py +0 -0
  259. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +172 -0
  260. package/runtime/ros2_ws/src/agenticros_discovery/package.xml +22 -0
  261. package/runtime/ros2_ws/src/agenticros_discovery/resource/agenticros_discovery +0 -0
  262. package/runtime/ros2_ws/src/agenticros_discovery/setup.cfg +5 -0
  263. package/runtime/ros2_ws/src/agenticros_discovery/setup.py +25 -0
  264. package/runtime/ros2_ws/src/agenticros_follow_me/README.md +66 -0
  265. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__init__.py +1 -0
  266. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__main__.py +5 -0
  267. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follow_me_node.py +278 -0
  268. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follower_controller.py +631 -0
  269. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/person_tracker.py +635 -0
  270. package/runtime/ros2_ws/src/agenticros_follow_me/package.xml +22 -0
  271. package/runtime/ros2_ws/src/agenticros_follow_me/resource/agenticros_follow_me +0 -0
  272. package/runtime/ros2_ws/src/agenticros_follow_me/setup.py +25 -0
  273. package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +26 -0
  274. package/runtime/ros2_ws/src/agenticros_msgs/msg/CapabilityManifest.msg +9 -0
  275. package/runtime/ros2_ws/src/agenticros_msgs/package.xml +22 -0
  276. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeGetStatus.srv +11 -0
  277. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetDistance.srv +4 -0
  278. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetTarget.srv +6 -0
  279. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStart.srv +5 -0
  280. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStop.srv +3 -0
  281. package/runtime/ros2_ws/src/agenticros_msgs/srv/GetCapabilities.srv +5 -0
  282. package/runtime/ros2_ws/src/agenticros_sim/CMakeLists.txt +24 -0
  283. package/runtime/ros2_ws/src/agenticros_sim/README.md +120 -0
  284. package/runtime/ros2_ws/src/agenticros_sim/config/agenticros-sim.config.json +28 -0
  285. package/runtime/ros2_ws/src/agenticros_sim/config/amr_bridge.yaml +111 -0
  286. package/runtime/ros2_ws/src/agenticros_sim/config/amr_view.rviz +172 -0
  287. package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.dsv.in +3 -0
  288. package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.sh.in +7 -0
  289. package/runtime/ros2_ws/src/agenticros_sim/launch/sim_amr.launch.py +159 -0
  290. package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.config +17 -0
  291. package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.sdf +244 -0
  292. package/runtime/ros2_ws/src/agenticros_sim/package.xml +27 -0
  293. package/runtime/ros2_ws/src/agenticros_sim/worlds/agenticros_indoor.sdf +183 -0
  294. package/runtime/scripts/activate_workspace.sh +285 -0
  295. package/runtime/scripts/agenticros-describer.policy.yaml +96 -0
  296. package/runtime/scripts/agenticros-proxy.cjs +99 -0
  297. package/runtime/scripts/agenticros-rosbridge.policy.yaml +62 -0
  298. package/runtime/scripts/check-cli-tarball-size.mjs +42 -0
  299. package/runtime/scripts/configure_agenticros.sh +200 -0
  300. package/runtime/scripts/configure_for_sim.sh +64 -0
  301. package/runtime/scripts/fix-openclaw-control-ui-path.sh +20 -0
  302. package/runtime/scripts/install_cli.sh +94 -0
  303. package/runtime/scripts/install_rosbridge_from_source.sh +67 -0
  304. package/runtime/scripts/lib/agenticros-banner.sh +28 -0
  305. package/runtime/scripts/onboard_robot.sh +75 -0
  306. package/runtime/scripts/openai.policy.yaml +77 -0
  307. package/runtime/scripts/openclaw-dashboard-url.cjs +49 -0
  308. package/runtime/scripts/pack-runtime.mjs +245 -0
  309. package/runtime/scripts/run_demo_native.sh +43 -0
  310. package/runtime/scripts/run_nemoclaw_host_stack.sh +91 -0
  311. package/runtime/scripts/run_robot_rosbridge.sh +36 -0
  312. package/runtime/scripts/sandbox_rosbridge_relay.py +137 -0
  313. package/runtime/scripts/setup-openclaw-local.cjs +75 -0
  314. package/runtime/scripts/setup_gateway_plugin.sh +329 -0
  315. package/runtime/scripts/setup_robot.sh +113 -0
  316. package/runtime/scripts/setup_workspace.sh +484 -0
  317. package/runtime/scripts/sim/run_sim.sh +146 -0
  318. package/runtime/scripts/smoke_test_nemoclaw.sh +123 -0
  319. package/runtime/scripts/start_demo.sh +55 -0
  320. package/runtime/scripts/sync-skill-tools.mjs +335 -0
  321. package/runtime/scripts/test-follow-me-sim.mjs +135 -0
  322. package/runtime/scripts/test-mcp-e2e.mjs +184 -0
  323. package/runtime/scripts/test-rclnodejs.mts +129 -0
  324. package/runtime/scripts/use-openclaw-2026.2.26.sh +19 -0
  325. package/runtime/scripts/use-openclaw-2026.3.11.sh +19 -0
  326. package/runtime/scripts/zenoh-bridge-ros2dds-robot.json5 +30 -0
  327. package/runtime/scripts/zenohd-agenticros.json5 +11 -0
  328. package/runtime/scripts/zenohd-rosclaw.json5 +11 -0
  329. package/runtime/tsconfig.base.json +19 -0
  330. 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
+ )