Update NAO6 ROS2 plugin definition

This commit is contained in:
HRIStudio Integration
2026-02-02 10:29:53 -05:00
parent f3db314c8a
commit d4742895a8

View File

@@ -8,20 +8,17 @@
"hriStudioVersion": ">=0.1.0", "hriStudioVersion": ">=0.1.0",
"trustLevel": "verified", "trustLevel": "verified",
"category": "humanoid-robot", "category": "humanoid-robot",
"manufacturer": { "manufacturer": {
"name": "SoftBank Robotics", "name": "SoftBank Robotics",
"website": "https://www.softbankrobotics.com/", "website": "https://www.softbankrobotics.com/",
"support": "https://developer.softbankrobotics.com/" "support": "https://developer.softbankrobotics.com/"
}, },
"documentation": { "documentation": {
"mainUrl": "https://developer.softbankrobotics.com/nao6/nao-documentation", "mainUrl": "https://developer.softbankrobotics.com/nao6/nao-documentation",
"apiReference": "https://github.com/ros-naoqi/naoqi_driver2", "apiReference": "https://github.com/ros-naoqi/naoqi_driver2",
"wikiUrl": "https://en.wikipedia.org/wiki/Nao_(robot)", "wikiUrl": "https://en.wikipedia.org/wiki/Nao_(robot)",
"videoUrl": "https://www.youtube.com/watch?v=nNbj2G3GmAg" "videoUrl": "https://www.youtube.com/watch?v=nNbj2G3GmAg"
}, },
"assets": { "assets": {
"thumbnailUrl": "assets/nao6-ros2/thumb.png", "thumbnailUrl": "assets/nao6-ros2/thumb.png",
"images": { "images": {
@@ -38,7 +35,6 @@
"url": "https://github.com/ros-naoqi/nao_robot/raw/master/nao_description/urdf/nao.urdf" "url": "https://github.com/ros-naoqi/nao_robot/raw/master/nao_description/urdf/nao.urdf"
} }
}, },
"specs": { "specs": {
"dimensions": { "dimensions": {
"length": 0.275, "length": 0.275,
@@ -60,28 +56,26 @@
"maxSpeed": 0.55, "maxSpeed": 0.55,
"batteryLife": 1.5 "batteryLife": 1.5
}, },
"ros2Config": { "ros2Config": {
"namespace": "nao", "namespace": "nao",
"nodePrefix": "hri_studio", "nodePrefix": "hri_studio",
"defaultTopics": { "defaultTopics": {
"cmd_vel": "/cmd_vel", "cmd_vel": "/cmd_vel",
"odom": "/odom", "odom": "/odom",
"joint_states": "/joint_states", "joint_states": "/naoqi_driver/joint_states",
"joint_angles": "/joint_angles", "joint_angles": "/joint_angles",
"camera_front": "/camera/front/image_raw", "camera_front": "/naoqi_driver/camera/front/image_raw",
"camera_bottom": "/camera/bottom/image_raw", "camera_bottom": "/naoqi_driver/camera/bottom/image_raw",
"imu": "/imu/torso", "imu": "/naoqi_driver/imu/torso",
"speech": "/speech", "speech": "/speech",
"bumper": "/bumper", "bumper": "/naoqi_driver/bumper",
"hand_touch": "/hand_touch", "hand_touch": "/naoqi_driver/hand_touch",
"head_touch": "/head_touch", "head_touch": "/naoqi_driver/head_touch",
"sonar_left": "/sonar/left", "sonar_left": "/naoqi_driver/sonar/left",
"sonar_right": "/sonar/right", "sonar_right": "/naoqi_driver/sonar/right",
"info": "/info" "info": "/naoqi_driver/info"
} }
}, },
"actions": [ "actions": [
{ {
"id": "walk_velocity", "id": "walk_velocity",
@@ -109,7 +103,10 @@
"description": "Angular velocity in rad/s" "description": "Angular velocity in rad/s"
} }
}, },
"required": ["linear", "angular"] "required": [
"linear",
"angular"
]
}, },
"ros2": { "ros2": {
"messageType": "geometry_msgs/msg/Twist", "messageType": "geometry_msgs/msg/Twist",
@@ -152,7 +149,9 @@
"description": "Duration to walk in seconds (0 = indefinite)" "description": "Duration to walk in seconds (0 = indefinite)"
} }
}, },
"required": ["speed"] "required": [
"speed"
]
}, },
"ros2": { "ros2": {
"messageType": "geometry_msgs/msg/Twist", "messageType": "geometry_msgs/msg/Twist",
@@ -160,8 +159,16 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"linear": { "x": "{{speed}}", "y": 0, "z": 0 }, "linear": {
"angular": { "x": 0, "y": 0, "z": 0 } "x": "{{speed}}",
"y": 0,
"z": 0
},
"angular": {
"x": 0,
"y": 0,
"z": 0
}
} }
} }
} }
@@ -192,7 +199,9 @@
"description": "Duration to walk in seconds (0 = indefinite)" "description": "Duration to walk in seconds (0 = indefinite)"
} }
}, },
"required": ["speed"] "required": [
"speed"
]
}, },
"ros2": { "ros2": {
"messageType": "geometry_msgs/msg/Twist", "messageType": "geometry_msgs/msg/Twist",
@@ -200,8 +209,16 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"linear": { "x": "-{{speed}}", "y": 0, "z": 0 }, "linear": {
"angular": { "x": 0, "y": 0, "z": 0 } "x": "-{{speed}}",
"y": 0,
"z": 0
},
"angular": {
"x": 0,
"y": 0,
"z": 0
}
} }
} }
} }
@@ -232,7 +249,9 @@
"description": "Duration to turn in seconds (0 = indefinite)" "description": "Duration to turn in seconds (0 = indefinite)"
} }
}, },
"required": ["speed"] "required": [
"speed"
]
}, },
"ros2": { "ros2": {
"messageType": "geometry_msgs/msg/Twist", "messageType": "geometry_msgs/msg/Twist",
@@ -240,8 +259,16 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"linear": { "x": 0, "y": 0, "z": 0 }, "linear": {
"angular": { "x": 0, "y": 0, "z": "{{speed}}" } "x": 0,
"y": 0,
"z": 0
},
"angular": {
"x": 0,
"y": 0,
"z": "{{speed}}"
}
} }
} }
} }
@@ -272,7 +299,9 @@
"description": "Duration to turn in seconds (0 = indefinite)" "description": "Duration to turn in seconds (0 = indefinite)"
} }
}, },
"required": ["speed"] "required": [
"speed"
]
}, },
"ros2": { "ros2": {
"messageType": "geometry_msgs/msg/Twist", "messageType": "geometry_msgs/msg/Twist",
@@ -280,8 +309,16 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"linear": { "x": 0, "y": 0, "z": 0 }, "linear": {
"angular": { "x": 0, "y": 0, "z": "-{{speed}}" } "x": 0,
"y": 0,
"z": 0
},
"angular": {
"x": 0,
"y": 0,
"z": "-{{speed}}"
}
} }
} }
} }
@@ -305,8 +342,16 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"linear": { "x": 0.0, "y": 0.0, "z": 0.0 }, "linear": {
"angular": { "x": 0.0, "y": 0.0, "z": 0.0 } "x": 0.0,
"y": 0.0,
"z": 0.0
},
"angular": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
} }
}, },
"qos": { "qos": {
@@ -334,7 +379,9 @@
"description": "Text to speak" "description": "Text to speak"
} }
}, },
"required": ["text"] "required": [
"text"
]
}, },
"ros2": { "ros2": {
"messageType": "std_msgs/msg/String", "messageType": "std_msgs/msg/String",
@@ -367,7 +414,13 @@
}, },
"emotion": { "emotion": {
"type": "string", "type": "string",
"enum": ["neutral", "happy", "sad", "excited", "calm"], "enum": [
"neutral",
"happy",
"sad",
"excited",
"calm"
],
"default": "neutral", "default": "neutral",
"description": "Emotional tone for speech" "description": "Emotional tone for speech"
}, },
@@ -379,7 +432,9 @@
"description": "Speech speed multiplier" "description": "Speech speed multiplier"
} }
}, },
"required": ["text"] "required": [
"text"
]
}, },
"ros2": { "ros2": {
"messageType": "std_msgs/msg/String", "messageType": "std_msgs/msg/String",
@@ -411,7 +466,9 @@
"description": "Volume level (0.0 = silent, 1.0 = maximum)" "description": "Volume level (0.0 = silent, 1.0 = maximum)"
} }
}, },
"required": ["volume"] "required": [
"volume"
]
}, },
"ros2": { "ros2": {
"messageType": "std_msgs/msg/Float32", "messageType": "std_msgs/msg/Float32",
@@ -452,7 +509,9 @@
"description": "Speech language" "description": "Speech language"
} }
}, },
"required": ["language"] "required": [
"language"
]
}, },
"ros2": { "ros2": {
"messageType": "std_msgs/msg/String", "messageType": "std_msgs/msg/String",
@@ -498,7 +557,10 @@
"description": "Movement speed (0.1 = slow, 1.0 = fast)" "description": "Movement speed (0.1 = slow, 1.0 = fast)"
} }
}, },
"required": ["yaw", "pitch"] "required": [
"yaw",
"pitch"
]
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed", "messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed",
@@ -506,8 +568,14 @@
"payloadMapping": { "payloadMapping": {
"type": "static", "type": "static",
"payload": { "payload": {
"joint_names": ["HeadYaw", "HeadPitch"], "joint_names": [
"joint_angles": ["{{yaw}}", "{{pitch}}"], "HeadYaw",
"HeadPitch"
],
"joint_angles": [
"{{yaw}}",
"{{pitch}}"
],
"speed": "{{speed}}" "speed": "{{speed}}"
} }
} }
@@ -526,7 +594,10 @@
"properties": { "properties": {
"arm": { "arm": {
"type": "string", "type": "string",
"enum": ["left", "right"], "enum": [
"left",
"right"
],
"default": "right", "default": "right",
"description": "Which arm to control" "description": "Which arm to control"
}, },
@@ -653,7 +724,10 @@
"description": "Movement speed (fraction of max)" "description": "Movement speed (fraction of max)"
} }
}, },
"required": ["joint_name", "angle"] "required": [
"joint_name",
"angle"
]
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed", "messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed",
@@ -697,7 +771,10 @@
"description": "Movement speed fraction" "description": "Movement speed fraction"
} }
}, },
"required": ["yaw", "pitch"] "required": [
"yaw",
"pitch"
]
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed", "messageType": "naoqi_bridge_msgs/msg/JointAnglesWithSpeed",
@@ -721,16 +798,21 @@
"properties": { "properties": {
"camera": { "camera": {
"type": "string", "type": "string",
"enum": ["front", "bottom"], "enum": [
"front",
"bottom"
],
"default": "front", "default": "front",
"description": "Camera to use" "description": "Camera to use"
} }
}, },
"required": ["camera"] "required": [
"camera"
]
}, },
"ros2": { "ros2": {
"messageType": "sensor_msgs/msg/Image", "messageType": "sensor_msgs/msg/Image",
"topic": "/camera/{camera}/image_raw", "topic": "/naoqi_driver/camera/{camera}/image_raw",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getCameraImage" "transformFn": "getCameraImage"
@@ -756,7 +838,7 @@
}, },
"ros2": { "ros2": {
"messageType": "sensor_msgs/msg/JointState", "messageType": "sensor_msgs/msg/JointState",
"topic": "/joint_states", "topic": "/naoqi_driver/joint_states",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getJointStates" "transformFn": "getJointStates"
@@ -782,7 +864,7 @@
}, },
"ros2": { "ros2": {
"messageType": "sensor_msgs/msg/Imu", "messageType": "sensor_msgs/msg/Imu",
"topic": "/imu/torso", "topic": "/naoqi_driver/imu/torso",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getImuData" "transformFn": "getImuData"
@@ -808,7 +890,7 @@
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/Bumper", "messageType": "naoqi_bridge_msgs/msg/Bumper",
"topic": "/bumper", "topic": "/naoqi_driver/bumper",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getBumperStatus" "transformFn": "getBumperStatus"
@@ -828,16 +910,21 @@
"properties": { "properties": {
"sensor_type": { "sensor_type": {
"type": "string", "type": "string",
"enum": ["hand", "head"], "enum": [
"hand",
"head"
],
"default": "hand", "default": "hand",
"description": "Touch sensor type to read" "description": "Touch sensor type to read"
} }
}, },
"required": ["sensor_type"] "required": [
"sensor_type"
]
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/HandTouch", "messageType": "naoqi_bridge_msgs/msg/HandTouch",
"topic": "/{sensor_type}_touch", "topic": "/naoqi_driver/{sensor_type}_touch",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getTouchSensors" "transformFn": "getTouchSensors"
@@ -857,16 +944,22 @@
"properties": { "properties": {
"sensor": { "sensor": {
"type": "string", "type": "string",
"enum": ["left", "right", "both"], "enum": [
"left",
"right",
"both"
],
"default": "both", "default": "both",
"description": "Sonar sensor to read" "description": "Sonar sensor to read"
} }
}, },
"required": ["sensor"] "required": [
"sensor"
]
}, },
"ros2": { "ros2": {
"messageType": "sensor_msgs/msg/Range", "messageType": "sensor_msgs/msg/Range",
"topic": "/sonar/{sensor}", "topic": "/naoqi_driver/sonar/{sensor}",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getSonarRange" "transformFn": "getSonarRange"
@@ -888,7 +981,7 @@
}, },
"ros2": { "ros2": {
"messageType": "naoqi_bridge_msgs/msg/RobotInfo", "messageType": "naoqi_bridge_msgs/msg/RobotInfo",
"topic": "/info", "topic": "/naoqi_driver/info",
"payloadMapping": { "payloadMapping": {
"type": "transform", "type": "transform",
"transformFn": "getRobotInfo" "transformFn": "getRobotInfo"