Skip to content

Commit 8b03061

Browse files
authored
feat(traffic_light): improved traffic_light_map_based_detector and new traffic_light_fine_detector package (autowarefoundation#4084)
* update traffic_light_map_based_detector traffic_light_classifier traffic_light_fine_detector traffic_light_multi_camera_fusion Signed-off-by: Mingyu Li <mingyu.li@tier4.jp> * replace autoware_auto_perception_msgs with tier4_perception_msgs Signed-off-by: Mingyu Li <mingyu.li@tier4.jp> --------- Signed-off-by: Mingyu Li <mingyu.li@tier4.jp>
1 parent 3bef617 commit 8b03061

File tree

54 files changed

+2205
-1051
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2205
-1051
lines changed

launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml

+57-17
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,84 @@
22
<launch>
33
<arg name="enable_image_decompressor" default="true" description="enable image decompressor"/>
44
<arg name="enable_fine_detection" default="true" description="enable fine position adjustment of traffic light"/>
5-
<arg name="input/image" default="/sensing/camera/traffic_light/image_raw" description="image raw topic name for traffic light"/>
6-
<arg name="input/camera_info" default="/sensing/camera/traffic_light/camera_info" description="camera info topic name for traffic light"/>
7-
<arg name="fine_detector_label_path" default="$(find-pkg-share traffic_light_ssd_fine_detector)/data/voc_labels_tl.txt" description="fine detector label path"/>
8-
<arg name="fine_detector_model_path" default="$(find-pkg-share traffic_light_ssd_fine_detector)/data/mb2-ssd-lite-tlr.onnx" description="fine detector onnx model path"/>
5+
<arg name="fine_detector_label_path" default="$(find-pkg-share traffic_light_fine_detector)/data/tlr_labels.txt" description="fine detector label path"/>
6+
<arg name="fine_detector_model_path" default="$(find-pkg-share traffic_light_fine_detector)/data/tlr_yolox_s.onnx" description="fine detector onnx model path"/>
97
<arg name="classifier_label_path" default="$(find-pkg-share traffic_light_classifier)/data/lamp_labels.txt" description="classifier label path"/>
10-
<arg name="classifier_model_path" default="$(find-pkg-share traffic_light_classifier)/data/traffic_light_classifier_mobilenetv2.onnx" description="classifier onnx model path"/>
8+
<arg name="classifier_model_path" default="$(find-pkg-share traffic_light_classifier)/data/traffic_light_classifier_efficientNet_b1.onnx" description="classifier onnx model path"/>
9+
<arg name="output/traffic_signals" default="/perception/traffic_light_recognition/traffic_signals"/>
1110
<arg name="use_crosswalk_traffic_light_estimator" default="true" description="output pedestrian's traffic light signals"/>
11+
<let name="namespace1" value="camera6"/>
12+
<let name="namespace2" value="camera7"/>
13+
<let name="all_camera_namespaces" value="[$(var namespace1), $(var namespace2)]"/>
14+
<!-- camera 6 TLR pipeline -->
15+
<group>
16+
<push-ros-namespace namespace="$(var namespace1)"/>
17+
<let name="input/image" value="/sensing/camera/$(var namespace1)/image_raw"/>
18+
<let name="input/camera_info" value="/sensing/camera/$(var namespace1)/camera_info"/>
19+
<let name="map_based_detector_output_topic" value="rough/rois" if="$(var enable_fine_detection)"/>
20+
<let name="map_based_detector_output_topic" value="rois" unless="$(var enable_fine_detection)"/>
1221

13-
<group if="$(var enable_fine_detection)">
22+
<node pkg="topic_tools" exec="relay" name="traffic_light_camra_info_relay" args="$(var input/camera_info) camera_info"/>
1423
<include file="$(find-pkg-share traffic_light_map_based_detector)/launch/traffic_light_map_based_detector.launch.xml">
1524
<arg name="input/camera_info" value="$(var input/camera_info)"/>
16-
<arg name="output/rois" value="rough/rois"/>
25+
<arg name="min_timestamp_offset" value="-0.3"/>
26+
<arg name="expect/rois" value="expect/rois"/>
27+
<arg name="output/rois" value="$(var map_based_detector_output_topic)"/>
28+
<arg name="output/camera_info" value="camera_info"/>
29+
</include>
30+
31+
<include file="$(find-pkg-share tier4_perception_launch)/launch/traffic_light_recognition/traffic_light_node_container.launch.py">
32+
<arg name="input/image" value="$(var input/image)"/>
33+
<arg name="enable_image_decompressor" value="$(var enable_image_decompressor)"/>
34+
<arg name="enable_fine_detection" value="$(var enable_fine_detection)"/>
35+
<arg name="use_crosswalk_traffic_light_estimator" value="$(var use_crosswalk_traffic_light_estimator)"/>
36+
<arg name="use_intra_process" value="true"/>
37+
<arg name="use_multithread" value="true"/>
38+
<arg name="fine_detector_label_path" value="$(var fine_detector_label_path)"/>
39+
<arg name="fine_detector_model_path" value="$(var fine_detector_model_path)"/>
40+
<arg name="classifier_label_path" value="$(var classifier_label_path)"/>
41+
<arg name="classifier_model_path" value="$(var classifier_model_path)"/>
1742
</include>
1843
</group>
44+
<!-- camera 7 TLR pipeline -->
45+
<group>
46+
<push-ros-namespace namespace="$(var namespace2)"/>
47+
<let name="input/image" value="/sensing/camera/$(var namespace2)/image_raw"/>
48+
<let name="input/camera_info" value="/sensing/camera/$(var namespace2)/camera_info"/>
49+
<let name="map_based_detector_output_topic" value="rough/rois" if="$(var enable_fine_detection)"/>
50+
<let name="map_based_detector_output_topic" value="rois" unless="$(var enable_fine_detection)"/>
1951

20-
<group unless="$(var enable_fine_detection)">
52+
<node pkg="topic_tools" exec="relay" name="traffic_light_camra_info_relay" args="$(var input/camera_info) camera_info"/>
2153
<include file="$(find-pkg-share traffic_light_map_based_detector)/launch/traffic_light_map_based_detector.launch.xml">
22-
<arg name="output/rois" value="rois"/>
2354
<arg name="input/camera_info" value="$(var input/camera_info)"/>
55+
<arg name="min_timestamp_offset" value="-0.04"/>
56+
<arg name="expect/rois" value="expect/rois"/>
57+
<arg name="output/rois" value="$(var map_based_detector_output_topic)"/>
58+
<arg name="output/camera_info" value="camera_info"/>
2459
</include>
25-
</group>
2660

27-
<!-- classification -->
28-
<group>
2961
<include file="$(find-pkg-share tier4_perception_launch)/launch/traffic_light_recognition/traffic_light_node_container.launch.py">
3062
<arg name="input/image" value="$(var input/image)"/>
3163
<arg name="enable_image_decompressor" value="$(var enable_image_decompressor)"/>
3264
<arg name="enable_fine_detection" value="$(var enable_fine_detection)"/>
3365
<arg name="use_crosswalk_traffic_light_estimator" value="$(var use_crosswalk_traffic_light_estimator)"/>
3466
<arg name="use_intra_process" value="true"/>
3567
<arg name="use_multithread" value="true"/>
36-
<arg name="label_file" value="$(var fine_detector_label_path)"/>
37-
<arg name="onnx_file" value="$(var fine_detector_model_path)"/>
38-
<arg name="label_file_path" value="$(var classifier_label_path)"/>
39-
<arg name="model_file_path" value="$(var classifier_model_path)"/>
68+
<arg name="fine_detector_label_path" value="$(var fine_detector_label_path)"/>
69+
<arg name="fine_detector_model_path" value="$(var fine_detector_model_path)"/>
70+
<arg name="classifier_label_path" value="$(var classifier_label_path)"/>
71+
<arg name="classifier_model_path" value="$(var classifier_model_path)"/>
4072
</include>
4173
</group>
42-
74+
<!-- traffic_light_multi_camera_fusion -->
75+
<group>
76+
<node pkg="traffic_light_multi_camera_fusion" exec="traffic_light_multi_camera_fusion_node" name="traffic_light_multi_camera_fusion" output="screen">
77+
<param name="camera_namespaces" value="$(var all_camera_namespaces)"/>
78+
<param name="perform_group_fusion" value="true"/>
79+
<remap from="~/input/vector_map" to="/map/vector_map"/>
80+
<remap from="~/output/traffic_signals" to="$(var output/traffic_signals)"/>
81+
</node>
82+
</group>
4383
<!-- visualizer -->
4484
<group>
4585
<include file="$(find-pkg-share traffic_light_visualization)/launch/traffic_light_map_visualizer.launch.xml"/>

launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py

+35-38
Original file line numberDiff line numberDiff line change
@@ -35,38 +35,39 @@ def add_launch_arg(name: str, default_value=None, description=None):
3535
DeclareLaunchArgument(name, default_value=default_value, description=description)
3636
)
3737

