3 #include <jsk_topic_tools/rosparam_utils.h> 
   12     DiagnosticNodelet::onInit();
 
   13     pub_ = advertiseCamera(*pnh_, 
"image", 1);
 
   15     dynamic_reconfigure::Server<jsk_perception::VirtualCameraMonoConfig>::CallbackType 
f =
 
   17     srv_ = boost::make_shared<dynamic_reconfigure::Server<jsk_perception::VirtualCameraMonoConfig> >(*pnh_);
 
   20     pnh_->param(
"frame_id", 
trans_.
frame_id_, std::string(
"/elevator_inside_panel"));
 
   24     std::vector<double> initial_pos, initial_rot;
 
   25     if (jsk_topic_tools::readVectorParameter(*pnh_, 
"initial_pos", initial_pos)) {
 
   26       trans_.
setOrigin(tf::Vector3(initial_pos[0], initial_pos[1], initial_pos[2]));
 
   31     if (jsk_topic_tools::readVectorParameter(*pnh_, 
"initial_rot", initial_rot)) {
 
   41     geometry_msgs::Point32 pt;
 
   42     pt.x=0, pt.y=1, pt.z=0; 
poly_.polygon.points.push_back(pt);
 
   43     pt.x=0, pt.y=-1, pt.z=0; 
poly_.polygon.points.push_back(pt);
 
   44     pt.x=0, pt.y=-1, pt.z=-1; 
poly_.polygon.points.push_back(pt);
 
   45     pt.x=0, pt.y=1, pt.z=-1; 
poly_.polygon.points.push_back(pt);
 
   56     boost::mutex::scoped_lock(mutex_);
 
   57     switch (
config.interpolation_method) {
 
   74         ROS_ERROR(
"Invalid interpolation method: %d", 
config.interpolation_method);
 
   81     ROS_INFO(
"Subscribing to image topic");
 
   85     jsk_topic_tools::warnNoRemap(names);
 
   90     ROS_INFO(
"Unsubscibing from image topic");
 
   95                const sensor_msgs::CameraInfoConstPtr& info_msg)
 
   97     vital_checker_->poke();
 
  102       image = cv_ptr->image;
 
  105       ROS_ERROR(
"[virtual_camera_mono] Failed to convert image");
 
  116     cv::Mat outimage = image.clone();
 
  118       ROS_DEBUG(
"publish image and transform.");
 
  119       sensor_msgs::CameraInfo virtual_info = *
info_msg;
 
  120       cv_ptr->image = outimage;
 
  121       sensor_msgs::Image::Ptr 
img_msg = cv_ptr->toImageMsg();
 
  139                                  tf->transform.translation.y,
 
  140                                  tf->transform.translation.z));
 
  142                                       tf->transform.rotation.z, 
tf->transform.rotation.w));
 
  152       std::vector<tf::Point> target_poly, target_poly_translated;
 
  153       for(std::vector<geometry_msgs::Point32>::iterator pit=poly.polygon.points.begin(); pit != poly.polygon.points.end(); pit++) {
 
  154         geometry_msgs::PointStamped 
point, cpoint, vpoint;
 
  155         point.point.x = pit->x, 
point.point.y = pit->y, 
point.point.z = pit->z;
 
  156         point.header = poly.header;
 
  160         tf::Vector3 vpt_vec = trans.
inverse() * tf::Vector3(vpoint.point.x, vpoint.point.y, vpoint.point.z);
 
  163         target_poly.push_back(
tf::Point(cpoint.point.x, cpoint.point.y, cpoint.point.z));
 
  164         target_poly_translated.push_back(
tf::Point(vpt_vec.x(),vpt_vec.y(),vpt_vec.z()));
 
  168       cv::Point2f src_pnt[4], dst_pnt[4];
 
  169       for(
int i = 0; 
i < 4; 
i++) {
 
  170         cv::Point3d xyz(target_poly[
i].
x(),target_poly[
i].y(),target_poly[
i].z());
 
  171         cv::Point3d xyz_trans(target_poly_translated[
i].
x(),
 
  172                               target_poly_translated[
i].y(),
 
  173                               target_poly_translated[
i].z());
 
  174         cv::Point2d uv,uv_trans;
 
  176         src_pnt[
i] = cv::Point (uv.x, uv.y);
 
  178         dst_pnt[
i] = cv::Point (uv_trans.x, uv_trans.y);
 
  181       cv::Mat map_matrix = cv::getPerspectiveTransform (src_pnt, dst_pnt);
 
  185       ROS_WARN_THROTTLE(10, 
"[virtual_camera_mono] failed to transform image: %s", e.what());