1#define _GLIBCXX_USE_CXX11_ABI 0
7#include <fastdds/dds/subscriber/DataReader.hpp>
9#include <fastdds/dds/subscriber/DataReaderListener.hpp>
11#include <fastdds/dds/core/status/SubscriptionMatchedStatus.hpp>
13#include <fastdds/dds/subscriber/SampleInfo.hpp>
25 namespace efd = eprosima::fastdds::dds;
27 using erc = eprosima::fastrtps::types::ReturnCode_t;
33 efd::DataReader* reader,
34 const efd::SubscriptionMatchedStatus& info);
51 if (info.current_count_change == 1) {
55 }
else if (info.current_count_change == -1) {
62 std::cerr << info.current_count_change
63 <<
" is not a valid value for PublicationMatchedStatus current count change" << std::endl;
72 eprosima::fastrtps::types::ReturnCode_t rcode = reader->take_next_sample(&
_message, &info);
75 if (rcode == erc::ReturnCodeValue::RETCODE_OK) {
87 if (rcode == erc::ReturnCodeValue::RETCODE_ERROR) {
88 std::cerr <<
"RETCODE_ERROR" << std::endl;
91 if (rcode == erc::ReturnCodeValue::RETCODE_UNSUPPORTED) {
92 std::cerr <<
"RETCODE_UNSUPPORTED" << std::endl;
95 if (rcode == erc::ReturnCodeValue::RETCODE_BAD_PARAMETER) {
96 std::cerr <<
"RETCODE_BAD_PARAMETER" << std::endl;
99 if (rcode == erc::ReturnCodeValue::RETCODE_PRECONDITION_NOT_MET) {
100 std::cerr <<
"RETCODE_PRECONDITION_NOT_MET" << std::endl;
103 if (rcode == erc::ReturnCodeValue::RETCODE_OUT_OF_RESOURCES) {
104 std::cerr <<
"RETCODE_OUT_OF_RESOURCES" << std::endl;
107 if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ENABLED) {
108 std::cerr <<
"RETCODE_NOT_ENABLED" << std::endl;
111 if (rcode == erc::ReturnCodeValue::RETCODE_IMMUTABLE_POLICY) {
112 std::cerr <<
"RETCODE_IMMUTABLE_POLICY" << std::endl;
115 if (rcode == erc::ReturnCodeValue::RETCODE_INCONSISTENT_POLICY) {
116 std::cerr <<
"RETCODE_INCONSISTENT_POLICY" << std::endl;
119 if (rcode == erc::ReturnCodeValue::RETCODE_ALREADY_DELETED) {
120 std::cerr <<
"RETCODE_ALREADY_DELETED" << std::endl;
123 if (rcode == erc::ReturnCodeValue::RETCODE_TIMEOUT) {
124 std::cerr <<
"RETCODE_TIMEOUT" << std::endl;
127 if (rcode == erc::ReturnCodeValue::RETCODE_NO_DATA) {
128 std::cerr <<
"RETCODE_NO_DATA" << std::endl;
131 if (rcode == erc::ReturnCodeValue::RETCODE_ILLEGAL_OPERATION) {
132 std::cerr <<
"RETCODE_ILLEGAL_OPERATION" << std::endl;
135 if (rcode == erc::ReturnCodeValue::RETCODE_NOT_ALLOWED_BY_SECURITY) {
136 std::cerr <<
"RETCODE_NOT_ALLOWED_BY_SECURITY" << std::endl;
142 _impl->_owner = owner;
148 _impl->_owner = owner;
CarlaEgoVehicleControlSubscriber类,用于订阅并处理来自ROS2的自动驾驶车辆控制消息
void ForwardMessage(VehicleControl control)
(内部使用)将控制消息转发给内部处理函数。
void DestroySubscriber()
销毁用户并释放相关资源。
CarlaSubscriberListener的内部实现类,用于隐藏实现细节。
CarlaEgoVehicleControlSubscriber * _owner
void on_subscription_matched(efd::DataReader *reader, const efd::SubscriptionMatchedStatus &info)
carla_msgs::msg::CarlaEgoVehicleControl _message
void on_data_available(efd::DataReader *reader)
~CarlaSubscriberListener()
析构函数,清理资源并释放内部实现。
std::unique_ptr< CarlaSubscriberListenerImpl > _impl
指向内部实现类的指针。
void SetOwner(CarlaEgoVehicleControlSubscriber *owner)
设置此监听器的所有者。
CarlaSubscriberListener(CarlaEgoVehicleControlSubscriber *owner)
构造函数,初始化CarlaSubscriberListener并设置其所有者。
该类表示用户在 IDL 文件中定义的结构 CarlaEgoVehicleControl。 <>
eProsima_user_DllExport void reverse(bool _reverse)
该函数设置成员 reverse 的值。
eProsima_user_DllExport void hand_brake(bool _hand_brake)
该函数设置成员 hand_brake 的值。
eProsima_user_DllExport void brake(float _brake)
该函数设置成员 brake 的值。
eProsima_user_DllExport void throttle(float _throttle)
该函数设置成员 throttle 的值。
eProsima_user_DllExport void gear(int32_t _gear)
该函数设置成员 gear 的值。
eProsima_user_DllExport void manual_gear_shift(bool _manual_gear_shift)
该函数设置成员 manual_gear_shift 的值。
eProsima_user_DllExport void steer(float _steer)
该函数设置成员 steer 的值。
eprosima::fastrtps::types::ReturnCode_t erc
@using erc