前言
目标:linux系统中在Dora框架下建立C++节点,并以JSON格式发送字符串Python节点进行ROS2的话题发布。
背景:由于Dora框架处于开发阶段,我们在调试过程中,需要将传感器等数据发送到rviz中显示,但时经常出现各种BUG,因此使用字符串的形式发送到ROS2中,ROS2再写节点进行解析。
完成程度:可以从C++发送JSON字符串到Pyhon节点并发布到ROS2中。
Dora版本:0.3.1
1 编写C++节点
首先,安装JSON库:
sudo apt update
sudo apt install nlohmann-json3-dev
其次,创建C++节点,在node-c-api目录下,创建文件main.cc,写入以下测试代码:
extern "C"
{
#include "../../../apis/c/node/node_api.h"//如果找不到node_api.h文件换成绝对路径。
}
#include <iostream>
#include <vector>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int run(void *dora_context)
{
unsigned char counter = 0;
for (int i = 0; ; i++)
{
void *event = dora_next_event(dora_context);
if (event == NULL)
{
printf("[c node] ERROR: unexpected end of event\n");
return -1;
}
enum DoraEventType ty = read_dora_event_type(event);
if (ty == DoraEventType_Input)
{
counter += 1;
char *id_ptr;
size_t id_len;
read_dora_input_id(event, &id_ptr, &id_len);
std::string id(id_ptr, id_len);
char *data_ptr;
size_t data_len;
read_dora_input_data(event, &data_ptr, &data_len);
std::vector