[Documentation] [TitleIndex] [WordIndex

  Show EOL distros: 

Package Summary

Skeleton Tracker Teleop Package for the Pi Robot Project

Package Summary

Skeleton Tracker Teleop Package for the Pi Robot Project

Package Summary

Skeleton Tracker Teleop Package for the Pi Robot Project

Package Summary

Skeleton Tracker Teleop Package for the Pi Robot Project

Package Summary

Skeleton Tracker Teleop Package for the Pi Robot Project

  • Maintainer status: end-of-life (No longer developed or maintained.)
  • Maintainer: Patrick Goebel <patrick AT pirobot DOT org>
  • Author: Patrick Goebel <patrick AT pirobot DOT org>
  • License: BSD
  • Source: git https://github.com/pirobot/pi_tracker.git (branch: indigo-devel)

End of Life

The pi_tracker package was created a long time ago as an entry for the early ROS 3D contest and I don't have plans to develop it in the future.

Note that the pi_tracker package depends on either the openni_tracker package or the skeleton_markers package. Under ROS Indigo, I have only had success using a Microsoft Kinect with these package. It seems the Asus Xtion Pro Live can be difficult to get working with skeleton tracking on newer USB 3.0 machines and Ubuntu 14.04.

Overview

The pi_tracker package uses four interrelated but independent ROS nodes that communicate over ROS topics and services:

Skeleton Tracker Node (from the skeleton_markers package)

skeleton_tracker

(This description is copied from the skeleton_markers package.) A ROS node written in C++ for talking to the OpenNI skeleton tracking API and publishing the joint configuration and tf frames. Based on Taylor Veltrop's teleop_kinect.cpp source at veltrobot_teleop.

Published Topics

/skeleton (pi_tracker/Skeleton)

Parameters

~tracking_rate (int, default: 1) ~fixed_frame (string, default: "openni_depth")

Provided tf Transforms

fixed_framehead fixed_frameneck fixed_frametorso fixed_frameleft_shoulder fixed_frameleft_elbow fixed_frameleft_hand fixed_frameright_shoulder fixed_frameright elbow fixed_frameright_hand fixed_frameleft_hip fixed_frameleft_knee fixed_frameleft_foot fixed_frameright_hip fixed_frameright_knee fixed_frameright_foot

Tracker Command Node

tracker_command

A ROS node written in Python for detecting gesture commands and connecting to services that control the robot. New gestures and commands can be easily added by defining simple functions over the joint configurations.

Subscribed Topics

/skeleton (pi_tracker/Skeleton)

Parameters

~command_rate (int, default: 1)

Tracker Command Required Services

Tracker command requires one or more services from each node it commands. In its current form, the tracker command node sends simple string commands to control nodes via their set_command service. For example, sending the command "STOP" to the tracker_base_controller node (see below) tells the base to stop moving.

Tracker Base Controller Node

tracker_base_controller

A ROS node written in Python for controlling the movements of a wheeled robot (holonomic or non-holonomic) using either the hands or the feet.

Subscribed Topics

/skeleton (pi_tracker/Skeleton)

Published Topics

/cmd_vel (geometry_msgs/Twist)

Services

~set_command (pi_tracker/SetCommand)

Parameters

~base_controller_rate (int, default: 1) ~max_drive_speed (double, default: 0.3) ~maximum_rotation_speed (double, default: 0.5) ~base_control_side (string, default: "right") ~scale_drive_speed (double, default: 1.0) ~scale_rotation_speed (double, default: 1.0) ~holonomic (boolean, default: False)

Tracker Joint Controller Node

tracker_joint_controller

A ROS node written in Python for teleoperating the joints of a multi-jointed robot, typically humanoid in form with arms, torso and a pan and tilt head.

Subscribed Topics

/skeleton (pi_tracker/Skeleton)

Published Topics

/cmd_joints (sensor_msgs/JointState)

Services

~set_command (pi_tracker/SetCommand)

Parameters

~joint_controller_rate (int, default: 5) ~default_joint_speed (double, default: 0.5) ~use_real_robot (boolean, default: True) ~skel_to_joint_map (dict, default: Based on URDF for Pi Robot. Adjust for your robot!)

Example Launch File

It is recommended to split the launch process into two launch files. The first launch file brings up the Kinect, robot state publisher and skeleton publisher. The second launch file fires up the various tracker nodes. This way you can play with variations on the tracker nodes without having to disconnect and reconnect to the Kinect camera. Also, note that neither launch file brings up a real joint controller or base controller since these will depend on your hardware.

Sample Skeleton/Kinect Launch File:

<launch>
  <arg name="fixed_frame" value="camera_depth_frame" />
 
  <param name="/use_sim_time" value="False" />
 

  <arg name="debug" value="False" />
  <arg name="launch_prefix" value="xterm -e gdb --args" />
 
  <param name="robot_description" command="$(find xacro)/xacro.py '$(find pi_tracker)/urdf/pi_robot/pi_robot_with_two_arms.xacro'" />
 
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher">
    <param name="publish_frequency" value="20.0"/>
  </node>
    
  <include file="$(find rgbd_launch)/launch/kinect_frames.launch" />

  <group if="$(arg debug)">
    <node launch-prefix="$(arg launch_prefix)" pkg="skeleton_markers" name="skeleton_tracker" type="skeleton_tracker" output="screen"    >
      <param name="fixed_frame" value="$(arg fixed_frame)" />
      <param name="load_filepath" value="$(find pi_tracker)/params/SamplesConfigNewOpenNI.xml" />
    </node>
  </group>
  <group unless="$(arg debug)">
    <node name="skeleton_tracker" pkg="skeleton_markers" type="skeleton_tracker">
      <param name="fixed_frame" value="$(arg fixed_frame)" />
      <param name="load_filepath" value="$(find pi_tracker)/params/SamplesConfigNewOpenNI.xml" />
    </node>
  </group>
</launch>

Sample Tracker Nodes Launch File:

<launch>
    <node name="tracker_command" pkg="pi_tracker" type="tracker_command.py" output="screen">
        <rosparam command="load" file="$(find pi_tracker)/params/tracker_params.yaml" />
    </node>
    <node name="tracker_base_controller" pkg="pi_tracker" type="tracker_base_controller.py" output="screen">
        <rosparam command="load" file="$(find pi_tracker)/params/tracker_params.yaml" />
    </node>
    <node name="tracker_joint_controller" pkg="pi_tracker" type="tracker_joint_controller.py" output="screen">
        <rosparam command="load" file="$(find pi_tracker)/params/tracker_params.yaml" />
    </node>
</launch>

Example YAML File

command_rate: 2
tracking_rate: 2
base_controller_rate: 2
joint_controller_rate: 2
default_joint_speed: 0.6
max_drive_speed: 0.3
max_rotation_speed: 0.3
base_control_side: right

use_real_robot: True

# Use these values for a typical non-holonomic robot.
scale_drive_speed: 1.0
scale_rotation_speed: 1.0
reverse_rotation: False
holonomic: False

# Use the following scale factors for the Rovio.
#scale_drive_speed: 4.0
#scale_rotation_speed: 0.4
#reverse_rotation: True
#holonomic: True

fixed_frame: openni_depth

skel_to_joint_map: {
   head: head_pan_joint,
   neck: head_tilt_joint,
   torso: torso_joint,
   left_shoulder: left_shoulder_lift_joint,
   left_elbow: left_elbow_joint,
   left_hand: left_hand_joint,
   right_shoulder: right_shoulder_joint,
   right_elbow: right_elbow_joint,
   right_hand: right_hand_joint,
   left_hip: no_joint,
   left_knee: no_joint,
   left_foot: no_joint,
   right_hip: no_joint,
   right_knee: no_joint,
   right_foot: no_joint
}


2019-07-20 13:00