image_proc.cpp
Go to the documentation of this file.
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 * 
00004 *  Copyright (c) 2008, Willow Garage, Inc.
00005 *  All rights reserved.
00006 * 
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 * 
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the Willow Garage nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 * 
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00034 
00035 #include <ros/ros.h>
00036 #include <nodelet/loader.h>
00037 #include <image_proc/advertisement_checker.h>
00038 
00039 int main(int argc, char **argv)
00040 {
00041   ros::init(argc, argv, "image_proc");
00042 
00043   // Check for common user errors
00044   if (ros::names::remap("camera") != "camera")
00045   {
00046     ROS_WARN("Remapping 'camera' has no effect! Start image_proc in the "
00047              "camera namespace instead.\nExample command-line usage:\n"
00048              "\t$ ROS_NAMESPACE=%s rosrun image_proc image_proc",
00049              ros::names::remap("camera").c_str());
00050   }
00051   if (ros::this_node::getNamespace() == "/")
00052   {
00053     ROS_WARN("Started in the global namespace! This is probably wrong. Start image_proc "
00054              "in the camera namespace.\nExample command-line usage:\n"
00055              "\t$ ROS_NAMESPACE=my_camera rosrun image_proc image_proc");
00056   }
00057 
00058   // Shared parameters to be propagated to nodelet private namespaces
00059   ros::NodeHandle private_nh("~");
00060   XmlRpc::XmlRpcValue shared_params;
00061   int queue_size;
00062   if (private_nh.getParam("queue_size", queue_size))
00063     shared_params["queue_size"] = queue_size;
00064 
00065   nodelet::Loader manager(false); // Don't bring up the manager ROS API
00066   nodelet::M_string remappings;
00067   nodelet::V_string my_argv;
00068 
00069   // Debayer nodelet, image_raw -> image_mono, image_color
00070   std::string debayer_name = ros::this_node::getName() + "_debayer";
00071   manager.load(debayer_name, "image_proc/debayer", remappings, my_argv);
00072 
00073   // Rectify nodelet, image_mono -> image_rect
00074   std::string rectify_mono_name = ros::this_node::getName() + "_rectify_mono";
00075   if (shared_params.valid())
00076     ros::param::set(rectify_mono_name, shared_params);
00077   manager.load(rectify_mono_name, "image_proc/rectify", remappings, my_argv);
00078 
00079   // Rectify nodelet, image_color -> image_rect_color
00080   // NOTE: Explicitly resolve any global remappings here, so they don't get hidden.
00081   remappings["image_mono"] = ros::names::resolve("image_color");
00082   remappings["image_rect"] = ros::names::resolve("image_rect_color");
00083   std::string rectify_color_name = ros::this_node::getName() + "_rectify_color";
00084   if (shared_params.valid())
00085     ros::param::set(rectify_color_name, shared_params);
00086   manager.load(rectify_color_name, "image_proc/rectify", remappings, my_argv);
00087 
00088   // Check for only the original camera topics
00089   ros::V_string topics;
00090   topics.push_back(ros::names::resolve("image_raw"));
00091   topics.push_back(ros::names::resolve("camera_info"));
00092   image_proc::AdvertisementChecker check_inputs(ros::NodeHandle(), ros::this_node::getName());
00093   check_inputs.start(topics, 60.0);
00094   
00095   ros::spin();
00096   return 0;
00097 }


image_proc
Author(s): Patrick Mihelich, Kurt Konolige, Jeremy Leibs
autogenerated on Fri Jan 3 2014 11:24:35