20#ifndef __FPSDK_COMMON_ROS1_HPP__
21#define __FPSDK_COMMON_ROS1_HPP__
31#include <nlohmann/json.hpp>
34#pragma GCC diagnostic push
35#pragma GCC diagnostic ignored "-Wpedantic"
36#pragma GCC diagnostic ignored "-Wunused-parameter"
37#pragma GCC diagnostic ignored "-Wshadow"
38#pragma GCC diagnostic ignored "-Wunused-function"
41# include <ros/console.h>
45#include <nav_msgs/Odometry.h>
46#include <sensor_msgs/Image.h>
47#include <sensor_msgs/Imu.h>
48#include <sensor_msgs/Temperature.h>
49#include <std_msgs/ByteMultiArray.h>
50#include <tf2_msgs/TFMessage.h>
52#include <ros/serialization.h>
54#pragma GCC diagnostic pop
74 ConstBuffer(
const std::vector<uint8_t>& buf)
75 : data_{ buf.data() }, end_{ buf.data() +
static_cast<uint32_t
>(buf.size()) }
78 ConstBuffer(
const uint8_t* data,
size_t size) : data_(data), end_(data +
static_cast<uint32_t
>(size))
82 static const ros::serialization::StreamType stream_type = ros::serialization::stream_types::Input;
83 inline const uint8_t* getData()
87 inline const uint8_t* advance(uint32_t len)
89 const uint8_t* old_data = data_;
92 ros::serialization::throwStreamOverrun();
96 inline uint32_t getLength()
98 return static_cast<uint32_t
>(end_ - data_);
101 template <
typename T>
102 inline void next(T& t)
104 ros::serialization::deserialize(*
this, t);
107 template <
typename T>
108 inline ConstBuffer& operator>>(T& t)
110 ros::serialization::deserialize(*
this, t);
115 const uint8_t* data_;
127template <
typename RosMsgT>
131 ros::serialization::IStream s((uint8_t*)buf.data(),
static_cast<uint32_t
>(buf.size()));
132 ros::serialization::deserialize(s, msg);
135 ros::serialization::Serializer<RosMsgT>::read(m, msg);
193 bool Open(
const std::string&
path,
const int compress = 0);
213 template <
typename T>
216 const uint32_t size = ros::serialization::serializationLength(msg);
217 std::vector<uint8_t> data(size);
219 ros::serialization::OStream stream(data.data(), size);
220 ros::serialization::serialize(stream, msg);
222 return WriteSerialised(topic,
time, ros::message_traits::datatype<T>(), ros::message_traits::md5sum<T>(),
223 ros::message_traits::definition<T>(), data.data(), data.size());
236 template <
typename T>
265 std::unique_ptr<Impl> impl_;
267 bool WriteSerialised(
const std::string& topic,
const time::RosTime&
time,
const std::string& msg_name,
268 const std::string& msg_md5,
const std::string& msg_def,
const uint8_t* data,
const std::size_t size);
272#if FPSDK_USE_ROS1 || defined(_DOXYGEN_)
void AddMsgDef(const fpl::RosMsgDef &rosmsgdef)
Add ROS message definition from .fpl.
BagWriter & operator=(const BagWriter &)=delete
No copy.
bool WriteMessage(const fpl::RosMsgBin &rosmsgbin)
Write message from .fpl.
bool WriteMessage(const T &msg, const std::string &topic, const time::RosTime &time={})
Write a message to the bag.
BagWriter(const BagWriter &)=delete
No copy.
bool Open(const std::string &path, const int compress=0)
Open bag for writing.
bool WriteMessage(const T &msg, const std::string &topic, const ros::Time &time)
Write a message to the bag.
Fixposition SDK: .fpl utilities.
void DeserializeMessage(const std::vector< uint8_t > &buf, RosMsgT &msg)
Deserialise ROS1 message.
ros::Time ConvTime(const time::Time &time)
Convert to ROS time (atomic -> POSIX).
void RedirectLoggingToRosConsole(const char *logger_name=ROSCONSOLE_DEFAULT_NAME)
Redirect fpsdk:common::logging to ROS console.
Fixposition SDK: Common library.
Helper for extracting a serialised ROS message.
Helper for extracting ROS message definition (the relevant fields from the "connection header").
Minimal ros::Time() / rplcpp::Time implementation (that doesn't throw).
Fixposition SDK: Time utilities.