00001 /* 00002 * MultiJointTrackerNode.h 00003 * 00004 * Author: roberto 00005 * 00006 * This is a modified implementation of the method for online estimation of kinematic structures described in our paper 00007 * "Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors" 00008 * (Martín-Martín and Brock, 2014). 00009 * This implementation can be used to reproduce the results of the paper and to be applied to new research. 00010 * The implementation allows also to be extended to perceive different information/models or to use additional sources of information. 00011 * A detail explanation of the method and the system can be found in our paper. 00012 * 00013 * If you are using this implementation in your research, please consider citing our work: 00014 * 00015 @inproceedings{martinmartin_ip_iros_2014, 00016 Title = {Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors}, 00017 Author = {Roberto {Mart\'in-Mart\'in} and Oliver Brock}, 00018 Booktitle = {Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems}, 00019 Pages = {2494-2501}, 00020 Year = {2014}, 00021 Location = {Chicago, Illinois, USA}, 00022 Note = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf}, 00023 Url = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf}, 00024 Projectname = {Interactive Perception} 00025 } 00026 * If you have questions or suggestions, contact us: 00027 * roberto.martinmartin@tu-berlin.de 00028 * 00029 * Enjoy! 00030 */ 00031 00032 #ifndef JOINT_TRACKER_NODE_H 00033 #define JOINT_TRACKER_NODE_H 00034 00035 #include <ros/ros.h> 00036 #include <tf/transform_broadcaster.h> 00037 00038 #include <std_srvs/Empty.h> 00039 #include "joint_tracker/publish_urdf.h" 00040 00041 #include <sensor_msgs/PointCloud2.h> 00042 #include <geometry_msgs/Pose.h> 00043 00044 #include <sensor_msgs/JointState.h> 00045 #include <std_msgs/String.h> 00046 00047 #include <message_filters/subscriber.h> 00048 #include <message_filters/time_synchronizer.h> 00049 00050 #include <pcl_ros/publisher.h> 00051 #include <pcl/io/io.h> 00052 #include <pcl/point_types.h> 00053 00054 #include <Eigen/StdVector> 00055 #include <Eigen/Geometry> 00056 00057 #include "joint_tracker/JointCombinedFilter.h" 00058 #include "joint_tracker/MultiJointTracker.h" 00059 00060 #include "omip_msgs/RigidBodyPosesAndVelsMsg.h" 00061 #include "omip_msgs/RigidBodyPoseAndVelMsg.h" 00062 00063 #include "omip_common/RecursiveEstimatorNodeInterface.h" 00064 #include "omip_common/OMIPTypeDefs.h" 00065 00066 #include <std_msgs/Float64.h> 00067 00068 namespace omip{ 00069 00070 class MultiJointTrackerNode : public RecursiveEstimatorNodeInterface<ks_measurement_ros_t, ks_state_ros_t, MultiJointTracker> 00071 { 00072 00073 public: 00074 00078 MultiJointTrackerNode(); 00079 00083 virtual ~MultiJointTrackerNode(); 00084 00088 void ReadParameters(); 00089 00095 virtual void measurementCallback(const boost::shared_ptr<ks_measurement_ros_t const> &poses_and_vels); 00096 00102 virtual void statePredictionCallback(const boost::shared_ptr<ks_state_ros_t const> & predicted_next_state){} 00103 00107 void ReadBag(){} 00108 00109 virtual bool publishURDF(joint_tracker::publish_urdf::Request& request, joint_tracker::publish_urdf::Response& response); 00110 00111 protected: 00112 00117 virtual void _publishState() const; 00118 00123 virtual void _publishPredictedMeasurement() const; 00124 00129 virtual void _PrintResults() const; 00130 00131 virtual void _generateURDF(std_msgs::String &urdf_string_msg, sensor_msgs::JointState &joint_state_msg) const; 00132 00133 ros::ServiceServer _urdf_pub_service; 00134 00135 double _sensor_fps; 00136 int _processing_factor; 00137 double _loop_period_ns; 00138 00139 00140 ros::Publisher _state_publisher_urdf; 00141 00142 ros::Publisher _state_publisher_joint_states; 00143 00144 ros::Publisher _state_publisher_rviz_markers; 00145 00146 int _min_joint_age_for_ee; 00147 00148 std::string _sr_path; 00149 }; 00150 } 00151 00152 #endif /* JOINT_TRACKER_NODE_H */