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 
129  std::string color_format;
130 
138 
139  std::shared_ptr<rcg::Device> rcgdev;
140  std::shared_ptr<GenApi::CNodeMapRef> rcgnodemap;
141 
142  boost::recursive_mutex mtx;
145  rc_visard_driver::rc_visard_driverConfig config;
146  std::atomic_uint_least32_t level;
147 
148  std::thread imageThread;
150 
151  std::thread recoverThread;
152  std::atomic_bool stopRecoverThread;
157 
159 
177 
179  std::string tfPrefix;
180 
182  bool tfEnabled;
183 
188 };
189 }
190 
191 #endif
rc::DeviceNodelet::~DeviceNodelet
virtual ~DeviceNodelet()
Definition: device_nodelet.cc:170
rc::DeviceNodelet::level
std::atomic_uint_least32_t level
Definition: device_nodelet.h:146
rc::DeviceNodelet::dev_macaddr
std::string dev_macaddr
Definition: device_nodelet.h:186
rc::DeviceNodelet::autostartDynamics
bool autostartDynamics
Definition: device_nodelet.h:176
rc::DeviceNodelet::dynamicsRestartService
ros::ServiceServer dynamicsRestartService
Definition: device_nodelet.h:165
rc::DeviceNodelet::color_format
std::string color_format
Definition: device_nodelet.h:129
rc::DeviceNodelet::atLeastOnceSuccessfullyStarted
bool atLeastOnceSuccessfullyStarted
Definition: device_nodelet.h:156
rc::DeviceNodelet::dev_serialno
std::string dev_serialno
Definition: device_nodelet.h:186
rc::DeviceNodelet::dynamicsStartSlamService
ros::ServiceServer dynamicsStartSlamService
Definition: device_nodelet.h:164
rc::DeviceNodelet::slamSaveMapService
ros::ServiceServer slamSaveMapService
Definition: device_nodelet.h:171
ros::Publisher
rc::DeviceNodelet::DeviceNodelet
DeviceNodelet()
Definition: device_nodelet.cc:143
rc::DeviceNodelet::slamRemoveMapService
ros::ServiceServer slamRemoveMapService
Definition: device_nodelet.h:173
rc::DeviceNodelet::autopublishTrajectory
bool autopublishTrajectory
Definition: device_nodelet.h:176
rc::DeviceNodelet::rcgnodemap
std::shared_ptr< GenApi::CNodeMapRef > rcgnodemap
Definition: device_nodelet.h:140
rc::DeviceNodelet::perform_depth_acquisition_trigger
bool perform_depth_acquisition_trigger
Definition: device_nodelet.h:137
rc::DeviceNodelet::totalImageReceiveTimeouts
unsigned int totalImageReceiveTimeouts
Definition: device_nodelet.h:187
rc::DeviceNodelet::mtx
boost::recursive_mutex mtx
Definition: device_nodelet.h:142
rc::DeviceNodelet::dev_version
std::string dev_version
Definition: device_nodelet.h:186
rc::DeviceNodelet::dynamicsResetSlam
bool dynamicsResetSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Reset SLAM (keep Stereo INS running)
Definition: dynamics_handlers.cc:159
rc::DeviceNodelet::dynamicsStopSlam
bool dynamicsStopSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Stop SLAM (keep Stereo INS running)
Definition: dynamics_handlers.cc:153
rc::DeviceNodelet::dynamicsRestartSlam
bool dynamicsRestartSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Restart Stereo INS+SLAM.
Definition: dynamics_handlers.cc:141
rc::DeviceNodelet::getSlamTrajectory
bool getSlamTrajectory(rc_visard_driver::GetTrajectory::Request &req, rc_visard_driver::GetTrajectory::Response &resp)
Get the Slam trajectory.
Definition: dynamics_handlers.cc:165
rc::DeviceNodelet::dynamicsStop
bool dynamicsStop(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Stop Stereo INS(+SLAM if running)
Definition: dynamics_handlers.cc:147
rc::DeviceNodelet::grab
void grab(std::string device, rcg::Device::ACCESS access)
Definition: device_nodelet.cc:1437
diagnostic_updater::Updater
rc::DeviceNodelet::reconfigure
void reconfigure(rc_visard_driver::rc_visard_driverConfig &config, uint32_t level)
Definition: device_nodelet.cc:799
rc::DeviceNodelet::maxNumRecoveryTrials
int maxNumRecoveryTrials
Definition: device_nodelet.h:155
rc::DeviceNodelet::slamLoadMapService
ros::ServiceServer slamLoadMapService
Definition: device_nodelet.h:172
rc::DeviceNodelet::dev_supports_depth_exposure_adapt_timeout
bool dev_supports_depth_exposure_adapt_timeout
Definition: device_nodelet.h:136
GenApi.h
rc::DeviceNodelet::onInit
virtual void onInit()
Definition: device_nodelet.cc:191
rc::DeviceNodelet::tfPrefix
std::string tfPrefix
all frame names must be prefixed when using more than one rc_visard
Definition: device_nodelet.h:179
rc::ThreadedStream::Ptr
std::shared_ptr< ThreadedStream > Ptr
Definition: ThreadedStream.h:62
rc::DeviceNodelet::iocontrol_avail
bool iocontrol_avail
Definition: device_nodelet.h:144
rc::DeviceNodelet::removeSlamMap
bool removeSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Remove the onboard SLAM map.
Definition: dynamics_handlers.cc:263
diagnostic_updater.h
rc::DeviceNodelet::dev_supports_wb
bool dev_supports_wb
Definition: device_nodelet.h:133
rc::DeviceNodelet::dynamicsStopSlamService
ros::ServiceServer dynamicsStopSlamService
Definition: device_nodelet.h:168
ros::ServiceServer
rc::dynamics::RemoteInterface::Ptr
std::shared_ptr< RemoteInterface > Ptr
rc::DeviceNodelet::recoverThread
std::thread recoverThread
Definition: device_nodelet.h:151
rc::DeviceNodelet::dynamicsRestartSlamService
ros::ServiceServer dynamicsRestartSlamService
Definition: device_nodelet.h:166
remote_interface.h
ThreadedStream.h
rc::DeviceNodelet::updater
diagnostic_updater::Updater updater
diagnostics publishing
Definition: device_nodelet.h:185
rc::DeviceNodelet::dev_supports_double_shot
bool dev_supports_double_shot
Definition: device_nodelet.h:135
rc
tf2_ros::StaticTransformBroadcaster
rc::DeviceNodelet::saveSlamMap
bool saveSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Save the onboard SLAM map.
Definition: dynamics_handlers.cc:201
rc::DeviceNodelet::dynamicsStartSlam
bool dynamicsStartSlam(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Start Stereo INS+SLAM.
Definition: dynamics_handlers.cc:129
rc::DeviceNodelet::dynamicsRestart
bool dynamicsRestart(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Restart Stereo INS.
Definition: dynamics_handlers.cc:135
rc::DeviceNodelet::getSlamTrajectoryService
ros::ServiceServer getSlamTrajectoryService
Definition: device_nodelet.h:170
rc::DeviceNodelet::cntConsecutiveRecoveryFails
int cntConsecutiveRecoveryFails
Definition: device_nodelet.h:154
rc::DeviceNodelet::dynamicsInterface
rc::dynamics::RemoteInterface::Ptr dynamicsInterface
Definition: device_nodelet.h:162
rc::DeviceNodelet::produce_device_diagnostics
void produce_device_diagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
Definition: device_nodelet.cc:1939
rc::DeviceNodelet::config
rc_visard_driver::rc_visard_driverConfig config
Definition: device_nodelet.h:145
rc::DeviceNodelet::depthAcquisitionTriggerService
ros::ServiceServer depthAcquisitionTriggerService
wrapper for REST-API calls relating to rc_visard's dynamics interface
Definition: device_nodelet.h:161
rc::DeviceNodelet::imageSuccess
std::atomic_bool imageSuccess
Definition: device_nodelet.h:149
rc::DeviceNodelet::dynamicsStreams
ThreadedStream::Manager::Ptr dynamicsStreams
Definition: device_nodelet.h:158
rc::DeviceNodelet::gev_packet_size
std::string gev_packet_size
Definition: device_nodelet.h:186
rc::DeviceNodelet::tfStaticBroadcaster
tf2_ros::StaticTransformBroadcaster tfStaticBroadcaster
Definition: device_nodelet.h:175
rc::DeviceNodelet::dynamicsResetSlamService
ros::ServiceServer dynamicsResetSlamService
Definition: device_nodelet.h:169
rc::DeviceNodelet::reconfig
dynamic_reconfigure::Server< rc_visard_driver::rc_visard_driverConfig > * reconfig
Definition: device_nodelet.h:127
rc::DeviceNodelet::recoveryRequested
bool recoveryRequested
Definition: device_nodelet.h:153
rc::DeviceNodelet::dynamicsStartService
ros::ServiceServer dynamicsStartService
Definition: device_nodelet.h:163
rc::DeviceNodelet::totalConnectionLosses
unsigned int totalConnectionLosses
Definition: device_nodelet.h:187
rc::DeviceNodelet
Definition: device_nodelet.h:61
rc::DeviceNodelet::autostartSlam
bool autostartSlam
Definition: device_nodelet.h:176
rc::DeviceNodelet::stopImageThread
std::atomic_bool stopImageThread
Definition: device_nodelet.h:149
rc::DeviceNodelet::depthAcquisitionTrigger
bool depthAcquisitionTrigger(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Trigger stereo matching in mode 'SingleFrame'.
Definition: device_nodelet.cc:1892
rc::DeviceNodelet::keepAliveAndRecoverFromFails
void keepAliveAndRecoverFromFails()
Definition: device_nodelet.cc:201
rcg::Device::ACCESS
ACCESS
nodelet::Nodelet
rc::DeviceNodelet::autostopDynamics
bool autostopDynamics
Definition: device_nodelet.h:176
rc::DeviceNodelet::tfEnabled
bool tfEnabled
should poses published also via tf?
Definition: device_nodelet.h:182
rc::DeviceNodelet::imageRequested
std::atomic_bool imageRequested
Definition: device_nodelet.h:149
rc::DeviceNodelet::dev_supports_depth_acquisition_trigger
bool dev_supports_depth_acquisition_trigger
Definition: device_nodelet.h:134
device.h
nodelet.h
rc::DeviceNodelet::dynamicsStart
bool dynamicsStart(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Start Stereo INS.
Definition: dynamics_handlers.cc:123
rc::DeviceNodelet::dev_supports_color
bool dev_supports_color
Definition: device_nodelet.h:132
rc::DeviceNodelet::dev_ipaddr
std::string dev_ipaddr
Definition: device_nodelet.h:186
rc::ThreadedStream::Manager::Ptr
std::shared_ptr< Manager > Ptr
Definition: ThreadedStream.h:67
static_transform_broadcaster.h
rc::DeviceNodelet::imageThread
std::thread imageThread
Definition: device_nodelet.h:148
rc::DeviceNodelet::stopRecoverThread
std::atomic_bool stopRecoverThread
Definition: device_nodelet.h:152
rc::DeviceNodelet::totalIncompleteBuffers
unsigned int totalIncompleteBuffers
Definition: device_nodelet.h:187
diagnostic_updater::DiagnosticStatusWrapper
rc::DeviceNodelet::totalCompleteBuffers
unsigned int totalCompleteBuffers
Definition: device_nodelet.h:187
rc::DeviceNodelet::loadSlamMap
bool loadSlamMap(rc_common_msgs::Trigger::Request &req, rc_common_msgs::Trigger::Response &resp)
Load the onboard SLAM map.
Definition: dynamics_handlers.cc:232
rc::DeviceNodelet::CreateDynamicsStreamOfType
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)
Definition: device_nodelet.cc:122
rc::DeviceNodelet::produce_connection_diagnostics
void produce_connection_diagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
Definition: device_nodelet.cc:1904
rc::DeviceNodelet::gev_userid
std::string gev_userid
Definition: device_nodelet.h:186
rc::DeviceNodelet::initConfiguration
void initConfiguration(const std::shared_ptr< GenApi::CNodeMapRef > &nodemap, rc_visard_driver::rc_visard_driverConfig &cfg, rcg::Device::ACCESS access)
Definition: device_nodelet.cc:517
rc::DeviceNodelet::stereo_plus_avail
bool stereo_plus_avail
Definition: device_nodelet.h:143
rc::DeviceNodelet::dynamicsStopService
ros::ServiceServer dynamicsStopService
Definition: device_nodelet.h:167
rc::DeviceNodelet::rcgdev
std::shared_ptr< rcg::Device > rcgdev
Definition: device_nodelet.h:139
protobuf2ros_stream.h
rc::DeviceNodelet::dev_supports_gain
bool dev_supports_gain
Definition: device_nodelet.h:131
ros::NodeHandle
rc::DeviceNodelet::trajPublisher
ros::Publisher trajPublisher
Definition: device_nodelet.h:174


rc_visard_driver
Author(s): Heiko Hirschmueller , Christian Emmerich , Felix Ruess
autogenerated on Sun May 15 2022 02:25:43