Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(traffic_light_category_merger): add new traffic_light_category_merger package #9748

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions perception/autoware_traffic_light_category_merger/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 3.8)
project(autoware_traffic_light_category_merger)

# find dependencies
find_package(autoware_cmake REQUIRED)
autoware_package()

# Targets
ament_auto_add_library(${PROJECT_NAME} SHARED
src/traffic_light_category_merger_node.cpp
)

rclcpp_components_register_node(${PROJECT_NAME}
PLUGIN "autoware::traffic_light::TrafficLightCategoryMergerNode"
EXECUTABLE traffic_light_category_merger_node)


if(BUILD_TESTING)
list(APPEND AMENT_LINT_AUTO_EXCLUDE ament_cmake_uncrustify)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()

endif()

ament_auto_package(
INSTALL_TO_SHARE
launch
)
22 changes: 22 additions & 0 deletions perception/autoware_traffic_light_category_merger/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
`autoware_traffic_light_category_merger`

## Overview

`autoware_traffic_light_category_merger` receives the Traffic Light (TL) classification result from Car/Pedestrian classifiers to merge into single classification result. The expect ROIs TL without classification result will be filled as Unknown.

## Input topics

| Name | Type | Description |
| -------------------------- | --------------------------------------------- | ----------------------------- |
| `input/car_signals` | tier4_perception_msgs::msg::TrafficLightArray | Car TLs classification |
| `input/pedestrian_signals` | tier4_perception_msgs::msg::TrafficLightArray | Pedestrian TLs classification |

## Output topics

| Name | Type | Description |
| ------------------------ | --------------------------------------------- | ------------------------------------- |
| `output/traffic_signals` | tier4_perception_msgs::msg::TrafficLightArray | Car and Pedestrian TLs classification |

## Node parameters

N/A
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<launch>
<!-- Output -->
<arg name="input/car_signals" default="classified/car/traffic_signals"/>
<arg name="input/pedestrian_signals" default="classified/pedestrian/traffic_signals"/>
<arg name="output/traffic_signals" default="classification/traffic_signals"/>

<!-- Node -->
<node pkg="autoware_traffic_light_category_merger" exec="traffic_light_category_merger_node" name="traffic_light_category_merger" output="screen">
<remap from="input/car_signals" to="$(var input/car_signals)"/>
<remap from="input/pedestrian_signals" to="$(var input/pedestrian_signals)"/>
<remap from="output/traffic_signals" to="$(var output/traffic_signals)"/>
</node>
</launch>
25 changes: 25 additions & 0 deletions perception/autoware_traffic_light_category_merger/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_traffic_light_category_merger</name>
<version>0.0.0</version>
<description>The ROS 2 autoware_traffic_light_category_merger package</description>
<maintainer email="[email protected]">Yoshi Ri</maintainer>
<maintainer email="[email protected]">Masato Saeki</maintainer>
<maintainer email="[email protected]">Dai Nguyen</maintainer>
<license>Apache License 2.0</license>
<author email="[email protected]">Dai Nguyen</author>

<buildtool_depend>ament_cmake_auto</buildtool_depend>

<depend>autoware_test_utils</depend>
<depend>message_filters</depend>
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>
<depend>tier4_perception_msgs</depend>
<build_depend>autoware_cmake</build_depend>

<export>
<build_type>ament_cmake</build_type>
</export>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright 2025 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "traffic_light_category_merger_node.hpp"

#include <memory>
#include <string>
#include <vector>