38-
ssd_fine_detector_share_dir = get_package_share_directory("traffic_light_ssd_fine_detector")
38+
fine_detector_share_dir = get_package_share_directory("traffic_light_fine_detector")
3939
classifier_share_dir = get_package_share_directory("traffic_light_classifier")
4040
add_launch_arg("enable_image_decompressor", "True")
4141
add_launch_arg("enable_fine_detection", "True")
4242
add_launch_arg("input/image", "/sensing/camera/traffic_light/image_raw")
4343

44-
# traffic_light_ssd_fine_detector
44+
# traffic_light_fine_detector
4545
add_launch_arg(
46-
"onnx_file", os.path.join(ssd_fine_detector_share_dir, "data", "mb2-ssd-lite-tlr.onnx")
46+
"fine_detector_model_path",
47+
os.path.join(fine_detector_share_dir, "data", "tlr_yolox_s.onnx"),
4748
)
4849
add_launch_arg(
49-
"label_file", os.path.join(ssd_fine_detector_share_dir, "data", "voc_labels_tl.txt")
50+
"fine_detector_label_path",
51+
os.path.join(fine_detector_share_dir, "data", "tlr_labels.txt"),
5052
)
51-
add_launch_arg("dnn_header_type", "pytorch")
52-
add_launch_arg("fine_detector_precision", "FP32")
53-
add_launch_arg("score_thresh", "0.7")
54-
add_launch_arg("max_batch_size", "8")
53+
add_launch_arg("fine_detector_precision", "fp16")
54+
add_launch_arg("fine_detector_score_thresh", "0.3")
55+
add_launch_arg("fine_detector_nms_thresh", "0.65")
56+
5557
add_launch_arg("approximate_sync", "False")
56-
add_launch_arg("mean", "[0.5, 0.5, 0.5]")
57-
add_launch_arg("std", "[0.5, 0.5, 0.5]")
5858

