Program Listing for File driver_ros1.h
↰ Return to documentation for file (include/metavision_driver/driver_ros1.h)
// -*-c++-*---------------------------------------------------------------------------------------
// Copyright 2022 Bernd Pfrommer <bernd.pfrommer@gmail.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef METAVISION_DRIVER__DRIVER_ROS1_H_
#define METAVISION_DRIVER__DRIVER_ROS1_H_
#include <dynamic_reconfigure/server.h>
#include <event_camera_msgs/EventPacket.h>
#include <ros/ros.h>
#include <std_srvs/Trigger.h>
#include <memory>
#include <string>
#include "metavision_driver/MetaVisionDynConfig.h"
#include "metavision_driver/bias_parameter.h"
#include "metavision_driver/callback_handler.h"
#include "metavision_driver/resize_hack.h"
namespace metavision_driver
{
class MetavisionWrapper; // forward decl
class DriverROS1 : public CallbackHandler
{
using Config = MetaVisionDynConfig;
using EventPacketMsg = event_camera_msgs::EventPacket;
using Trigger = std_srvs::Trigger;
public:
explicit DriverROS1(ros::NodeHandle & nh);
~DriverROS1();
// ---------------- inherited from CallbackHandler -----------
void rawDataCallback(uint64_t t, const uint8_t * start, const uint8_t * end) override;
void eventCDCallback(
uint64_t t, const Metavision::EventCD * begin, const Metavision::EventCD * end) override;
// ---------------- end of inherited -----------
private:
// service call to dump biases
bool saveBiases(Trigger::Request & req, Trigger::Response & res);
// related to dynanmic config (runtime parameter update)
void setBias(int * field, const std::string & name);
int getBias(const std::string & name) const;
void configure(Config & config, int level);
// for primary sync
bool secondaryReadyCallback(Trigger::Request & req, Trigger::Response & res);
// misc helper functions
void start();
bool stop();
void configureWrapper(const std::string & name);
void initializeBiasParameters(const std::string & sensorVersion);
// ------------------------ variables ------------------------------
ros::NodeHandle nh_;
std::shared_ptr<MetavisionWrapper> wrapper_;
int width_; // image width
int height_; // image height
bool isBigEndian_;
std::string frameId_; // ROS frame id
std::string encoding_;
uint64_t seq_{0}; // sequence number
size_t reserveSize_{0}; // recommended reserve size
uint64_t lastMessageTime_{0};
uint64_t messageThresholdTime_{0}; // threshold time for sending message
size_t messageThresholdSize_{0}; // threshold size for sending message
EventPacketMsg::Ptr msg_;
ros::Publisher eventPub_;
// ------ related to sync
ros::ServiceServer secondaryReadyServer_;
// ------ related to dynamic config and services
Config config_;
std::shared_ptr<dynamic_reconfigure::Server<Config>> configServer_;
ros::ServiceServer saveBiasService_;
using ParameterMap = std::map<std::string, BiasParameter>;
ParameterMap biasParameters_;
};
} // namespace metavision_driver
#endif // METAVISION_DRIVER__DRIVER_ROS1_H_