Skip to content

Hubo ROS API (Design)

calderpg edited this page Apr 19, 2013 · 17 revisions

Hubo-ROS ROS API

Overview

Desired functionality:

  1. Report the state of Hubo (joints, motors, sensors, and system)

  2. Provide joint level position setting (single-joint and multi-joint)

  3. Provide trajectory-level control (single limb and whole-body)

  4. Provide online and offline kinematic (FK, per-limb IK, and whole-body IK)

  5. Provide low-level input to ZMP walking controller

  6. Provide high-level input to ZMP walking controller

  7. Provide commands to the hands

Usability goals & design conventions:

Wherever possible, the Hubo API should match the API available for the PR2 to provide ease-of-use and easy migration from PR2-targeted code. In particular, message, service, and actionlib conventions should be followed as closely as possible to match existing documentation and example code.

Report Hubo state

Joint states

(Message) [hubo_controller/<joint name>/state] {sensor_msgs/JointState}

(Message) [hubo_controller/l_arm/state] {sensor_msgs/JointState}

(Message) [hubo_controller/r_arm/state] {sensor_msgs/JointState}

(Message) [hubo_controller/full_body/state] {sensor_msgs/JointState}

Motor states

(Message) [hubo_controller/<motor name>/status] {hubo_msgs/MotorStatus} *Message not defined

Sensor states

(Message) F-T sensors, "IMU" sensors, (?)

System state

Environmental

(Message) Temperatures, other environmental sensors (?)

Power system

(Message) Raw voltages, battery information, estimated battery life

Network state

(Message(s)) IP address(s), link statistics, (?)

Calibration

(Message) Calibration states of all joints

(Service call) Command calibration (?)

TF Tree

(TF Frames) Complete tree for **all** links, joints, cameras (physical link + optical frame), and sensors.

Robot State

(RobotState) Robot state for Rviz

Provide joint level position setting

Joint commands

(Actionlib) [hubo_controller/<joint name>/command_action] {hubo_msgs/JointCommandAction}

(Actionlib) [hubo_controller/l_arm/command_action] {hubo_msgs/JointCommandAction}

(Actionlib) [hubo_controller/r_arm/command_action] {hubo_msgs/JointCommandAction}

(Actionlib) [hubo_controller/full_body/command_action] {hubo_msgs/JointCommandAction}

Provide trajectory control

Per-arm trajectory control

(Actionlib call) [hubo_controller/l_arm/joint_trajectory_action] {hubo_msgs/JointTrajectoryAction}

(Actionlib call) [hubo_controller/r_arm/joint_trajectory_action] {hubo_msgs/JointTrajectoryAction}

Head trajectory control

(Actionlib call) [hubo_controller/head/joint_trajectory_action] {hubo_msgs/JointTrajectoryAction}

Whole-body trajectory control

(Actionlib call) [hubo_controller/full_body/joint_trajectory_action] {hubo_msgs/JointTrajectoryAction}

Kinematics

Per-limb forward kinematics

(Service call) [hubo_kinematics/l_arm/get_fk] {kinematics_msgs/GetPositionFK}

(service call) [hubo_kinematics/r_arm/get_fk] {kinematics_msgs/GetPositionFK}

Whole-body forward kinematics

(Service call) [hubo_kinematics/full_body/get_fk] {kinematics_msgs/GetPositionFK}

Per-limb inverse kinematics

(Service call) [hubo_kinematics/l_arm/get_ik] {kinematics_msgs/GetPositionIK}

(Service call) [hubo_kinematics/r_arm/get_ik] {kinematics_msgs/GetPositionIK}

Whole-body inverse kinematics

(Service call) [hubo_kinematics/full_body/get_ik] {kinematics_msgs/GetPositionIK}

Walking controller (low-level)

[Suggested functionality]

Check footstep path for feasibility

(Service call) [hubo_walk/check_footsteps] {hubo_walk_msgs/CheckFootstepPath} *Service not defined

Follow footstep path

(Actionlib call) [hubo_walk/follow_footsteps_action] {hubo_walk_msgs/FootstepPath} *Action not defined

Walking controller (high-level)

[Suggested functionality]

Walk to position & orientation

(Actionlib call) [hubo_walk/walk_to_action] {hubo_walk_msgs/WalkingGoal} *Action not defined

Walk to position & orientation w/o environment collisions

(Actionlib call) [hubo_walk/walk_to_action_collision_free] {hubo_walk_msgs/WalkingGoal} *Action not defined

Hands

(Actionlib) Control the hands (force/position?) *Action not defined