Code Monkey home page Code Monkey logo

hri_fullbody's Introduction

hri_fullbody

skeleton detection

Overview

hri_fullbody is a ROS4HRI-compatible 3D body pose estimation node.

It is built on top of Google Mediapipe 3D body pose estimation.

The node provides the 3D pose estimation for the detected humans in the scene, implementing a robust solution to self-occlusions.

This node can be used in two different modes: single body and multi-body. In the former case, the node performs the whole body detection pipeline, publishing information under the ROS4HRI naming convention regarding the body id (on the /humans/bodies/tracked topic), the body bounding box, and the jointstate of the body's skeleton. In the latter, the node only publishes jointstate information, expecting body detection to be performed by another node and subscribing to /humans/bodies/tracked to read the ids of the currently tracked bodies.

These two modes are required since Mediapipe body estimation is not able to estimate more than one body pose per frame. Therefore, in case we want more than one body pose estimated, the adopted strategy is to use a human bounding box detection algorithm to get a cropped image of each one of the humans in the scene, and then to run body pose estimation for each one of these images.

To estimate the body position, the node does not need a RGB-D camera, only RGB is required. However, using RGB-D camera provides a more accurate depth estimation.

Launch

roslaunch hri_fullbody hri_fullbody.launch <parameters>

ROS API

Parameters

Node parameters:

  • ~single_body (default: True): whether or not running in single body mode (see above for the single body vs multi-body modes).
  • ~use_depth (default: False): whether or not to rely on depth images for estimating body movement in the scene. When this is False, the node estimates the body position in the scene solving a P6P problem for the face and approximating the position from this, using pinhole camera model geometry.
  • ~stickman_debug (default: False): whether or not to publish frames representing the body skeleton directly using the raw results from mediapipe 3D body pose estimation. These debug frames are not oriented to align with the body links (ie, only the 3D location of the frame is useful).

hri_fullbody.launch parameters:

  • single_body: equivalent to ~single_body node parameter.
  • use_depth: equivalent to ~use_depth node parameter.
  • stickman_debug: equivalent to ~stickman_debug node parameter.
  • rgb_camera (default: /camera/color): rgb camera topics namespace.
  • rgb_camera_topic (default: $(arg rgb_camera)/image_raw): rgb camera raw image topic.
  • rgb_camera_info (default: $(arg rgb_camera)/camera_info): rgb camera info topic.
  • depth_camera (default: /camera/depth): depth camera topics namespace.
  • depth_camera_topic (default: $(arg depth_camera)/image_rect_raw): depth camera rectified raw image topic.
  • depth_camera_info (default: $(arg depth_camera)/camera_info): depth camera info topic.

Topics

hri_fullbody follows the ROS4HRI conventions (REP-155). In particular, refer to the REP to know the list and position of the 2D/3D skeleton points published by the node.

Subscribed topics

Single body mode only:
  • /image (sensor_msgs/Image): rgb image, processed for body detection and 3D body pose estimation.
Multi-body mode only:

Published topics

  • /humans/bodies/<body_id>/skeleton2d (hri_msgs/Skeleton2D): detected 2D skeleton points.
  • /humans/bodies/<body_id>/joint_states (sensor_msgs/JointState): skeleton joints state.
  • /humans/bodies/<body_id>/position: (geometry_msgs/PointStamped): filtered body position, representing the point between the hips of the tracked body. Only published when use_depth = True.
  • /humans/bodies/<body_id>/velocity: (geometry_msgs/TwistStamped): filtered body velocity. Only published when use_depth = True.
Single body mode only:
  • /humans/bodies/tracked (hri_msgs/IdsList): list of the bodies currently detected. There will be only one body in the list.
  • /humans/bodies/<body_id>/roi (sensor_msgs/RegionOfInterest): body bounding box in full rgb image coordinates.

Visualization

It is possible to visualize the results of the body pose estimation in rviz using the hri_rviz Skeleton plugin. A visualization example is reported in the image above.

hri_fullbody's People

Contributors

severin-lemaignan avatar manuelgitgomes avatar saracooper18 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.