DDS一
dds基本概念
以数据为中心的发布订阅模型(DCPS)
发送实体
订阅实体
配置实体(主题传输的类型信息,QoS)
发布者:负责创建和配置其实现的DataWriter的DCPS实体。
订阅者:负责接收在其订阅的主题下发布的数据的DCPS实体。
主题:绑定发布和订阅的实体。通过TopicDescription,它可以统一发布和订阅的数据类型。
领域:用于链接属于一个或多个应用程序的所有发布者和订阅者的概念,这些应用程序在不同主题下交换数据。这些参与域的单独应用程序称为DomainParticipant。DDS域由域ID标识。
采用实时发布订阅(RTPS)协议来负责传输。支持udp,tcp和共享内存shm。支持单播和多播通信。
RTPSWriter:能够发送数据的端点。
RTPSReader:能够接收数据的端点。
RTPSParticipant可以有任意数量的编写器和读取器端点。
数据类型:
| idl | type |
|---|---|
| char | char |
| octet | uint8_t |
| short | int16_t |
| unsigned short | uint16_t |
| long | int32_t |
| unsigned long | uint32_t |
| long long | int64_t |
| unsigned long long | uint64_t |
| float | float |
| double | double |
| long double | long double |
| boolean | bool |
| string | std::string |
数组
| idl | type |
|---|---|
| char a[5] | std::array<char,5> |
| octet a[5] | std::array<uint8_t,5> a |
| short a[5] | std::array<int16_t,5> a |
| unsigned short a[5] | std::array<uint16_t,5> a |
| long a[5] | std::array<int32_t,5> a |
| unsData types with a keyigned long a[5] | std::array<uint32_t,5> a |
| long long a[5] | std::array<int64_t,5> a |
| unsigned long long a[5] | std::array<uint64_t,5> a |
| float a[5] | std::array<float,5> a |
| double a[5] | std::array<double,5> a |
序列
| idl | type |
|---|---|
| sequence |
std::vector |
| sequence |
std::vector<uint8_t> |
| sequence |
std::vector<int16_t> |
| sequence |
std::vector<uint16_t> |
| sequence |
std::vector<int32_t> |
| sequence |
std::vector<uint32_t> |
| sequence |
std::vector<int64_t> |
| sequence |
std::vector<uint64_t> |
| sequence |
std::vector |
| sequence |
std::vector |
关联数组
| idl | type |
|---|---|
| map<char, unsigned long long> | std::map<char, uint64_T> |
结构体
| idl | type |
|---|
{
octet octet_value;
long long_value;
string string_value;
};
{
public:
Structure();
~Structure();
Structure(const Structure &x);
Structure(Structure &&x);
Structure& operator=(const Structure &x);
Structure& operator=(Structure &&x);
void octet_value(uint8_t _octet_value);
uint8_t octet_value() const;
uint8_t& octet_value();
void long_value(int64_t _long_value);
int64_t long_value() const;
int64_t& long_value();
void string_value(const std::string
&_string_value);
void string_value(std::string &&_string_value);
const std::string& string_value() const;
std::string& string_value();
private:
uint8_t m_octet_value;
int64_t m_long_value;
std::string m_string_value;
};
unions
union Union switch(long)
{
case 1:
octet octet_value;
case 2:
long long_value;
case 3:
string string_value;
};
class Union
{
public:
Union();
~Union();
Union(const Union &x);
Union(Union &&x);
Union& operator=(const Union &x);
Union& operator=(Union &&x);
void d(int32_t __d);
int32_t _d() const;
int32_t& _d();
void octet_value(uint8_t _octet_value);
uint8_t octet_value() const;
uint8_t& octet_value();
void long_value(int64_t _long_value);
int64_t long_value() const;
int64_t& long_value();
void string_value(const std::string
&_string_value);
void string_value(std:: string &&_string_value);
const std::string& string_value() const;
std::string& string_value();
private:
int32_t m__d;
uint8_t m_octet_value;
int64_t m_long_value;
std::string m_string_value;
};
bitsets
位集是一种特殊的结构,它包含一组比特。位集最多可表示64位。
bitset MyBitset
{
bitfield<3> a;
bitfield<10> b;
bitfield<12, int> c;
};
class MyBitset
{
public:
void a(char _a);
char a() const;
void b(uint16_t _b);
uint16_t b() const;
void c(int32_t _c);
int32_t c() const;
private:
std::bitset<25> m_bitset;
};
枚举
enum Enumeration
{
RED,
GREEN,
BLUE
};
enum Enumeration : uint32_t
{
RED,
GREEN,
BLUE
};
Bitmasks(对应std::bitset)
Bitmask是一种特殊的枚举,用于管理位掩码。
@bit_bound(8)
bitmask MyBitMask
{
@position( 0) flag0,
@position( 1) flag1,
@position( 4) flag4,
@position( 6) flag6,
flag7
};
enum MyBitMask : uint8_t
{
flag0 = 0x01 << 0,
flag1 = 0x01 << 1,
flag4 = 0x01 << 4,
flag6 = 0x01 << 6,
flag7 = 0x01 << 7
};
浙公网安备 33010602011771号