5959
# traffic_light_classifier
6060
add_launch_arg("classifier_type", "1")
6161
add_launch_arg(
62-
"model_file_path",
63-
os.path.join(classifier_share_dir, "data", "traffic_light_classifier_mobilenetv2.onnx"),
62+
"classifier_model_path",
63+
os.path.join(classifier_share_dir, "data", "traffic_light_classifier_efficientNet_b1.onnx"),
64+
)
65+
add_launch_arg(
66+
"classifier_label_path", os.path.join(classifier_share_dir, "data", "lamp_labels.txt")
6467
)
65-
add_launch_arg("label_file_path", os.path.join(classifier_share_dir, "data", "lamp_labels.txt"))
66-
add_launch_arg("precision", "fp16")
67-
add_launch_arg("input_c", "3")
68-
add_launch_arg("input_h", "224")
69-
add_launch_arg("input_w", "224")
68+
add_launch_arg("classifier_precision", "fp16")
69+
add_launch_arg("classifier_mean", "[123.675, 116.28, 103.53]")
70+
add_launch_arg("classifier_std", "[58.395, 57.12, 57.375]")
7071

7172
add_launch_arg("use_crosswalk_traffic_light_estimator", "True")
7273
add_launch_arg("use_intra_process", "False")
@@ -80,7 +81,7 @@ def create_parameter_dict(*args):
8081

