Skip to content

Commit 5fec711

Browse files
committed
Add option to reconfigure in order to run continuous clustering single threaded
1 parent 2102a9f commit 5fec711

File tree

7 files changed

+30
-6
lines changed

7 files changed

+30
-6
lines changed

cfg/ContinuousClustering.cfg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ from dynamic_reconfigure.parameter_generator_catkin import *
55

66
gen = ParameterGenerator()
77

8+
general = gen.add_group("General", type="tab")
9+
general.add("is_single_threaded", bool_t, 0, "whether to use just one thread", False)
10+
811
rig = gen.add_group("Range Image Generation", type="tab")
912
rig.add("sensor_is_clockwise", bool_t, 0, "whether the sensor rotates clockwise", True)
1013
rig.add("num_columns", int_t, 0,

include/continuous_clustering/clustering/continuous_clustering.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ enum
2121
GP_FOG = LIGHTGRAY, // ground point: classified as fog
2222
};
2323

24+
struct GeneralConfiguration
25+
{
26+
bool is_single_threaded{false};
27+
};
28+
2429
struct ContinuousRangeImageConfiguration
2530
{
2631
bool sensor_is_clockwise{true};
@@ -74,6 +79,7 @@ struct ContinuousClusteringConfiguration
7479

7580
struct Configuration
7681
{
82+
GeneralConfiguration general{};
7783
ContinuousRangeImageConfiguration range_image{};
7884
ContinuousGroundSegmentationConfiguration ground_segmentation{};
7985
ContinuousClusteringConfiguration clustering{};
@@ -189,7 +195,7 @@ class ContinuousClustering
189195

190196
public:
191197
// general
192-
void reset(int num_rows, bool sequential_execution = false);
198+
void reset(int num_rows);
193199
void setConfiguration(const Configuration& config);
194200
bool resetRequired() const;
195201

launch/demo_touareg.launch

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
<!-- arguments to play directly a rosbag with this launch file -->
99
<arg name="bag_file" default="" doc="path to bag file; if empty no bag file is replayed"/>
1010

11+
<!-- single threaded execution -->
12+
<arg name="is_single_threaded" default="false"/>
13+
1114
<!-- flags for enable/disable individual sensors -->
1215
<arg name="use_vls128_roof" default="true"/>
1316
<arg name="use_os32_left" default="true"/>

launch/sensor_generic.launch

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
<!-- flag if we just want to start rviz without continuous clustering -->
66
<arg name="rviz_only" default="false" doc="whether to start only rviz but nothing else"/>
77

8+
<!-- single threaded execution -->
9+
<arg name="is_single_threaded" default="false"/>
10+
811
<!-- lidar sensor -->
912
<arg name="sensor_manufacturer" doc="available options: velodyne, ouster, kitti"/>
1013
<arg name="sensor_model" doc="arbitrary: e.g. vls128, hdl64, hdl32, os32, kitti ..."/>
1114
<arg name="sensor_position" doc="arbitrary: e.g. roof, left, right"/>
12-
<arg name="sensor_frame" doc="the ROS frame id of the velodyne sensor"/>
15+
<arg name="sensor_frame" doc="the ROS frame id of the velodyne sensor"/>
1316
<arg name="sensor_raw_data_topic" doc="input topic for raw data"/>
1417
<arg name="sensor_is_clockwise" doc="whether the lidar sensor rotates clockwise"/>
1518

@@ -73,6 +76,9 @@
7376
<param name="ego_robot_frame" value="$(arg ego_robot_frame)"/>
7477
<param name="odom_frame" value="$(arg odom_frame)"/>
7578

79+
<!-- general -->
80+
<param name="is_single_threaded" value="$(arg is_single_threaded)"/>
81+
7682
<!-- range image -->
7783
<param name="num_columns" value="$(arg num_columns)"/>
7884
<param name="wait_for_tf" value="$(arg wait_for_tf)"/>

src/clustering/continuous_clustering.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace continuous_clustering
88

99
ContinuousClustering::ContinuousClustering() = default;
1010

11-
void ContinuousClustering::reset(int num_rows, bool sequential_execution)
11+
void ContinuousClustering::reset(int num_rows)
1212
{
1313
// recalculate some intermediate values in case the parameters have changed
1414
num_columns_ = config_.range_image.num_columns;
@@ -46,8 +46,8 @@ void ContinuousClustering::reset(int num_rows, bool sequential_execution)
4646
sc_inclination_angles_between_lasers_.resize(num_rows, std::nanf(""));
4747

4848
// re-initialize workers
49-
int num_treads = sequential_execution ? 0 : 1;
50-
int num_treads_pub = sequential_execution ? 0 : 3;
49+
int num_treads = config_.general.is_single_threaded ? 0 : 1;
50+
int num_treads_pub = config_.general.is_single_threaded ? 0 : 3;
5151
insertion_thread_pool.init(
5252
[this](InsertionJob&& job) { insertFiringIntoRangeImage(std::forward<InsertionJob>(job)); }, num_treads);
5353
segmentation_thread_pool.init([this](SegmentationJob&& job)
@@ -66,6 +66,8 @@ void ContinuousClustering::reset(int num_rows, bool sequential_execution)
6666
void ContinuousClustering::setConfiguration(const Configuration& config)
6767
{
6868
// some parameter changes need a hard reset
69+
if (config_.general.is_single_threaded != config.general.is_single_threaded)
70+
reset_required = true;
6971
if (config_.range_image.sensor_is_clockwise != config.range_image.sensor_is_clockwise)
7072
reset_required = true;
7173
if (config_.range_image.num_columns != config.range_image.num_columns)

src/ros/continuous_clustering_node.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ class RosContinuousClustering
185185
else if (config_.ground_segmentation.use_terrain && !config.use_terrain)
186186
sub_terrain.shutdown();
187187

188+
// general config
189+
config_.general.is_single_threaded = config.is_single_threaded;
190+
188191
// config for range image
189192
config_.range_image.sensor_is_clockwise = config.sensor_is_clockwise;
190193
config_.range_image.num_columns = config.num_columns;

src/tools/kitti_demo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ class KittiDemo
277277

278278
// init some other configs
279279
Configuration config;
280+
config.general.is_single_threaded = true;
280281
config.range_image.num_columns = 2200;
281282
config.clustering.ignore_points_in_chessboard_pattern = false;
282283
config.clustering.max_distance = 0.5;
@@ -289,7 +290,7 @@ class KittiDemo
289290
config.ground_segmentation.width_ref_to_left_mirror_ = 1.5;
290291
config.ground_segmentation.width_ref_to_right_mirror_ = -1.5;
291292
clustering.setConfiguration(config);
292-
clustering.reset(64, true);
293+
clustering.reset(64);
293294
clustering.setTransformRobotFrameFromSensorFrame(Eigen::Isometry3d::Identity());
294295

295296
// add callbacks

0 commit comments

Comments
 (0)