namespace autoware::traffic_light
{

TrafficLightCategoryMergerNode::TrafficLightCategoryMergerNode(
const rclcpp::NodeOptions & node_options)

Check warning on line 25 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L24-L25

Added lines #L24 - L25 were not covered by tests
: rclcpp::Node("traffic_light_category_merger_node", node_options),
tf_buffer_(get_clock()),
tf_listener_(tf_buffer_),
car_signal_sub_(this, "input/car_signals", rclcpp::QoS{1}.get_rmw_qos_profile()),
pedestrian_signal_sub_(this, "input/pedestrian_signals", rclcpp::QoS{1}.get_rmw_qos_profile()),
sync_(SyncPolicy(10), car_signal_sub_, pedestrian_signal_sub_)

Check warning on line 31 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L27-L31

Added lines #L27 - L31 were not covered by tests
{
using std::placeholders::_1;
using std::placeholders::_2;
sync_.registerCallback(std::bind(&TrafficLightCategoryMergerNode::signalsCallback, this, _1, _2));

Check warning on line 35 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L35

Added line #L35 was not covered by tests
pub_traffic_light_signals_ =
create_publisher<TrafficLightArray>("output/traffic_signals", rclcpp::QoS{1});
}

Check warning on line 38 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L37-L38

Added lines #L37 - L38 were not covered by tests

void TrafficLightCategoryMergerNode::signalsCallback(

Check warning on line 40 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L40

Added line #L40 was not covered by tests
const TrafficLightArray::ConstSharedPtr & car_signals_msg,
const TrafficLightArray::ConstSharedPtr & pedestrian_signals_msg)
{
TrafficLightArray output;
output.header = car_signals_msg->header;
output.signals.insert(

Check warning on line 46 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L46

Added line #L46 was not covered by tests
output.signals.end(), car_signals_msg->signals.begin(), car_signals_msg->signals.end());
output.signals.insert(

Check warning on line 48 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L48

Added line #L48 was not covered by tests
output.signals.end(), pedestrian_signals_msg->signals.begin(),
pedestrian_signals_msg->signals.end());
pub_traffic_light_signals_->publish(output);
}

Check warning on line 52 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L51-L52

Added lines #L51 - L52 were not covered by tests

} // namespace autoware::traffic_light

#include "rclcpp_components/register_node_macro.hpp"
RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightCategoryMergerNode)

Check warning on line 57 in perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_traffic_light_category_merger/src/traffic_light_category_merger_node.cpp#L57

Added line #L57 was not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2025 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef TRAFFIC_LIGHT_CATEGORY_MERGER_NODE_HPP_
#define TRAFFIC_LIGHT_CATEGORY_MERGER_NODE_HPP_

#include <autoware/universe_utils/ros/transform_listener.hpp>
#include <rclcpp/rclcpp.hpp>

#include <tier4_perception_msgs/msg/traffic_light_array.hpp>

#include <message_filters/subscriber.h>
#include <message_filters/sync_policies/approximate_time.h>
#include <message_filters/synchronizer.h>

#include <chrono>
#include <memory>
#include <string>
#include <vector>

namespace autoware::traffic_light
{
using tier4_perception_msgs::msg::TrafficLightArray;

class TrafficLightCategoryMergerNode : public rclcpp::Node
{
public:
explicit TrafficLightCategoryMergerNode(const rclcpp::NodeOptions & node_options);

private:
// Subscriber
tf2_ros::Buffer tf_buffer_;
tf2_ros::TransformListener tf_listener_;

message_filters::Subscriber<TrafficLightArray> car_signal_sub_;
message_filters::Subscriber<TrafficLightArray> pedestrian_signal_sub_;

typedef message_filters::sync_policies::ApproximateTime<TrafficLightArray, TrafficLightArray>
SyncPolicy;
message_filters::Synchronizer<SyncPolicy> sync_;

void signalsCallback(
const TrafficLightArray::ConstSharedPtr & car_signals_msg,
const TrafficLightArray::ConstSharedPtr & pedestrian_signals_msg);

rclcpp::Publisher<TrafficLightArray>::SharedPtr pub_traffic_light_signals_;
};

} // namespace autoware::traffic_light

#endif // TRAFFIC_LIGHT_CATEGORY_MERGER_NODE_HPP_
Loading