device_nodelet.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Roboception GmbH
3  * All rights reserved
4  *
5  * Author: Heiko Hirschmueller
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its contributors
18  * may be used to endorse or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef RC_VISARD_DRIVERNODELET_H
35 #define RC_VISARD_DRIVERNODELET_H
36 
37 #include <nodelet/nodelet.h>
38 #include <dynamic_reconfigure/server.h>
39 #include <rc_visard_driver/rc_visard_driverConfig.h>
40 #include <rc_common_msgs/Trigger.h>
41 
42 #include <GenApi/GenApi.h>
43 #include <rc_genicam_api/device.h>
45 
46 #include <thread>
47 #include <mutex>
48 #include <atomic>
49 
50 #include "protobuf2ros_stream.h"
51 #include "ThreadedStream.h"
52 
53 #include <rc_visard_driver/GetTrajectory.h>
54 
56 
58 
59 namespace rc
60 {
62 {
63 public:
64  DeviceNodelet();
65  virtual ~DeviceNodelet();
66 
67  virtual void onInit();
68 
71  bool depthAcquisitionTrigger(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
74  bool dynamicsStart(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
77  bool dynamicsStartSlam(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
80  bool dynamicsRestart(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
83  bool dynamicsRestartSlam(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
86  bool dynamicsStop(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
89  bool dynamicsStopSlam(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
92  bool dynamicsResetSlam(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
95  bool getSlamTrajectory(rc_visard_driver::GetTrajectory::Request& req,
96  rc_visard_driver::GetTrajectory::Response& resp);
99  bool saveSlamMap(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
102  bool loadSlamMap(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
105  bool removeSlamMap(rc_common_msgs::Trigger::Request& req, rc_common_msgs::Trigger::Response& resp);
106 
107 
108 private:
110  const std::string& stream, ros::NodeHandle& nh,
111  const std::string& frame_id_prefix, bool tfEnabled,
112  bool staticImu2CamTf);
113 
114  void initConfiguration(const std::shared_ptr<GenApi::CNodeMapRef>& nodemap,
115  rc_visard_driver::rc_visard_driverConfig& cfg, rcg::Device::ACCESS access);
116 
117  void reconfigure(rc_visard_driver::rc_visard_driverConfig& config, uint32_t level);
118 
119  void grab(std::string device, rcg::Device::ACCESS access);
120 
122 
125 
126 
127  dynamic_reconfigure::Server<rc_visard_driver::rc_visard_driverConfig>* reconfig;
128 
135 
137 
138  std::shared_ptr<rcg::Device> rcgdev;
139  std::shared_ptr<GenApi::CNodeMapRef> rcgnodemap;
140 
141  boost::recursive_mutex mtx;
144  rc_visard_driver::rc_visard_driverConfig config;
145  std::atomic_uint_least32_t level;
146 
147  std::thread imageThread;
149 
150  std::thread recoverThread;
151  std::atomic_bool stopRecoverThread;
156 
158 
176 
178  std::string tfPrefix;
179 
181  bool tfEnabled;
182 
187 };
188 }
189 
190 #endif
bool dynamicsStart(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Start Stereo INS.
ThreadedStream::Manager::Ptr dynamicsStreams
std::shared_ptr< RemoteInterface > Ptr
unsigned int totalIncompleteBuffers
bool dynamicsStopSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Stop SLAM (keep Stereo INS running)
void reconfigure(rc_visard_driver::rc_visard_driverConfig &config, uint32_t level)
void produce_connection_diagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
std::shared_ptr< ThreadedStream > Ptr
diagnostic_updater::Updater updater
diagnostics publishing
bool getSlamTrajectory(rc_visard_driver::GetTrajectory::Request &req, rc_visard_driver::GetTrajectory::Response &resp)
Get the Slam trajectory.
ros::ServiceServer slamLoadMapService
bool dynamicsStartSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Start Stereo INS+SLAM.
void grab(std::string device, rcg::Device::ACCESS access)
std::string dev_version
std::shared_ptr< Manager > Ptr
void produce_device_diagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
ros::ServiceServer depthAcquisitionTriggerService
wrapper for REST-API calls relating to rc_visard&#39;s dynamics interface
ros::ServiceServer dynamicsStartSlamService
bool dynamicsRestart(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Restart Stereo INS.
bool removeSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Remove the onboard SLAM map.
ros::ServiceServer getSlamTrajectoryService
bool perform_depth_acquisition_trigger
bool tfEnabled
should poses published also via tf?
bool dev_supports_depth_acquisition_trigger
virtual void onInit()
void initConfiguration(const std::shared_ptr< GenApi::CNodeMapRef > &nodemap, rc_visard_driver::rc_visard_driverConfig &cfg, rcg::Device::ACCESS access)
tf2_ros::StaticTransformBroadcaster tfStaticBroadcaster
std::atomic_bool imageSuccess
std::thread imageThread
unsigned int totalCompleteBuffers
ros::ServiceServer dynamicsStopSlamService
unsigned int totalImageReceiveTimeouts
ros::ServiceServer dynamicsRestartSlamService
static ThreadedStream::Ptr CreateDynamicsStreamOfType(rc::dynamics::RemoteInterface::Ptr rcdIface, const std::string &stream, ros::NodeHandle &nh, const std::string &frame_id_prefix, bool tfEnabled, bool staticImu2CamTf)
std::atomic_uint_least32_t level
rc_visard_driver::rc_visard_driverConfig config
void keepAliveAndRecoverFromFails()
ros::ServiceServer slamSaveMapService
ros::ServiceServer dynamicsStopService
std::atomic_bool imageRequested
std::string gev_packet_size
ros::Publisher trajPublisher
std::shared_ptr< rcg::Device > rcgdev
bool atLeastOnceSuccessfullyStarted
ros::ServiceServer dynamicsStartService
bool dynamicsResetSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Reset SLAM (keep Stereo INS running)
std::atomic_bool stopImageThread
ros::ServiceServer dynamicsRestartService
bool dynamicsStop(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Stop Stereo INS(+SLAM if running)
dynamic_reconfigure::Server< rc_visard_driver::rc_visard_driverConfig > * reconfig
bool dynamicsRestartSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Restart Stereo INS+SLAM.
bool depthAcquisitionTrigger(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Trigger stereo matching in mode &#39;SingleFrame&#39;.
std::atomic_bool stopRecoverThread
rc::dynamics::RemoteInterface::Ptr dynamicsInterface
std::string dev_macaddr
std::string dev_serialno
std::string gev_userid
std::thread recoverThread
bool saveSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Save the onboard SLAM map.
unsigned int totalConnectionLosses
std::shared_ptr< GenApi::CNodeMapRef > rcgnodemap
ros::ServiceServer dynamicsResetSlamService
boost::recursive_mutex mtx
std::string dev_ipaddr
virtual ~DeviceNodelet()
std::string tfPrefix
all frame names must be prefixed when using more than one rc_visard
bool loadSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Load the onboard SLAM map.
ros::ServiceServer slamRemoveMapService


rc_visard_driver
Author(s): Heiko Hirschmueller , Christian Emmerich , Felix Ruess
autogenerated on Sat Feb 13 2021 03:42:55