1 #define _GLIBCXX_USE_CXX11_ABI 0    10 #include <fastdds/dds/domain/DomainParticipant.hpp>    11 #include <fastdds/dds/publisher/Publisher.hpp>    12 #include <fastdds/dds/topic/Topic.hpp>    13 #include <fastdds/dds/publisher/DataWriter.hpp>    14 #include <fastdds/dds/topic/TypeSupport.hpp>    16 #include <fastdds/dds/domain/qos/DomainParticipantQos.hpp>    17 #include <fastdds/dds/domain/DomainParticipantFactory.hpp>    18 #include <fastdds/dds/publisher/qos/PublisherQos.hpp>    19 #include <fastdds/dds/topic/qos/TopicQos.hpp>    21 #include <fastrtps/attributes/ParticipantAttributes.h>    22 #include <fastrtps/qos/QosPolicies.h>    23 #include <fastdds/dds/publisher/qos/DataWriterQos.hpp>    24 #include <fastdds/dds/publisher/DataWriterListener.hpp>    30   namespace efd = eprosima::fastdds::dds;
    31   using erc = eprosima::fastrtps::types::ReturnCode_t;
    44     if (_impl->_type == 
nullptr) {
    45         std::cerr << 
"Invalid TypeSupport" << std::endl;
    48     efd::DomainParticipantQos pqos = efd::PARTICIPANT_QOS_DEFAULT;
    50     auto factory = efd::DomainParticipantFactory::get_instance();
    51     _impl->_participant = factory->create_participant(0, pqos);
    52     if (_impl->_participant == 
nullptr) {
    53         std::cerr << 
"Failed to create DomainParticipant" << std::endl;
    56     _impl->_type.register_type(_impl->_participant);
    58     efd::PublisherQos pubqos = efd::PUBLISHER_QOS_DEFAULT;
    59     _impl->_publisher = _impl->_participant->create_publisher(pubqos, 
nullptr);
    60     if (_impl->_publisher == 
nullptr) {
    61       std::cerr << 
"Failed to create Publisher" << std::endl;
    65     efd::TopicQos tqos = efd::TOPIC_QOS_DEFAULT;
    66     const std::string base { 
"rt/carla/" };
    67     std::string topic_name = base;
    69       topic_name += _parent + 
"/";
    71     _impl->_topic = _impl->_participant->create_topic(topic_name, _impl->_type->getName(), tqos);
    72     if (_impl->_topic == 
nullptr) {
    73         std::cerr << 
"Failed to create Topic" << std::endl;
    77     efd::DataWriterQos wqos = efd::DATAWRITER_QOS_DEFAULT;
    78     wqos.endpoint().history_memory_policy = eprosima::fastrtps::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
    79     efd::DataWriterListener* listener = (efd::DataWriterListener*)_impl->_listener._impl.get();
    80     _impl->_datawriter = _impl->_publisher->create_datawriter(_impl->_topic, wqos, listener);
    81     if (_impl->_datawriter == 
nullptr) {
    82         std::cerr << 
"Failed to create DataWriter" << std::endl;
    91     eprosima::fastrtps::types::ReturnCode_t rcode = _impl->_datawriter->write(&_impl->_lidar, instance_handle);
    92     if (rcode == erc::ReturnCodeValue::RETCODE_OK) {
    95     if (rcode == erc::ReturnCodeValue::RETCODE_ERROR) {
    96         std::cerr << 
"RETCODE_ERROR" << std::endl;
    99     if (rcode == erc::ReturnCodeValue::RETCODE_UNSUPPORTED) {
   100         std::cerr << 
"RETCODE_UNSUPPORTED" << std::endl;
   103     if (rcode == erc::ReturnCodeValue::RETCODE_BAD_PARAMETER) {
   104         std::cerr << 
"RETCODE_BAD_PARAMETER" << std::endl;
   107     if (rcode == erc::ReturnCodeValue::RETCODE_PRECONDITION_NOT_MET) {
   108         std::cerr << 
"RETCODE_PRECONDITION_NOT_MET" << std::endl;
   111     if (rcode == erc::ReturnCodeValue::RETCODE_OUT_OF_RESOURCES) {
   112         std::cerr << 
"RETCODE_OUT_OF_RESOURCES" << std::endl;
   115     if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ENABLED) {
   116         std::cerr << 
"RETCODE_NOT_ENABLED" << std::endl;
   119     if (rcode == erc::ReturnCodeValue::RETCODE_IMMUTABLE_POLICY) {
   120         std::cerr << 
"RETCODE_IMMUTABLE_POLICY" << std::endl;
   123     if (rcode == erc::ReturnCodeValue::RETCODE_INCONSISTENT_POLICY) {
   124         std::cerr << 
"RETCODE_INCONSISTENT_POLICY" << std::endl;
   127     if (rcode == erc::ReturnCodeValue::RETCODE_ALREADY_DELETED) {
   128         std::cerr << 
"RETCODE_ALREADY_DELETED" << std::endl;
   131     if (rcode == erc::ReturnCodeValue::RETCODE_TIMEOUT) {
   132         std::cerr << 
"RETCODE_TIMEOUT" << std::endl;
   135     if (rcode == erc::ReturnCodeValue::RETCODE_NO_DATA) {
   136         std::cerr << 
"RETCODE_NO_DATA" << std::endl;
   139     if (rcode == erc::ReturnCodeValue::RETCODE_ILLEGAL_OPERATION) {
   140         std::cerr << 
"RETCODE_ILLEGAL_OPERATION" << std::endl;
   143     if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ALLOWED_BY_SECURITY) {
   144         std::cerr << 
"RETCODE_NOT_ALLOWED_BY_SECURITY" << std::endl;
   147     std::cerr << 
"UNKNOWN" << std::endl;
   153     float* end = &data[height * width * elements];
   154     for (++it; it < end; it += elements) {
   158     std::vector<uint8_t> vector_data;
   159     const size_t size = height * width * 
sizeof(float) * elements;
   160     vector_data.resize(size);
   161     std::memcpy(&vector_data[0], &data[0], size);
   162     SetData(seconds, nanoseconds, height, width, std::move(vector_data));
   171     header.
stamp(std::move(time));
   175     descriptor1.
name(
"x");
   178     descriptor1.
count(1);
   180     descriptor2.
name(
"y");
   183     descriptor2.
count(1);
   185     descriptor3.
name(
"z");
   188     descriptor3.
count(1);
   190     descriptor4.
name(
"cos_inc_angle");
   193     descriptor4.
count(1);
   195     descriptor5.
name(
"object_idx");
   198     descriptor5.
count(1);
   200     descriptor6.
name(
"object_tag");
   203     descriptor6.
count(1);
   205     const size_t point_size = 6 * 
sizeof(float);
   206     _impl->_lidar.header(std::move(header));
   207     _impl->_lidar.width(width);
   208     _impl->_lidar.height(height);
   209     _impl->_lidar.is_bigendian(
false);
   210     _impl->_lidar.fields({descriptor1, descriptor2, descriptor3, descriptor4, descriptor5, descriptor6});
   211     _impl->_lidar.point_step(point_size);
   212     _impl->_lidar.row_step(width * point_size);
   213     _impl->_lidar.is_dense(
false); 
   214     _impl->_lidar.data(std::move(data));
   227       if (
_impl->_datawriter)
   228           _impl->_publisher->delete_datawriter(
_impl->_datawriter);
   230       if (
_impl->_publisher)
   231           _impl->_participant->delete_publisher(
_impl->_publisher);
   234           _impl->_participant->delete_topic(
_impl->_topic);
   236       if (
_impl->_participant)
   237           efd::DomainParticipantFactory::get_instance()->delete_participant(
_impl->_participant);
   258     _name = std::move(other._name);
   259     _parent = std::move(other._parent);
   260     _impl = std::move(other._impl);
   265     _name = std::move(other._name);
   266     _parent = std::move(other._parent);
   267     _impl = std::move(other._impl);
 
This class represents the structure PointCloud2 defined by the user in the IDL file. 
 
sensor_msgs::msg::PointCloud2 _lidar
 
std::shared_ptr< CarlaSemanticLidarPublisherImpl > _impl
 
This class represents the structure PointField defined by the user in the IDL file. 
 
efd::DomainParticipant * _participant
 
const uint8_t PointField__FLOAT32
 
eProsima_user_DllExport void name(const std::string &_name)
This function copies the value in member name. 
 
~CarlaSemanticLidarPublisher()
 
CarlaSemanticLidarPublisher(const char *ros_name="", const char *parent="")
 
eprosima::fastrtps::rtps::InstanceHandle_t InstanceHandle_t
 
eprosima::fastrtps::types::ReturnCode_t erc
 
efd::DataWriter * _datawriter
 
This file contains definitions of common data structures used in traffic manager. ...
 
const uint8_t PointField__UINT32
 
CarlaSemanticLidarPublisher & operator=(const CarlaSemanticLidarPublisher &)
 
eProsima_user_DllExport void offset(uint32_t _offset)
This function sets a value in member offset. 
 
efd::Publisher * _publisher
 
eProsima_user_DllExport void datatype(uint8_t _datatype)
This function sets a value in member datatype. 
 
This class represents the TopicDataType of the type PointCloud2 defined by the user in the IDL file...
 
eProsima_user_DllExport void sec(int32_t _sec)
This function sets a value in member sec. 
 
eProsima_user_DllExport void count(uint32_t _count)
This function sets a value in member count. 
 
eProsima_user_DllExport void nanosec(uint32_t _nanosec)
This function sets a value in member nanosec. 
 
const std::string & parent() const
 
This class represents the structure Time defined by the user in the IDL file. 
 
void SetData(int32_t seconds, uint32_t nanoseconds, size_t elements, size_t height, size_t width, float *data)