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> 29 namespace efd = eprosima::fastdds::dds;
30 using erc = eprosima::fastrtps::types::ReturnCode_t;
43 if (_impl->_type ==
nullptr) {
44 std::cerr <<
"Invalid TypeSupport" << std::endl;
47 efd::DomainParticipantQos pqos = efd::PARTICIPANT_QOS_DEFAULT;
49 auto factory = efd::DomainParticipantFactory::get_instance();
50 _impl->_participant = factory->create_participant(0, pqos);
51 if (_impl->_participant ==
nullptr) {
52 std::cerr <<
"Failed to create DomainParticipant" << std::endl;
55 _impl->_type.register_type(_impl->_participant);
57 efd::PublisherQos pubqos = efd::PUBLISHER_QOS_DEFAULT;
58 _impl->_publisher = _impl->_participant->create_publisher(pubqos,
nullptr);
59 if (_impl->_publisher ==
nullptr) {
60 std::cerr <<
"Failed to create Publisher" << std::endl;
64 efd::TopicQos tqos = efd::TOPIC_QOS_DEFAULT;
65 const std::string base {
"rt/carla/" };
66 std::string topic_name = base;
68 topic_name += _parent +
"/";
70 _impl->_topic = _impl->_participant->create_topic(topic_name, _impl->_type->getName(), tqos);
71 if (_impl->_topic ==
nullptr) {
72 std::cerr <<
"Failed to create Topic" << std::endl;
76 efd::DataWriterQos wqos = efd::DATAWRITER_QOS_DEFAULT;
77 wqos.endpoint().history_memory_policy = eprosima::fastrtps::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
78 efd::DataWriterListener* listener = (efd::DataWriterListener*)_impl->_listener._impl.get();
79 _impl->_datawriter = _impl->_publisher->create_datawriter(_impl->_topic, wqos, listener);
80 if (_impl->_datawriter ==
nullptr) {
81 std::cerr <<
"Failed to create DataWriter" << std::endl;
90 eprosima::fastrtps::types::ReturnCode_t rcode = _impl->_datawriter->write(&_impl->_float, instance_handle);
91 if (rcode == erc::ReturnCodeValue::RETCODE_OK) {
94 if (rcode == erc::ReturnCodeValue::RETCODE_ERROR) {
95 std::cerr <<
"RETCODE_ERROR" << std::endl;
98 if (rcode == erc::ReturnCodeValue::RETCODE_UNSUPPORTED) {
99 std::cerr <<
"RETCODE_UNSUPPORTED" << std::endl;
102 if (rcode == erc::ReturnCodeValue::RETCODE_BAD_PARAMETER) {
103 std::cerr <<
"RETCODE_BAD_PARAMETER" << std::endl;
106 if (rcode == erc::ReturnCodeValue::RETCODE_PRECONDITION_NOT_MET) {
107 std::cerr <<
"RETCODE_PRECONDITION_NOT_MET" << std::endl;
110 if (rcode == erc::ReturnCodeValue::RETCODE_OUT_OF_RESOURCES) {
111 std::cerr <<
"RETCODE_OUT_OF_RESOURCES" << std::endl;
114 if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ENABLED) {
115 std::cerr <<
"RETCODE_NOT_ENABLED" << std::endl;
118 if (rcode == erc::ReturnCodeValue::RETCODE_IMMUTABLE_POLICY) {
119 std::cerr <<
"RETCODE_IMMUTABLE_POLICY" << std::endl;
122 if (rcode == erc::ReturnCodeValue::RETCODE_INCONSISTENT_POLICY) {
123 std::cerr <<
"RETCODE_INCONSISTENT_POLICY" << std::endl;
126 if (rcode == erc::ReturnCodeValue::RETCODE_ALREADY_DELETED) {
127 std::cerr <<
"RETCODE_ALREADY_DELETED" << std::endl;
130 if (rcode == erc::ReturnCodeValue::RETCODE_TIMEOUT) {
131 std::cerr <<
"RETCODE_TIMEOUT" << std::endl;
134 if (rcode == erc::ReturnCodeValue::RETCODE_NO_DATA) {
135 std::cerr <<
"RETCODE_NO_DATA" << std::endl;
138 if (rcode == erc::ReturnCodeValue::RETCODE_ILLEGAL_OPERATION) {
139 std::cerr <<
"RETCODE_ILLEGAL_OPERATION" << std::endl;
142 if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ALLOWED_BY_SECURITY) {
143 std::cerr <<
"RETCODE_NOT_ALLOWED_BY_SECURITY" << std::endl;
146 std::cerr <<
"UNKNOWN" << std::endl;
151 _impl->_float.data(data);
164 if (
_impl->_datawriter)
165 _impl->_publisher->delete_datawriter(
_impl->_datawriter);
167 if (
_impl->_publisher)
168 _impl->_participant->delete_publisher(
_impl->_publisher);
171 _impl->_participant->delete_topic(
_impl->_topic);
173 if (
_impl->_participant)
174 efd::DomainParticipantFactory::get_instance()->delete_participant(
_impl->_participant);
195 _name = std::move(other._name);
196 _parent = std::move(other._parent);
197 _impl = std::move(other._impl);
202 _name = std::move(other._name);
203 _parent = std::move(other._parent);
204 _impl = std::move(other._impl);
CarlaSpeedometerSensor & operator=(const CarlaSpeedometerSensor &)
eprosima::fastrtps::rtps::InstanceHandle_t InstanceHandle_t
eprosima::fastrtps::types::ReturnCode_t erc
This class represents the TopicDataType of the type Float32 defined by the user in the IDL file...
This file contains definitions of common data structures used in traffic manager. ...
This class represents the structure Float32 defined by the user in the IDL file.
efd::Publisher * _publisher
std::shared_ptr< CarlaSpeedometerSensorImpl > _impl
const std::string & parent() const
efd::DataWriter * _datawriter
std_msgs::msg::Float32 _float
~CarlaSpeedometerSensor()
CarlaSpeedometerSensor(const char *ros_name="", const char *parent="")
efd::DomainParticipant * _participant