nodelet.cc
Go to the documentation of this file.
00001 // Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
00002 // All rights reserved.
00003 //
00004 // Software License Agreement (BSD License 2.0)
00005 //
00006 // Redistribution and use in source and binary forms, with or without
00007 // modification, are permitted provided that the following conditions
00008 // are met:
00009 //
00010 //  * Redistributions of source code must retain the above copyright
00011 //    notice, this list of conditions and the following disclaimer.
00012 //  * Redistributions in binary form must reproduce the above
00013 //    copyright notice, this list of conditions and the following
00014 //    disclaimer in the documentation and/or other materials provided
00015 //    with the distribution.
00016 //  * Neither the name of {copyright_holder} nor the names of its
00017 //    contributors may be used to endorse or promote products derived
00018 //    from this software without specific prior written permission.
00019 //
00020 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00021 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00022 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00023 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00024 // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00025 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00026 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00027 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00028 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00029 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00030 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00031 // POSSIBILITY OF SUCH DAMAGE.
00032 
00038 #include <string>
00039 #include <boost/thread.hpp>
00040 
00041 #include <ros/ros.h>
00042 #include <pluginlib/class_list_macros.h>
00043 #include <nodelet/nodelet.h>
00044 
00045 #include "velodyne_driver/driver.h"
00046 
00047 namespace velodyne_driver
00048 {
00049 
00050 class DriverNodelet: public nodelet::Nodelet
00051 {
00052 public:
00053 
00054   DriverNodelet():
00055     running_(false)
00056   {}
00057 
00058   ~DriverNodelet()
00059   {
00060     if (running_)
00061       {
00062         NODELET_INFO("shutting down driver thread");
00063         running_ = false;
00064         deviceThread_->join();
00065         NODELET_INFO("driver thread stopped");
00066       }
00067   }
00068 
00069 private:
00070 
00071   virtual void onInit(void);
00072   virtual void devicePoll(void);
00073 
00074   volatile bool running_;               
00075   boost::shared_ptr<boost::thread> deviceThread_;
00076 
00077   boost::shared_ptr<VelodyneDriver> dvr_; 
00078 };
00079 
00080 void DriverNodelet::onInit()
00081 {
00082   // start the driver
00083   dvr_.reset(new VelodyneDriver(getNodeHandle(), getPrivateNodeHandle()));
00084 
00085   // spawn device poll thread
00086   running_ = true;
00087   deviceThread_ = boost::shared_ptr< boost::thread >
00088     (new boost::thread(boost::bind(&DriverNodelet::devicePoll, this)));
00089 }
00090 
00092 void DriverNodelet::devicePoll()
00093 {
00094   while(ros::ok())
00095     {
00096       // poll device until end of file
00097       running_ = dvr_->poll();
00098       if (!running_)
00099         ROS_ERROR_THROTTLE(1.0, "DriverNodelet::devicePoll - Failed to poll device.");
00100     }
00101   running_ = false;
00102 }
00103 
00104 } // namespace velodyne_driver
00105 
00106 // Register this plugin with pluginlib.  Names must match nodelet_velodyne.xml.
00107 //
00108 // parameters are: class type, base class type
00109 PLUGINLIB_EXPORT_CLASS(velodyne_driver::DriverNodelet, nodelet::Nodelet)


velodyne_driver
Author(s): Jack O'Quin, Patrick Beeson, Michael Quinlan, Yaxin Liu
autogenerated on Wed Jul 3 2019 19:32:21