mirror of
https://github.com/soconnor0919/robot-plugins.git
synced 2025-12-12 23:24:43 -05:00
368 lines
9.9 KiB
JSON
368 lines
9.9 KiB
JSON
{
|
|
"robotId": "turtlebot3-waffle",
|
|
"name": "TurtleBot3 Waffle",
|
|
"description": "Extended TurtleBot3 platform with additional sensors and computing power for advanced research applications",
|
|
"platform": "ROS2",
|
|
"version": "2.0.0",
|
|
"pluginApiVersion": "1.0",
|
|
"hriStudioVersion": ">=0.1.0",
|
|
"trustLevel": "official",
|
|
"category": "mobile-robot",
|
|
|
|
"manufacturer": {
|
|
"name": "ROBOTIS",
|
|
"website": "https://www.robotis.com/",
|
|
"support": "https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/"
|
|
},
|
|
|
|
"documentation": {
|
|
"mainUrl": "https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/",
|
|
"apiReference": "https://emanual.robotis.com/docs/en/platform/turtlebot3/ros2_manipulation/",
|
|
"wikiUrl": "https://wiki.ros.org/turtlebot3",
|
|
"videoUrl": "https://www.youtube.com/watch?v=rVM994ZhsEM"
|
|
},
|
|
|
|
"assets": {
|
|
"thumbnailUrl": "assets/turtlebot3-waffle/thumb.png",
|
|
"images": {
|
|
"main": "assets/turtlebot3-waffle/main.jpg",
|
|
"angles": {
|
|
"front": "assets/turtlebot3-waffle/front.png",
|
|
"side": "assets/turtlebot3-waffle/side.png",
|
|
"top": "assets/turtlebot3-waffle/top.png"
|
|
},
|
|
"logo": "assets/turtlebot3-waffle/logo.png"
|
|
},
|
|
"model": {
|
|
"format": "URDF",
|
|
"url": "https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/master/turtlebot3_description/urdf/turtlebot3_waffle.urdf"
|
|
}
|
|
},
|
|
|
|
"specs": {
|
|
"dimensions": {
|
|
"length": 0.281,
|
|
"width": 0.306,
|
|
"height": 0.141,
|
|
"weight": 1.8
|
|
},
|
|
"capabilities": [
|
|
"differential_drive",
|
|
"lidar",
|
|
"imu",
|
|
"odometry",
|
|
"camera",
|
|
"manipulation"
|
|
],
|
|
"maxSpeed": 0.26,
|
|
"batteryLife": 2.8
|
|
},
|
|
|
|
"ros2Config": {
|
|
"namespace": "turtlebot3",
|
|
"nodePrefix": "hri_studio",
|
|
"defaultTopics": {
|
|
"cmd_vel": "/cmd_vel",
|
|
"odom": "/odom",
|
|
"scan": "/scan",
|
|
"imu": "/imu",
|
|
"joint_states": "/joint_states",
|
|
"camera": "/camera/image_raw",
|
|
"camera_info": "/camera/camera_info"
|
|
}
|
|
},
|
|
|
|
"actions": [
|
|
{
|
|
"id": "move_velocity",
|
|
"name": "Set Velocity",
|
|
"description": "Control the robot's linear and angular velocity",
|
|
"category": "movement",
|
|
"icon": "navigation",
|
|
"timeout": 30000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"linear": {
|
|
"type": "number",
|
|
"minimum": -0.26,
|
|
"maximum": 0.26,
|
|
"default": 0,
|
|
"description": "Forward/backward velocity in m/s"
|
|
},
|
|
"angular": {
|
|
"type": "number",
|
|
"minimum": -1.82,
|
|
"maximum": 1.82,
|
|
"default": 0,
|
|
"description": "Rotational velocity in rad/s"
|
|
}
|
|
},
|
|
"required": ["linear", "angular"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "geometry_msgs/msg/Twist",
|
|
"topic": "/cmd_vel",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "transformToTwist"
|
|
},
|
|
"qos": {
|
|
"reliability": "reliable",
|
|
"durability": "volatile",
|
|
"history": "keep_last",
|
|
"depth": 1
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "move_to_pose",
|
|
"name": "Navigate to Position",
|
|
"description": "Navigate to a specific position on the map using autonomous navigation",
|
|
"category": "movement",
|
|
"icon": "target",
|
|
"timeout": 120000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"x": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "X coordinate in meters"
|
|
},
|
|
"y": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "Y coordinate in meters"
|
|
},
|
|
"theta": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "Final orientation in radians"
|
|
}
|
|
},
|
|
"required": ["x", "y", "theta"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "geometry_msgs/msg/PoseStamped",
|
|
"action": "/navigate_to_pose",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "transformToPoseStamped"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "capture_image",
|
|
"name": "Capture Image",
|
|
"description": "Capture an image from the robot's camera",
|
|
"category": "sensors",
|
|
"icon": "camera",
|
|
"timeout": 10000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string",
|
|
"default": "image_{timestamp}.jpg",
|
|
"description": "Filename for the captured image"
|
|
},
|
|
"quality": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 100,
|
|
"default": 85,
|
|
"description": "JPEG quality (1-100)"
|
|
}
|
|
},
|
|
"required": ["filename"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "sensor_msgs/msg/Image",
|
|
"topic": "/camera/image_raw",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "captureAndSaveImage"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "scan_environment",
|
|
"name": "Scan Environment",
|
|
"description": "Perform a 360-degree scan of the environment using LIDAR",
|
|
"category": "sensors",
|
|
"icon": "radar",
|
|
"timeout": 15000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"duration": {
|
|
"type": "number",
|
|
"minimum": 1.0,
|
|
"maximum": 10.0,
|
|
"default": 3.0,
|
|
"description": "Scan duration in seconds"
|
|
},
|
|
"save_data": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Save scan data to file"
|
|
}
|
|
},
|
|
"required": ["duration"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "sensor_msgs/msg/LaserScan",
|
|
"topic": "/scan",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "collectLaserScan"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "rotate_in_place",
|
|
"name": "Rotate in Place",
|
|
"description": "Rotate the robot by a specific angle",
|
|
"category": "movement",
|
|
"icon": "rotate-cw",
|
|
"timeout": 30000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"angle": {
|
|
"type": "number",
|
|
"minimum": -6.28,
|
|
"maximum": 6.28,
|
|
"default": 1.57,
|
|
"description": "Rotation angle in radians (positive = counterclockwise)"
|
|
},
|
|
"speed": {
|
|
"type": "number",
|
|
"minimum": 0.1,
|
|
"maximum": 1.0,
|
|
"default": 0.5,
|
|
"description": "Rotation speed as fraction of maximum"
|
|
}
|
|
},
|
|
"required": ["angle"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "geometry_msgs/msg/Twist",
|
|
"topic": "/cmd_vel",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "transformToRotation"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "follow_wall",
|
|
"name": "Follow Wall",
|
|
"description": "Follow a wall using LIDAR sensor feedback",
|
|
"category": "movement",
|
|
"icon": "move-3d",
|
|
"timeout": 60000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"side": {
|
|
"type": "string",
|
|
"enum": ["left", "right"],
|
|
"default": "right",
|
|
"description": "Which side wall to follow"
|
|
},
|
|
"distance": {
|
|
"type": "number",
|
|
"minimum": 0.2,
|
|
"maximum": 1.0,
|
|
"default": 0.3,
|
|
"description": "Desired distance from wall in meters"
|
|
},
|
|
"duration": {
|
|
"type": "number",
|
|
"minimum": 5.0,
|
|
"maximum": 120.0,
|
|
"default": 30.0,
|
|
"description": "Duration to follow wall in seconds"
|
|
}
|
|
},
|
|
"required": ["side", "distance", "duration"]
|
|
},
|
|
"ros2": {
|
|
"messageType": "geometry_msgs/msg/Twist",
|
|
"topic": "/cmd_vel",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "wallFollowing"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "emergency_stop",
|
|
"name": "Emergency Stop",
|
|
"description": "Immediately stop all robot movement and disable motors",
|
|
"category": "movement",
|
|
"icon": "octagon",
|
|
"timeout": 2000,
|
|
"retryable": false,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {},
|
|
"required": []
|
|
},
|
|
"ros2": {
|
|
"messageType": "geometry_msgs/msg/Twist",
|
|
"topic": "/cmd_vel",
|
|
"payloadMapping": {
|
|
"type": "static",
|
|
"payload": {
|
|
"linear": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
|
"angular": { "x": 0.0, "y": 0.0, "z": 0.0 }
|
|
}
|
|
},
|
|
"qos": {
|
|
"reliability": "reliable",
|
|
"durability": "volatile",
|
|
"history": "keep_last",
|
|
"depth": 1
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "get_robot_state",
|
|
"name": "Get Robot State",
|
|
"description": "Retrieve current robot position, orientation, and status",
|
|
"category": "sensors",
|
|
"icon": "info",
|
|
"timeout": 5000,
|
|
"retryable": true,
|
|
"parameterSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"include_sensor_data": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Include latest sensor readings in response"
|
|
}
|
|
},
|
|
"required": []
|
|
},
|
|
"ros2": {
|
|
"messageType": "nav_msgs/msg/Odometry",
|
|
"topic": "/odom",
|
|
"payloadMapping": {
|
|
"type": "transform",
|
|
"transformFn": "extractRobotState"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|