{"_id":"@agenticros/eyes","_rev":"4-bed3bbdbe0e546d80ae0481ba989fad5","name":"@agenticros/eyes","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@agenticros/eyes","version":"1.0.0","keywords":["agenticros","ros2","robot","eyes","cmd_vel","teleop"],"author":{"name":"PlaiPin"},"license":"MIT","_id":"@agenticros/eyes@1.0.0","maintainers":[{"name":"chrismatthieu","email":"chris@matthieu.us"}],"homepage":"https://github.com/agenticros/agenticros#readme","bugs":{"url":"https://github.com/agenticros/agenticros/issues"},"bin":{"agenticros-eyes":"src/index.js"},"dist":{"shasum":"68d4570b7759df2264c78684670ce237097fdf75","tarball":"https://registry.npmjs.org/@agenticros/eyes/-/eyes-1.0.0.tgz","fileCount":7,"integrity":"sha512-Jvx/uQvRVHCshiwmME/D5/ckWZaM6i4MZXD7rB7MgiHILIEAvF01z0PY0n5oN6UrbziFybW3A9N6qtBCpKcVQw==","signatures":[{"sig":"MEYCIQCfqaz+yhXKB9HFMUkikVJkOb3g92S2s4KqtRxmh29jTwIhAKMyD8hB6xQMSofN9UDGKmdCpoR3muEnCiMe9Ea0pZIc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21460},"main":"./src/index.js","type":"module","engines":{"node":">=18"},"gitHead":"be1174977e55a84ec26b2b275caee4b01af8da1c","scripts":{"test":"node -e \"process.exit(0)\"","build":"node -e \"process.exit(0)\"","start":"node src/index.js","typecheck":"node -e \"process.exit(0)\"","start:no-browser":"node src/index.js --no-browser"},"_npmUser":{"name":"chrismatthieu","email":"chris@matthieu.us"},"repository":{"url":"git+https://github.com/agenticros/agenticros.git","type":"git","directory":"packages/robot-eyes"},"_npmVersion":"10.9.8","description":"Fullscreen robot eyes for tablet/display devices, driven by ROS 2 cmd_vel Twist","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"rclnodejs":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/eyes_1.0.0_1784214225574_0.6007473412675992","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@agenticros/eyes","version":"1.1.0","keywords":["agenticros","ros2","robot","eyes","cmd_vel","teleop"],"author":{"name":"PlaiPin"},"license":"MIT","_id":"@agenticros/eyes@1.1.0","maintainers":[{"name":"chrismatthieu","email":"chris@matthieu.us"}],"homepage":"https://github.com/agenticros/agenticros#readme","bugs":{"url":"https://github.com/agenticros/agenticros/issues"},"bin":{"agenticros-eyes":"src/index.js"},"dist":{"shasum":"ba34888636d80ee95754b1c3187eadf55372dbcd","tarball":"https://registry.npmjs.org/@agenticros/eyes/-/eyes-1.1.0.tgz","fileCount":10,"integrity":"sha512-prR6FnjIUMFnXxKxxWto0ESanTH7JGFzAf91ACTtDcB6AvQ0w/cJsZjz+8xtC+r10JkrqeBdxthLJPRQokzoKA==","signatures":[{"sig":"MEUCIEOzAWdCcAjHrLlxHar+oincB+OHlmzqe0acvsRhApY7AiEAh8OT7/8qyQNs+PH30w2j5eThdL5HvQSwKhbsJDIQ8RM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33480},"main":"./src/index.js","type":"module","engines":{"node":">=18"},"gitHead":"05a566ce341911261eb9c90d094024d2e838cb65","scripts":{"test":"node -e \"process.exit(0)\"","build":"node -e \"process.exit(0)\"","start":"node src/index.js","typecheck":"node -e \"process.exit(0)\"","start:no-browser":"node src/index.js --no-browser"},"_npmUser":{"name":"chrismatthieu","email":"chris@matthieu.us"},"repository":{"url":"git+https://github.com/agenticros/agenticros.git","type":"git","directory":"packages/robot-eyes"},"_npmVersion":"10.9.8","description":"Fullscreen robot eyes for tablet/display devices, driven by ROS 2 cmd_vel Twist, with R2D2-style sounds","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"rclnodejs":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/eyes_1.1.0_1784219297554_0.7348242497575073","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@agenticros/eyes","version":"1.2.0","keywords":["agenticros","ros2","robot","eyes","cmd_vel","teleop"],"author":{"name":"PlaiPin"},"license":"MIT","_id":"@agenticros/eyes@1.2.0","maintainers":[{"name":"chrismatthieu","email":"chris@matthieu.us"}],"homepage":"https://github.com/agenticros/agenticros#readme","bugs":{"url":"https://github.com/agenticros/agenticros/issues"},"bin":{"agenticros-eyes":"src/index.js"},"dist":{"shasum":"3ba426039f946ce4737b3e3a0d2c44b617065c42","tarball":"https://registry.npmjs.org/@agenticros/eyes/-/eyes-1.2.0.tgz","fileCount":13,"integrity":"sha512-SywbLjOAK2Qc3U1l7CXHpWgeaULUmaVPGgwgo4VTJXw7TaanFtOBrwQCFmjviun4MWHmkfu6L7sbvOq8UC4X/A==","signatures":[{"sig":"MEYCIQD7Fl0/XJooidjCqvgHN891BVN2LlMf9A4FrjDBfBfFSAIhAI1wfu4+mfJkq2azOD5q0Tb2fvdaNOo26mG5mQ+CiwT+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57768},"main":"./src/index.js","type":"module","_from":"file:agenticros-eyes-1.2.0.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test lib/*.test.js","build":"node -e \"process.exit(0)\"","start":"node src/index.js","typecheck":"node -e \"process.exit(0)\"","start:no-browser":"node src/index.js --no-browser"},"_npmUser":{"name":"chrismatthieu","email":"chris@matthieu.us"},"_resolved":"/private/var/folders/_v/4nh2510n48q4dz881pbnlhvh0000gn/T/8a4187945e865d3a40489189e98f8169/agenticros-eyes-1.2.0.tgz","_integrity":"sha512-SywbLjOAK2Qc3U1l7CXHpWgeaULUmaVPGgwgo4VTJXw7TaanFtOBrwQCFmjviun4MWHmkfu6L7sbvOq8UC4X/A==","repository":{"url":"git+https://github.com/agenticros/agenticros.git","type":"git","directory":"packages/robot-eyes"},"_npmVersion":"10.9.8","description":"Fullscreen robot eyes for tablet/display devices, driven by ROS 2 cmd_vel Twist, with optional idle person-follow gaze and R2D2-style sounds","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"rclnodejs":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/eyes_1.2.0_1786648152944_0.5761684200608894","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@agenticros/eyes","version":"1.2.1","description":"Fullscreen robot eyes for tablet/display devices, driven by ROS 2 cmd_vel Twist, with optional idle person-follow gaze and R2D2-style sounds","type":"module","main":"./src/index.js","bin":{"agenticros-eyes":"src/index.js"},"engines":{"node":">=18"},"dependencies":{"ws":"^8.18.0"},"optionalDependencies":{"rclnodejs":"^1.9.0"},"keywords":["agenticros","ros2","robot","eyes","cmd_vel","teleop"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/agenticros/agenticros.git","directory":"packages/robot-eyes"},"author":{"name":"PlaiPin"},"license":"MIT","scripts":{"build":"node -e \"process.exit(0)\"","typecheck":"node -e \"process.exit(0)\"","start":"node src/index.js","start:no-browser":"node src/index.js --no-browser","test":"node --test lib/*.test.js"},"_id":"@agenticros/eyes@1.2.1","bugs":{"url":"https://github.com/agenticros/agenticros/issues"},"homepage":"https://github.com/agenticros/agenticros#readme","_integrity":"sha512-hufAmZvAJ2+U2WqY44lJ5l+6NU8U8Hj5VeVCwbkk7bZmyQE33bRBAL7b+YELrIhtUaR/71SuB67AX8SR0gMU7w==","_resolved":"/private/var/folders/_v/4nh2510n48q4dz881pbnlhvh0000gn/T/50d2a6a89d2c508b220166de808eb358/agenticros-eyes-1.2.1.tgz","_from":"file:agenticros-eyes-1.2.1.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-hufAmZvAJ2+U2WqY44lJ5l+6NU8U8Hj5VeVCwbkk7bZmyQE33bRBAL7b+YELrIhtUaR/71SuB67AX8SR0gMU7w==","shasum":"7fb98b2fb49a8ea557b78f0bcad75787693529a9","tarball":"https://registry.npmjs.org/@agenticros/eyes/-/eyes-1.2.1.tgz","fileCount":13,"unpackedSize":57965,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDbLg8Wku+VF5roSXdh7v8GgaT5EsoeTicCDp11MMB7HgIhAIb238FbJdUkBELzhHoM/8oJw9ujP0c2I/rXiePVMqVP"}]},"_npmUser":{"name":"chrismatthieu","email":"chris@matthieu.us"},"directories":{},"maintainers":[{"name":"chrismatthieu","email":"chris@matthieu.us"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eyes_1.2.1_1786649505546_0.8937906477511544"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-16T15:03:43.969Z","modified":"2026-08-13T19:31:45.915Z","1.0.0":"2026-07-16T15:03:45.716Z","1.1.0":"2026-07-16T16:28:17.697Z","1.2.0":"2026-08-13T19:09:13.087Z","1.2.1":"2026-08-13T19:31:45.689Z"},"bugs":{"url":"https://github.com/agenticros/agenticros/issues"},"author":{"name":"PlaiPin"},"license":"MIT","homepage":"https://github.com/agenticros/agenticros#readme","keywords":["agenticros","ros2","robot","eyes","cmd_vel","teleop"],"repository":{"type":"git","url":"git+https://github.com/agenticros/agenticros.git","directory":"packages/robot-eyes"},"description":"Fullscreen robot eyes for tablet/display devices, driven by ROS 2 cmd_vel Twist, with optional idle person-follow gaze and R2D2-style sounds","maintainers":[{"name":"chrismatthieu","email":"chris@matthieu.us"}],"readme":"# @agenticros/eyes\n\nFullscreen robot eyes for an Ubuntu tablet or robot display, driven by ROS 2 `cmd_vel` (`geometry_msgs/Twist`). Includes procedural R2D2-style chirps (idle + excited on motion). When idle, the pupils can follow a person in the RealSense camera if YOLO is already installed.\n\nPart of the [AgenticROS](https://github.com/agenticros/agenticros) monorepo. Prefer launching via the CLI:\n\n```bash\nagenticros eyes\nagenticros eyes --no-browser\nagenticros eyes --no-teleop          # gaze only (no WASD publish)\nagenticros eyes --no-sound           # mute R2D2 chirps\nagenticros eyes --no-person-gaze     # skip idle person-follow even if YOLO is present\nagenticros up real --eyes            # start eyes after the real-robot stack\n```\n\nSee [docs/eyes.md](../../docs/eyes.md) for setup, config, sounds, and keyboard teleop.\n\n## Gaze\n\nPriority, highest first:\n\n1. **Turning** (`cmd_vel` `|angular.z|` above the deadzone) — pupils look **right** on a left turn (`+angular.z`) and **left** on a right turn. Recenter when the command stops.\n2. **Driving straight** (`|linear.x|` above the deadzone, no turn) — pupils recenter. Person-follow does not run while the robot is moving.\n3. **Idle + YOLO already installed** — pupils follow a person in the RealSense color frame (largest bounding box, aimed at the head). This moves the painted eyes only; it does **not** drive the base.\n4. **Idle + no person (or no YOLO)** — blinks and a slow look-around.\n\n### If YOLO is already installed\n\nPerson-follow gaze uses the same YOLOv8n detector as follow-me / `ros2_find_object`. Eyes **do not** add YOLO as a dependency and **do not** download `yolov8n.onnx`. It only runs when:\n\n- Weights already exist at `~/.agenticros/models/yolov8n.onnx` (or `AGENTICROS_YOLOV8_MODEL`)\n- `@agenticros/object-detection` (and `onnxruntime-node` / `sharp`) are already present from another adapter\n\nStartup log: `Person gaze enabled (YOLO) on <camera topic>`.\n\nColor topic comes from `robot.cameraTopic` in `~/.agenticros/config.json` (raw Image paths get `/compressed` appended). Default: `/camera/camera/color/image_raw/compressed`.\n\nDisable even when YOLO is present:\n\n```bash\nagenticros eyes --no-person-gaze\nagenticros up real --eyes --eyes-no-person-gaze\n```\n\n### If YOLO is not installed\n\nPerson-follow is skipped. Twist gaze, idle blink / look-around, WASD, and sounds still work. Startup log: `Person gaze disabled (YOLO not installed)`.\n\n## Direct run (development)\n\n```bash\nsource /opt/ros/jazzy/setup.bash\ncd packages/robot-eyes\npnpm install   # from monorepo root is preferred\npnpm start\n```\n\nRequires Node 18+, ROS 2, a graphical display (`DISPLAY`) for kiosk mode, and `afplay` / `paplay` / `aplay` for sounds.\n\n## License\n\nMIT. The synthesizer in `lib/synth.js` is adapted from [r2d2](https://github.com/chrismatthieu/r2d2) under Apache-2.0 (see [NOTICE](NOTICE)).\n","readmeFilename":"README.md"}