msg: add message translation node for ROS

This commit is contained in:
Beat Küng
2025-02-11 13:19:25 +01:00
committed by Silvan Fuhrer
parent 975ec30c9c
commit f6bfa9812e
32 changed files with 3200 additions and 0 deletions
@@ -0,0 +1,11 @@
/****************************************************************************
* Copyright (c) 2024 PX4 Development Team.
* SPDX-License-Identifier: BSD-3-Clause
****************************************************************************/
#pragma once
#include <translation_util.h>
//#include "example_translation_direct_v1.h"
//#include "example_translation_multi_v2.h"
//#include "example_translation_service_v1.h"
@@ -0,0 +1,30 @@
/****************************************************************************
* Copyright (c) 2024 PX4 Development Team.
* SPDX-License-Identifier: BSD-3-Clause
****************************************************************************/
#pragma once
// Translate ExampleTopic v0 <--> v1
#include <px4_msgs_old/msg/example_topic_v0.hpp>
#include <px4_msgs/msg/example_topic.hpp>
class ExampleTopicV1Translation {
public:
using MessageOlder = px4_msgs_old::msg::ExampleTopicV0;
static_assert(MessageOlder::MESSAGE_VERSION == 0);
using MessageNewer = px4_msgs::msg::ExampleTopic;
static_assert(MessageNewer::MESSAGE_VERSION == 1);
static constexpr const char* kTopic = "fmu/out/example_topic";
static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) {
// Set msg_newer from msg_older
}
static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) {
// Set msg_older from msg_newer
}
};
REGISTER_TOPIC_TRANSLATION_DIRECT(ExampleTopicV1Translation);
@@ -0,0 +1,42 @@
/****************************************************************************
* Copyright (c) 2024 PX4 Development Team.
* SPDX-License-Identifier: BSD-3-Clause
****************************************************************************/
#pragma once
// Translate ExampleTopic and OtherTopic v1 <--> v2
#include <px4_msgs_old/msg/example_topic_v1.hpp>
#include <px4_msgs_old/msg/other_topic_v1.hpp>
#include <px4_msgs/msg/example_topic.hpp>
#include <px4_msgs/msg/other_topic.hpp>
class ExampleTopicOtherTopicV2Translation {
public:
using MessagesOlder = TypesArray<px4_msgs_old::msg::ExampleTopicV1, px4_msgs_old::msg::OtherTopicV1>;
static constexpr const char* kTopicsOlder[] = {
"fmu/out/example_topic",
"fmu/out/other_topic",
};
static_assert(px4_msgs_old::msg::ExampleTopicV1::MESSAGE_VERSION == 1);
static_assert(px4_msgs_old::msg::OtherTopicV1::MESSAGE_VERSION == 1);
using MessagesNewer = TypesArray<px4_msgs::msg::ExampleTopic, px4_msgs::msg::OtherTopic>;
static constexpr const char* kTopicsNewer[] = {
"fmu/out/example_topic",
"fmu/out/other_topic",
};
static_assert(px4_msgs::msg::ExampleTopic::MESSAGE_VERSION == 2);
static_assert(px4_msgs::msg::OtherTopic::MESSAGE_VERSION == 2);
static void fromOlder(const MessagesOlder::Type1 &msg_older1, const MessagesOlder::Type2 &msg_older2,
MessagesNewer::Type1 &msg_newer1, MessagesNewer::Type2 &msg_newer2) {
// Set msg_newer1, msg_newer2 from msg_older1, msg_older2
}
static void toOlder(const MessagesNewer::Type1 &msg_newer1, const MessagesNewer::Type2 &msg_newer2,
MessagesOlder::Type1 &msg_older1, MessagesOlder::Type2 &msg_older2) {
// Set msg_older1, msg_older2 from msg_newer1, msg_newer2
}
};
REGISTER_TOPIC_TRANSLATION(ExampleTopicOtherTopicV2Translation);
@@ -0,0 +1,38 @@
/****************************************************************************
* Copyright (c) 2024 PX4 Development Team.
* SPDX-License-Identifier: BSD-3-Clause
****************************************************************************/
#pragma once
// Translate ExampleService v0 <--> v1
#include <px4_msgs_old/srv/example_service_v0.hpp>
#include <px4_msgs/srv/example_service.hpp>
class ExampleServiceV1Translation {
public:
using MessageOlder = px4_msgs_old::srv::ExampleServiceV0;
static_assert(MessageOlder::Request::MESSAGE_VERSION == 0);
using MessageNewer = px4_msgs::srv::ExampleService;
static_assert(MessageNewer::Request::MESSAGE_VERSION == 1);
static constexpr const char* kTopic = "fmu/example_service";
static void fromOlder(const MessageOlder::Request &msg_older, MessageNewer::Request &msg_newer) {
// Request: set msg_newer from msg_older
}
static void toOlder(const MessageNewer::Request &msg_newer, MessageOlder::Request &msg_older) {
// Request: set msg_older from msg_newer
}
static void fromOlder(const MessageOlder::Response &msg_older, MessageNewer::Response &msg_newer) {
// Response: set msg_newer from msg_older
}
static void toOlder(const MessageNewer::Response &msg_newer, MessageOlder::Response &msg_older) {
// Response: set msg_older from msg_newer
}
};
REGISTER_SERVICE_TRANSLATION_DIRECT(ExampleServiceV1Translation);