1 #include <geometry_msgs/PoseStamped.h>     2 #include <geometry_msgs/TwistStamped.h>     5 #include <std_msgs/Int8.h>    12 #include <visp_ros/BlobTracker.h>    14 #include <visp3/core/vpCameraParameters.h>    15 #include <visp3/core/vpHomogeneousMatrix.h>    16 #include <visp3/core/vpImageConvert.h>    17 #include <visp3/gui/vpDisplayGDI.h>    18 #include <visp3/gui/vpDisplayOpenCV.h>    19 #include <visp3/gui/vpDisplayX.h>    20 #include <visp3/visual_features/vpFeatureThetaU.h>    21 #include <visp3/visual_features/vpFeatureTranslation.h>    22 #include <visp3/vs/vpAdaptiveGain.h>    23 #include <visp3/vs/vpServo.h>    62 #elif defined( VISP_HAVE_GDI )    64 #elif defined( VISP_HAVE_OPENCV )    76   void display( 
const visp_ros::BlobTracker::ConstPtr &msg );
    77   void data_callback( 
const visp_ros::BlobTracker::ConstPtr &msg );
    80   VS( 
int argc, 
char **argv );
    81   virtual ~VS() { m_task.kill(); };
   145     ROS_ERROR( 
"Camera parameters are not set" );
   159   std::cout << 
"Desired pose: " << 
m_cdMo << std::endl;
   167   m_task.setServo( vpServo::EYEINHAND_CAMERA );
   168   m_task.setInteractionMatrixType( vpServo::CURRENT );
   183 #elif VISP_HAVE_OPENCV   189     std::cout << 
"Camera parameters:\n" << 
m_cam << std::endl;
   200     cv::Mat cv_frame                   = cv_image_ptr->image;
   210     std::vector< vpImagePoint > ips;
   211     for ( 
unsigned int i = 0; i < msg->blob_cogs.size(); i++ )
   213       vpImagePoint ip( msg->blob_cogs[i].i, msg->blob_cogs[i].j );
   215       std::stringstream ss;
   217       vpDisplay::displayText( 
m_I_grayscale, ip + vpImagePoint( -20, 20 ), ss.str(), vpColor::red );
   238     ROS_ERROR( 
"cv_bridge exception: %s", e.what() );
   246   geometry_msgs::TwistStamped camvel_msg;
   254     std::ostringstream strs;
   255     strs << 
"Receive a new pose" << std::endl;
   262     std::cout << 
"pbvs cMo:\n" << m_cMo << std::endl;
   263     std::cout << 
"pbvs cdMo:\n" << 
m_cdMo << std::endl;
   266     std::cout << 
"m_cdMc:\n" << 
m_cdMc << std::endl;
   271     std::cout << 
"v: " << 
m_v.t() << std::endl;
   276     camvel_msg.twist.linear.x  = 
m_v[0];
   277     camvel_msg.twist.linear.y  = 
m_v[1];
   278     camvel_msg.twist.linear.z  = 
m_v[2];
   279     camvel_msg.twist.angular.x = 
m_v[3];
   280     camvel_msg.twist.angular.y = 
m_v[4];
   281     camvel_msg.twist.angular.z = 
m_v[5];
   287     ROS_INFO( 
"Catch an exception: set vel to 0" );
   289     camvel_msg.twist.linear.x  = 0;
   290     camvel_msg.twist.linear.y  = 0;
   291     camvel_msg.twist.linear.z  = 0;
   292     camvel_msg.twist.angular.x = 0;
   293     camvel_msg.twist.angular.y = 0;
   294     camvel_msg.twist.angular.z = 0;
   302   if ( msg->data == 0 )
   307     geometry_msgs::TwistStamped camvel_msg;
   309     camvel_msg.twist.linear.x  = 0;
   310     camvel_msg.twist.linear.y  = 0;
   311     camvel_msg.twist.linear.z  = 0;
   312     camvel_msg.twist.angular.x = 0;
   313     camvel_msg.twist.angular.y = 0;
   314     camvel_msg.twist.angular.z = 0;
   317   else if ( msg->data == 1 )
   341   std::cout << 
"PBVS controller stopped..." << std::endl;
 void status_callback(const std_msgs::Int8ConstPtr &msg)
ros::Subscriber m_subData
void data_callback(const visp_ros::BlobTracker::ConstPtr &msg)
VS(int argc, char **argv)
vpFeatureTranslation m_s_t
vpHomogeneousMatrix toVispHomogeneousMatrix(const geometry_msgs::Transform &trans)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
vpAdaptiveGain m_lambda_adapt
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
vpImage< unsigned char > m_I_grayscale
void display(const visp_ros::BlobTracker::ConstPtr &msg)
void publish(const boost::shared_ptr< M > &message) const
vpHomogeneousMatrix m_cdMc
bool getParam(const std::string &key, std::string &s) const
CvImagePtr toCvCopy(const sensor_msgs::ImageConstPtr &source, const std::string &encoding=std::string())
ros::Publisher m_pubTwist
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
vpHomogeneousMatrix m_cMo
vpFeatureTranslation m_s_t_d
ros::Subscriber m_subStatus
int main(int argc, char **argv)
std::vector< std::vector< vpImagePoint > > ips_trajectory
ROSCPP_DECL void spinOnce()
vpHomogeneousMatrix m_cdMo