Skip to content

Commit ba096a4

Browse files
committed
util nodes: added launch args, pose and namespace
1 parent 2cfb1b5 commit ba096a4

5 files changed

Lines changed: 88 additions & 12 deletions

File tree

vortex_utility_nodes/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ add_compile_options(-Wall -Wextra -Wpedantic)
55

66
find_package(ament_cmake REQUIRED)
77
find_package(rclcpp REQUIRED)
8+
find_package(geometry_msgs REQUIRED)
89
find_package(nav_msgs REQUIRED)
910
find_package(vortex_msgs REQUIRED)
1011
find_package(vortex_utils REQUIRED)
@@ -16,6 +17,7 @@ add_executable(message_publisher_node
1617

1718
ament_target_dependencies(message_publisher_node PUBLIC
1819
rclcpp
20+
geometry_msgs
1921
nav_msgs
2022
Eigen3
2123
vortex_utils
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
message_publisher_node:
22
ros__parameters:
33
input_type: "reference_filter"
4+
output_namespace: ""
45
topics:
5-
odometry: "nautilus/odom"
6-
waypoint: "nautilus/waypoint"
7-
reference_filter: "nautilus/guidance/dp_quat"
8-
output: "/utils/message_publisher"
6+
odometry: "/nautilus/odom"
7+
waypoint: "/nautilus/waypoint"
8+
reference_filter: "/nautilus/guidance/dp_quat"
9+
pose_stamped: "/nautilus/pose_stamped"
10+
pose_with_covariance_stamped: "/nautilus/pose"
11+
output: "utils/message_publisher"

vortex_utility_nodes/launch/message_publisher.launch.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from ament_index_python.packages import get_package_share_directory
44
from launch import LaunchDescription
5+
from launch.actions import DeclareLaunchArgument
6+
from launch.substitutions import LaunchConfiguration
57
from launch_ros.actions import Node
68

79

@@ -12,13 +14,32 @@ def generate_launch_description():
1214
'message_publisher.yaml',
1315
)
1416

17+
input_type_arg = DeclareLaunchArgument(
18+
'input_type',
19+
default_value='odometry',
20+
description='Input message type: odometry, waypoint, reference_filter, '
21+
'pose_stamped, or pose_with_covariance_stamped',
22+
)
23+
24+
namespace_arg = DeclareLaunchArgument(
25+
'namespace',
26+
default_value='',
27+
description='Namespace prepended to the output topic and node name',
28+
)
29+
1530
return LaunchDescription(
1631
[
32+
input_type_arg,
33+
namespace_arg,
1734
Node(
1835
package='vortex_utility_nodes',
1936
executable='message_publisher_node',
2037
name='message_publisher_node',
21-
parameters=[config],
38+
namespace=LaunchConfiguration('namespace'),
39+
parameters=[
40+
config,
41+
{'input_type': LaunchConfiguration('input_type')},
42+
],
2243
output='screen',
2344
),
2445
]

vortex_utility_nodes/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<depend>eigen</depend>
1313
<depend>yaml-cpp</depend>
1414
<depend>rclcpp</depend>
15+
<depend>geometry_msgs</depend>
1516
<depend>nav_msgs</depend>
1617
<depend>vortex_msgs</depend>
1718
<depend>vortex_utils</depend>

vortex_utility_nodes/src/message_publisher.cpp

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#include <vortex/utils/math.hpp>
2+
#include "geometry_msgs/msg/pose_stamped.hpp"
3+
#include "geometry_msgs/msg/pose_with_covariance_stamped.hpp"
24
#include "nav_msgs/msg/odometry.hpp"
35
#include "rclcpp/rclcpp.hpp"
46
#include "vortex_msgs/msg/reference_filter_quat.hpp"
@@ -17,8 +19,11 @@ class MessagePublisherNode : public rclcpp::Node {
1719
"nautilus/waypoint");
1820
this->declare_parameter<std::string>("topics.reference_filter",
1921
"nautilus/reference_filter");
20-
this->declare_parameter<std::string>("topics.output",
21-
"utils/odometry/euler");
22+
this->declare_parameter<std::string>("topics.pose_stamped",
23+
"nautilus/pose_stamped");
24+
this->declare_parameter<std::string>(
25+
"topics.pose_with_covariance_stamped", "nautilus/pose");
26+
this->declare_parameter<std::string>("topics.output", "utils/rpy");
2227

2328
auto input_type = this->get_parameter("input_type").as_string();
2429
auto output_topic = this->get_parameter("topics.output").as_string();
@@ -61,11 +66,38 @@ class MessagePublisherNode : public rclcpp::Node {
6166
"Euler publisher [reference_filter]: %s -> %s",
6267
topic.c_str(), output_topic.c_str());
6368

69+
} else if (input_type == "pose_stamped") {
70+
auto topic = this->get_parameter("topics.pose_stamped").as_string();
71+
sub_ = this->create_subscription<geometry_msgs::msg::PoseStamped>(
72+
topic, qos_profile,
73+
std::bind(&MessagePublisherNode::pose_stamped_callback, this,
74+
std::placeholders::_1));
75+
RCLCPP_INFO(this->get_logger(),
76+
"Euler publisher [pose_stamped]: %s -> %s",
77+
topic.c_str(), output_topic.c_str());
78+
79+
} else if (input_type == "pose_with_covariance_stamped") {
80+
auto topic =
81+
this->get_parameter("topics.pose_with_covariance_stamped")
82+
.as_string();
83+
sub_ = this->create_subscription<
84+
geometry_msgs::msg::PoseWithCovarianceStamped>(
85+
topic, qos_profile,
86+
std::bind(&MessagePublisherNode::
87+
pose_with_covariance_stamped_callback,
88+
this, std::placeholders::_1));
89+
RCLCPP_INFO(
90+
this->get_logger(),
91+
"Euler publisher [pose_with_covariance_stamped]: %s -> %s",
92+
topic.c_str(), output_topic.c_str());
93+
6494
} else {
65-
RCLCPP_FATAL(this->get_logger(),
66-
"Unknown input_type: '%s'. Must be 'odometry', "
67-
"'waypoint', or 'reference_filter'.",
68-
input_type.c_str());
95+
RCLCPP_FATAL(
96+
this->get_logger(),
97+
"Unknown input_type: '%s'. Must be 'odometry', 'waypoint', "
98+
"'reference_filter', 'pose_stamped', or "
99+
"'pose_with_covariance_stamped'.",
100+
input_type.c_str());
69101
rclcpp::shutdown();
70102
return;
71103
}
@@ -107,10 +139,27 @@ class MessagePublisherNode : public rclcpp::Node {
107139
publish_rpy(msg->header, euler);
108140
}
109141

142+
void pose_stamped_callback(
143+
const geometry_msgs::msg::PoseStamped::SharedPtr msg) {
144+
const auto& q = msg->pose.orientation;
145+
auto euler = convert_quat(q.w, q.x, q.y, q.z);
146+
publish_rpy(msg->header, euler);
147+
}
148+
149+
void pose_with_covariance_stamped_callback(
150+
const geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg) {
151+
const auto& q = msg->pose.pose.orientation;
152+
auto euler = convert_quat(q.w, q.x, q.y, q.z);
153+
publish_rpy(msg->header, euler);
154+
}
155+
110156
using SubVariant = std::variant<
111157
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr,
112158
rclcpp::Subscription<vortex_msgs::msg::Waypoint>::SharedPtr,
113-
rclcpp::Subscription<vortex_msgs::msg::ReferenceFilterQuat>::SharedPtr>;
159+
rclcpp::Subscription<vortex_msgs::msg::ReferenceFilterQuat>::SharedPtr,
160+
rclcpp::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr,
161+
rclcpp::Subscription<
162+
geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr>;
114163

115164
SubVariant sub_;
116165
rclcpp::Publisher<vortex_msgs::msg::RPY>::SharedPtr rpy_pub_;

0 commit comments

Comments
 (0)