8182
container = ComposableNodeContainer(
8283
name="traffic_light_node_container",
83-
namespace="/perception/traffic_light_recognition",
84+
namespace="",
8485
package="rclcpp_components",
8586
executable=LaunchConfiguration("container_executable"),
8687
composable_node_descriptions=[
@@ -92,12 +93,11 @@ def create_parameter_dict(*args):
9293
create_parameter_dict(
9394
"approximate_sync",
9495
"classifier_type",
95-
"model_file_path",
96-
"label_file_path",
97-
"precision",
98-
"input_c",
99-
"input_h",
100-
"input_w",
96+
"classifier_model_path",
97+
"classifier_label_path",
98+
"classifier_precision",
99+
"classifier_mean",
100+
"classifier_std",
101101
)
102102
],
103103
remappings=[
@@ -195,28 +195,25 @@ def create_parameter_dict(*args):
195195
condition=IfCondition(LaunchConfiguration("enable_image_decompressor")),
196196
)
197197

198-
ssd_fine_detector_param = create_parameter_dict(
199-
"onnx_file",
200-
"label_file",
201-
"dnn_header_type",
202-
"score_thresh",
203-
"max_batch_size",
204-
"approximate_sync",
205-
"mean",
206-
"std",
198+
fine_detector_param = create_parameter_dict(
199+
"fine_detector_model_path",
200+
"fine_detector_label_path",
201+
"fine_detector_precision",
202+
"fine_detector_score_thresh",
203+
"fine_detector_nms_thresh",
207204
)
208-
ssd_fine_detector_param["mode"] = LaunchConfiguration("fine_detector_precision")
209205

210206
fine_detector_loader = LoadComposableNodes(
211207
composable_node_descriptions=[
212208
ComposableNode(
213-
package="traffic_light_ssd_fine_detector",
214-
plugin="traffic_light::TrafficLightSSDFineDetectorNodelet",
215-
name="traffic_light_ssd_fine_detector",
216-
parameters=[ssd_fine_detector_param],
209+
package="traffic_light_fine_detector",
210+
plugin="traffic_light::TrafficLightFineDetectorNodelet",
211+
name="traffic_light_fine_detector",
212+
parameters=[fine_detector_param],
217213
remappings=[
218214
("~/input/image", LaunchConfiguration("input/image")),
219215
("~/input/rois", "rough/rois"),
216+
("~/expect/rois", "expect/rois"),
220217
("~/output/rois", "rois"),
221218
],
222219
extra_arguments=[

perception/crosswalk_traffic_light_estimator/README.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88

99
### Input
1010

11-
| Name | Type | Description |
12-
| ------------------------------------ | -------------------------------------------------------- | ------------------ |
13-
| `~/input/vector_map` | `autoware_auto_mapping_msgs::msg::HADMapBin` | vector map |
14-
| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route |
15-
| `~/input/classified/traffic_signals` | `autoware_auto_perception_msgs::msg::TrafficSignalArray` | classified signals |
11+
| Name | Type | Description |
12+
| ------------------------------------ | ------------------------------------------------ | ------------------ |
13+
| `~/input/vector_map` | `autoware_auto_mapping_msgs::msg::HADMapBin` | vector map |
14+
| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route |
15+
| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | classified signals |
1616

1717
### Output
1818

19-
| Name | Type | Description |
20-
| -------------------------- | -------------------------------------------------------- | --------------------------------------------------------- |
21-
| `~/output/traffic_signals` | `autoware_auto_perception_msgs::msg::TrafficSignalArray` | output that contains estimated pedestrian traffic signals |
19+
| Name | Type | Description |
20+
| -------------------------- | ------------------------------------------------ | --------------------------------------------------------- |
21+
| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | output that contains estimated pedestrian traffic signals |
2222

2323
## Parameters
2424

perception/crosswalk_traffic_light_estimator/include/crosswalk_traffic_light_estimator/node.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
#include <tier4_autoware_utils/tier4_autoware_utils.hpp>
2323

2424
#include <autoware_auto_mapping_msgs/msg/had_map_bin.hpp>
25-
#include <autoware_auto_perception_msgs/msg/traffic_light.hpp>
26-
#include <autoware_auto_perception_msgs/msg/traffic_signal.hpp>
27-
#include <autoware_auto_perception_msgs/msg/traffic_signal_array.hpp>
2825
#include <autoware_planning_msgs/msg/lanelet_route.hpp>
2926
#include <tier4_debug_msgs/msg/float64_stamped.hpp>
27+
#include <tier4_perception_msgs/msg/traffic_light_element.hpp>
28+
#include <tier4_perception_msgs/msg/traffic_signal.hpp>
29+
#include <tier4_perception_msgs/msg/traffic_signal_array.hpp>
3030

3131
#include <lanelet2_core/Attribute.h>
3232
#include <lanelet2_core/LaneletMap.h>
@@ -43,13 +43,13 @@ namespace traffic_light
4343
{
4444

4545
using autoware_auto_mapping_msgs::msg::HADMapBin;
46-
using autoware_auto_perception_msgs::msg::TrafficLight;
47-
using autoware_auto_perception_msgs::msg::TrafficSignal;
48-
using autoware_auto_perception_msgs::msg::TrafficSignalArray;
4946
using autoware_planning_msgs::msg::LaneletRoute;
5047
using tier4_autoware_utils::DebugPublisher;
5148
using tier4_autoware_utils::StopWatch;
5249
using tier4_debug_msgs::msg::Float64Stamped;
50+
using tier4_perception_msgs::msg::TrafficLightElement;
51+
using tier4_perception_msgs::msg::TrafficSignal;
52+
using tier4_perception_msgs::msg::TrafficSignalArray;
5353
using TrafficSignalAndTime = std::pair<TrafficSignal, rclcpp::Time>;
5454
using TrafficLightIdMap = std::unordered_map<lanelet::Id, TrafficSignalAndTime>;
5555

perception/crosswalk_traffic_light_estimator/package.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
<buildtool_depend>autoware_cmake</buildtool_depend>
1212

1313
<depend>autoware_auto_mapping_msgs</depend>
14-
<depend>autoware_auto_perception_msgs</depend>
1514
<depend>autoware_auto_planning_msgs</depend>
1615
<depend>autoware_planning_msgs</depend>
1716
<depend>lanelet2_extension</depend>
1817
<depend>rclcpp</depend>
1918
<depend>rclcpp_components</depend>
2019
<depend>tier4_autoware_utils</depend>
20+
<depend>tier4_perception_msgs</depend>
2121

2222
<test_depend>ament_lint_auto</test_depend>
2323
<test_depend>autoware_lint_common</test_depend>

0 commit comments

Comments
 (0)