{ "name": "NAO6 Sensors & Feedback", "version": "1.0.0", "description": "Complete sensor suite for NAO6 robot including touch sensors, sonar, IMU, cameras, and joint state monitoring", "platform": "NAO6", "category": "sensors", "manufacturer": { "name": "SoftBank Robotics", "website": "https://www.softbankrobotics.com" }, "documentation": { "mainUrl": "https://docs.hristudio.com/robots/nao6/sensors", "quickStart": "https://docs.hristudio.com/robots/nao6/sensors/quickstart" }, "ros2Config": { "namespace": "/naoqi_driver", "topics": { "joint_states": { "type": "sensor_msgs/JointState", "description": "Current positions, velocities, and efforts of all joints" }, "imu": { "type": "sensor_msgs/Imu", "description": "Inertial measurement unit data (acceleration, angular velocity, orientation)" }, "bumper": { "type": "naoqi_bridge_msgs/Bumper", "description": "Foot bumper sensor states" }, "hand_touch": { "type": "naoqi_bridge_msgs/HandTouch", "description": "Hand tactile sensor states" }, "head_touch": { "type": "naoqi_bridge_msgs/HeadTouch", "description": "Head tactile sensor states" }, "sonar/left": { "type": "sensor_msgs/Range", "description": "Left ultrasonic range sensor" }, "sonar/right": { "type": "sensor_msgs/Range", "description": "Right ultrasonic range sensor" }, "camera/front/image_raw": { "type": "sensor_msgs/Image", "description": "Front camera image feed" }, "camera/bottom/image_raw": { "type": "sensor_msgs/Image", "description": "Bottom camera image feed" }, "battery": { "type": "sensor_msgs/BatteryState", "description": "Battery level and charging status" } } }, "actions": [ { "id": "get_joint_states", "name": "Get Joint States", "description": "Read current positions and velocities of all robot joints", "category": "sensors", "parameters": [ { "name": "specific_joints", "type": "multiselect", "description": "Specific joints to monitor (empty = all joints)", "required": false, "options": [ { "value": "HeadYaw", "label": "Head Yaw" }, { "value": "HeadPitch", "label": "Head Pitch" }, { "value": "LShoulderPitch", "label": "Left Shoulder Pitch" }, { "value": "LShoulderRoll", "label": "Left Shoulder Roll" }, { "value": "LElbowYaw", "label": "Left Elbow Yaw" }, { "value": "LElbowRoll", "label": "Left Elbow Roll" }, { "value": "RShoulderPitch", "label": "Right Shoulder Pitch" }, { "value": "RShoulderRoll", "label": "Right Shoulder Roll" }, { "value": "RElbowYaw", "label": "Right Elbow Yaw" }, { "value": "RElbowRoll", "label": "Right Elbow Roll" } ] } ], "implementation": { "topic": "/naoqi_driver/joint_states", "messageType": "sensor_msgs/JointState", "mode": "subscribe" } }, { "id": "get_touch_sensors", "name": "Get Touch Sensors", "description": "Monitor all tactile sensors on head and hands", "category": "sensors", "parameters": [ { "name": "sensor_type", "type": "select", "description": "Type of touch sensors to monitor", "required": false, "options": [ { "value": "all", "label": "All Touch Sensors" }, { "value": "head", "label": "Head Touch Only" }, { "value": "hands", "label": "Hand Touch Only" } ], "default": "all" } ], "implementation": { "topics": [ "/naoqi_driver/head_touch", "/naoqi_driver/hand_touch" ], "messageTypes": [ "naoqi_bridge_msgs/HeadTouch", "naoqi_bridge_msgs/HandTouch" ], "mode": "subscribe" } }, { "id": "get_sonar_distance", "name": "Get Sonar Distance", "description": "Read ultrasonic distance sensors for obstacle detection", "category": "sensors", "parameters": [ { "name": "sensor_side", "type": "select", "description": "Which sonar sensor to read", "required": false, "options": [ { "value": "both", "label": "Both Sensors" }, { "value": "left", "label": "Left Sensor Only" }, { "value": "right", "label": "Right Sensor Only" } ], "default": "both" }, { "name": "min_range", "type": "number", "description": "Minimum detection range in meters", "required": false, "min": 0.1, "max": 1.0, "default": 0.25, "step": 0.05 }, { "name": "max_range", "type": "number", "description": "Maximum detection range in meters", "required": false, "min": 1.0, "max": 3.0, "default": 2.55, "step": 0.05 } ], "implementation": { "topics": [ "/naoqi_driver/sonar/left", "/naoqi_driver/sonar/right" ], "messageType": "sensor_msgs/Range", "mode": "subscribe" } }, { "id": "get_imu_data", "name": "Get IMU Data", "description": "Read inertial measurement unit data (acceleration, gyroscope, orientation)", "category": "sensors", "parameters": [ { "name": "data_type", "type": "select", "description": "Type of IMU data to monitor", "required": false, "options": [ { "value": "all", "label": "All IMU Data" }, { "value": "orientation", "label": "Orientation Only" }, { "value": "acceleration", "label": "Linear Acceleration" }, { "value": "angular_velocity", "label": "Angular Velocity" } ], "default": "all" } ], "implementation": { "topic": "/naoqi_driver/imu", "messageType": "sensor_msgs/Imu", "mode": "subscribe" } }, { "id": "get_camera_image", "name": "Get Camera Image", "description": "Capture image from robot's cameras", "category": "sensors", "parameters": [ { "name": "camera", "type": "select", "description": "Which camera to use", "required": true, "options": [ { "value": "front", "label": "Front Camera" }, { "value": "bottom", "label": "Bottom Camera" } ], "default": "front" }, { "name": "resolution", "type": "select", "description": "Image resolution", "required": false, "options": [ { "value": "160x120", "label": "QQVGA (160x120)" }, { "value": "320x240", "label": "QVGA (320x240)" }, { "value": "640x480", "label": "VGA (640x480)" } ], "default": "320x240" }, { "name": "fps", "type": "number", "description": "Frames per second", "required": false, "min": 1, "max": 30, "default": 15, "step": 1 } ], "implementation": { "topic": "/naoqi_driver/camera/{{camera}}/image_raw", "messageType": "sensor_msgs/Image", "mode": "subscribe" } }, { "id": "get_battery_status", "name": "Get Battery Status", "description": "Monitor robot battery level and charging status", "category": "sensors", "parameters": [], "implementation": { "topic": "/naoqi_driver/battery", "messageType": "sensor_msgs/BatteryState", "mode": "subscribe" } }, { "id": "detect_obstacle", "name": "Detect Obstacle", "description": "Check for obstacles using sonar sensors with customizable thresholds", "category": "sensors", "parameters": [ { "name": "detection_distance", "type": "number", "description": "Distance threshold for obstacle detection (meters)", "required": true, "min": 0.1, "max": 2.0, "default": 0.5, "step": 0.1 }, { "name": "sensor_side", "type": "select", "description": "Which sensors to use for detection", "required": false, "options": [ { "value": "both", "label": "Both Sensors" }, { "value": "left", "label": "Left Sensor Only" }, { "value": "right", "label": "Right Sensor Only" } ], "default": "both" } ], "implementation": { "topics": [ "/naoqi_driver/sonar/left", "/naoqi_driver/sonar/right" ], "messageType": "sensor_msgs/Range", "mode": "subscribe", "processing": "obstacle_detection" } }, { "id": "monitor_fall_detection", "name": "Monitor Fall Detection", "description": "Monitor robot stability using IMU data to detect potential falls", "category": "sensors", "parameters": [ { "name": "tilt_threshold", "type": "number", "description": "Maximum tilt angle before fall alert (degrees)", "required": false, "min": 10, "max": 45, "default": 25, "step": 5 }, { "name": "acceleration_threshold", "type": "number", "description": "Acceleration threshold for impact detection (m/s²)", "required": false, "min": 5, "max": 20, "default": 10, "step": 1 } ], "implementation": { "topic": "/naoqi_driver/imu", "messageType": "sensor_msgs/Imu", "mode": "subscribe", "processing": "fall_detection" } }, { "id": "wait_for_touch", "name": "Wait for Touch", "description": "Wait for user to touch a specific sensor before continuing", "category": "sensors", "parameters": [ { "name": "sensor_location", "type": "select", "description": "Which sensor to wait for", "required": true, "options": [ { "value": "head_front", "label": "Head Front" }, { "value": "head_middle", "label": "Head Middle" }, { "value": "head_rear", "label": "Head Rear" }, { "value": "left_hand", "label": "Left Hand" }, { "value": "right_hand", "label": "Right Hand" }, { "value": "any_head", "label": "Any Head Sensor" }, { "value": "any_hand", "label": "Any Hand Sensor" }, { "value": "any_touch", "label": "Any Touch Sensor" } ], "default": "head_front" }, { "name": "timeout", "type": "number", "description": "Maximum time to wait for touch (seconds, 0 = infinite)", "required": false, "min": 0, "max": 300, "default": 30, "step": 5 } ], "implementation": { "topics": [ "/naoqi_driver/head_touch", "/naoqi_driver/hand_touch" ], "messageTypes": [ "naoqi_bridge_msgs/HeadTouch", "naoqi_bridge_msgs/HandTouch" ], "mode": "wait_for_condition", "condition": "touch_detected" } } ], "sensorSpecifications": { "touchSensors": { "head": { "locations": ["front", "middle", "rear"], "sensitivity": "capacitive", "responseTime": "< 50ms" }, "hands": { "locations": ["left", "right"], "sensitivity": "capacitive", "responseTime": "< 50ms" } }, "sonarSensors": { "count": 2, "locations": ["left", "right"], "minRange": "0.25m", "maxRange": "2.55m", "fieldOfView": "60°", "frequency": "40kHz" }, "cameras": { "front": { "resolution": "640x480", "maxFps": 30, "fieldOfView": "60.9° x 47.6°" }, "bottom": { "resolution": "640x480", "maxFps": 30, "fieldOfView": "60.9° x 47.6°" } }, "imu": { "accelerometer": { "range": "±2g", "sensitivity": "high" }, "gyroscope": { "range": "±500°/s", "sensitivity": "high" }, "magnetometer": { "available": false } }, "joints": { "count": 25, "encoderResolution": "12-bit", "positionAccuracy": "±0.1°" } }, "dataTypes": { "jointState": { "position": "radians", "velocity": "radians/second", "effort": "arbitrary units" }, "imu": { "orientation": "quaternion", "angularVelocity": "radians/second", "linearAcceleration": "m/s²" }, "range": { "distance": "meters", "minRange": "meters", "maxRange": "meters" }, "image": { "encoding": "rgb8", "width": "pixels", "height": "pixels" } }, "safety": { "fallDetection": { "enabled": true, "defaultThreshold": "25°" }, "obstacleDetection": { "enabled": true, "safeDistance": "0.3m" }, "batteryMonitoring": { "lowBatteryWarning": "20%", "criticalBatteryShutdown": "5%" } } }