【Micro-XRCE-DDS】使用docker编译代理
为了方便修改xrce-dds代理,特地编译了一个镜像用于编译代理。
编译代理
安装docker
安装VSCode和远程插件
运行镜像
1
docker run -itd -p 2019:2019/udp -v agent-build-files:/root/files --name agent-build szc188/micro-xrce-dds-agent-build-env:v2.1.1 /bin/bash
打开VSCode并连接到容器,打开目录
/root
接下来的操作都是在VSCode中的终端镜像
取消默认的代理
1
2git config --global --unset http.proxy
git config --global --unset https.proxy安装工具
1
2apt update
apt install -y net-tools拉取源代码
1
2cd /root/files
git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git -b v2.1.1编译源代码
1
2
3cd Micro-XRCE-DDS-Agent && mkdir build && cd build
cmake ..
make运行代理
1
./MicroXRCEAgent udp4 -p 2019
修改客户端topic名称,兼容ROS2防冲突
为了让编译好的客户端的topic名称在局域网内不会重复,需要根据本机的序列号定制topic名称
打开
files/Micro-XRCE-DDS-Agent/src/cpp/middleware/fastdds/FastDDSMiddleware.cpp
搜索
bool FastDDSMiddleware::create_topic_by_xml(
在这个函数里找到
if (xmlobjects::parse_topic(xml.data(), xml.size(), attrs))
在这个if里最上面添加如下代码
1
2
3
4
5
6extern std::string chiplink_sn;
std::string str("rt/");
str += chiplink_sn + "/";
str += attrs.topicName;
attrs.topicName = str.c_str();
std::cout << "####### attrs.getTopicName(): " << attrs.getTopicName() << std::endl;
由于 FastDDS 要求 topic 名称和 FastDDSDataWriter 还有 FastDDSDataReader 的名称必须相同,所以一起改了
打开
files/Micro-XRCE-DDS-Agent/src/cpp/middleware/fastdds/FastDDSEntities.cpp
搜索
bool FastDDSDataWriter::create_by_xml(const std::string& xml)
找到函数里的
if (xmlobjects::parse_publisher(xml.data(), xml.size(), attrs))
在这个if的第一行添加以下代码
1
2
3
4
5
6extern std::string custom_sn;
std::string str("rt/");
str += custom_sn + "/";
str += attrs.topic.topicName;
attrs.topic.topicName = str.c_str();
std::cout << "####### FastDDSDataWriter.attrs.topic.topicName: " << attrs.topic.topicName << std::endl;搜索
bool FastDDSDataReader::create_by_xml(const std::string& xml)
找到函数里的
if (xmlobjects::parse_subscriber(xml.data(), xml.size(), attrs))
在这个if的第一行添加以下代码
1
2
3
4
5
6extern std::string custom_sn;
std::string str("rt/");
str += custom_sn + "/";
str += attrs.topic.topicName;
attrs.topic.topicName = str.c_str();
std::cout << "####### FastDDSDataReader.attrs.topic.topicName: " << attrs.topic.topicName << std::endl;然后打开
files/Micro-XRCE-DDS-Agent/microxrce_agent.cpp
在
int main(int argc, char** argv)
上面添加1
std::string custom_sn = "test_sn";
【Micro-XRCE-DDS】使用docker编译代理