Skip to content

Commit

Permalink
Merge pull request #76 from jingyi-xiang/master
Browse files Browse the repository at this point in the history
updated readme; made all parameters mentioned in the paper configurable
  • Loading branch information
jingyi-xiang committed Aug 12, 2023
2 parents 224c773 + 3d9d8c5 commit c3ef9bc
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 259 deletions.
22 changes: 14 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
<p align="center">
<img src="images/trackdlo.png" width="600" title="TrackDLO">
<p align="left">
<img src="images/trackdlo.png" width="250" title="TrackDLO">
</p>

This repository contains the TrackDLO Robot Operating System (ROS) package. The TrackDLO ROS package is an implementation of our paper *TrackDLO: Tracking Deformable Linear Objects Under Occlusion with Motion Coherence* (under review) by Jingyi Xiang, Holly Dinkel, Harry Zhao, Naixiang Gao, Brian Coltin, Trey Smith, and Timothy Bretl. The TrackDLO algorithm is implemented in C++.
## TrackDLO: Tracking Deformable Linear Objects Under Occlusion with Motion Coherence
**IEEE Robotics and Automation Letters (IEEE Xplore: https://ieeexplore.ieee.org/document/10214157)**

This repository contains the TrackDLO Robot Operating System (ROS) package. The TrackDLO ROS package is an implementation of our paper, *TrackDLO: Tracking Deformable Linear Objects Under Occlusion with Motion Coherence*, by Jingyi Xiang, Holly Dinkel, Harry Zhao, Naixiang Gao, Brian Coltin, Trey Smith, and Timothy Bretl. The TrackDLO algorithm is implemented in C++.

<p align="center">
<img src="images/trackdlo1.gif" width="800" title="TrackDLO">
Expand All @@ -19,14 +22,17 @@ See the [requirements and run instructions](https://github.com/RMDLO/trackdlo/bl

To learn more about TrackDLO, watch our [supplementary video](https://www.youtube.com/watch?v=MxqNJsen5eg&t) and read our [supplemental documentation](https://github.com/RMDLO/trackdlo/blob/master/docs/LEARN_MORE.md).

## Bibtex:
## Bibtex

```bash
@inproceedings{xiang2023trackdlo,
title={TrackDLO: Tracking Deformable Linear Objects Under Occlusion with Motion Coherence},
@ARTICLE{10214157,
author={Xiang, Jingyi and Dinkel, Holly and Zhao, Harry and Gao, Naixiang and Coltin, Brian and Smith, Trey and Bretl, Timothy},
booktitle={IEEE Robotics and Automation: Letters},
pages={1--8},
journal={IEEE Robotics and Automation Letters},
title={TrackDLO: Tracking Deformable Linear Objects Under Occlusion with Motion Coherence},
year={2023},
volume={},
number={},
pages={1-8},
doi={10.1109/LRA.2023.3303710}
}
```
51 changes: 15 additions & 36 deletions launch/trackdlo.launch
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,10 @@
<!-- <arg name="hsv_threshold_lower_limit" default="100 200 60" /> -->
<arg name="hsv_threshold_lower_limit" default="90 90 30" />
<!-- <arg name="hsv_threshold_lower_limit" default="90 90 90" /> -->
<arg name="num_of_nodes" default="25" />
<arg name="num_of_nodes" default="45" />
<arg name="visualize_initialization_process" default="false" />

<!-- modifying the below parameters is usually not needed -->
<!-- kernel: 0 -> Laplacian; 1 -> 1st order; 2nd -> 2nd order; 3 -> Gaussian -->
<arg name="kernel" default="1" />
<arg name="multi_color_dlo" default="false" />

<!-- the below arg is for quick sanity checking with GLTP.
it should ALWAYS be set to FALSE when running TrackDLO -->
<arg name="gltp" default="false" />

<!-- load parameters to corresponding nodes -->
<node name="trackdlo" pkg="trackdlo" type="trackdlo" output="screen">
<param name="camera_info_topic" type="string" value="$(arg camera_info_topic)" />
Expand All @@ -32,24 +24,12 @@
<param name="hsv_threshold_lower_limit" type="string" value="$(arg hsv_threshold_lower_limit)" />

<!-- beta and lambda: MCT weights. the larger they are, the more rigid the object becomes -->
<param name="beta" value="1" if="$(eval arg('kernel') == 0)"/>
<param name="lambda" value="50000" if="$(eval arg('kernel') == 0)"/>

<param name="beta" value="0.35" if="$(eval arg('kernel') == 1)"/>
<param name="lambda" value="50000" if="$(eval arg('kernel') == 1)"/>

<param name="beta" value="0.3" if="$(eval arg('kernel') == 2)"/>
<param name="lambda" value="50000" if="$(eval arg('kernel') == 2)"/>

<param name="beta" value="0.2" if="$(eval arg('kernel') == 3)"/>
<param name="lambda" value="50000" if="$(eval arg('kernel') == 3)"/>
<param name="beta" value="0.35" />
<param name="lambda" value="50000" />

<!-- alpha: the alignment strength -->
<param name="alpha" value="3" />

<!-- note that LLE is only used in the registration in the distance preservation step -->
<param name="lle_weight" value="10.0" />

<!-- mu: ranges from 0 to 1, large mu indicates the point cloud is noisy -->
<param name="mu" value="0.1" />

Expand All @@ -62,23 +42,22 @@
<!-- k_vis: the strength of visibility information's effect on membership probability computation -->
<param name="k_vis" value="50" />

<!-- set to false in the registration step because we did not have space in the paper to discuss LLE -->
<param name="include_lle" value="false" />
<!-- d_vis: the max geodesic distance between two adjacent visible nodes for the nodes between them to be considered visible -->
<param name="d_vis" value="0.06" />

<!-- if set to true,
replace the Euclidean distances in kernel and posterior calculations with geodesic distances -->
<param name="use_geodesic" value="true" />
<!-- visibility_threshold (tau_vis): the max distance a node can be away from the current point cloud to be considered visible -->
<param name="visibility_threshold" type="double" value="0.008" />

<!-- dlo_pixel_width (w): the approximate dlo width when projected onto 2D -->
<param name="dlo_pixel_width" value="40" />

<!-- below are parameters for the GLTP registration during pre-processing -->
<param name="beta_pre_proc" value="3.0" />
<param name="lambda_pre_proc" value="1.0" />
<param name="lle_weight" value="10.0" />

<!-- if set to true,
use the last registration step's sigma^2 to initialize the current registration's sigma^2 -->
<param name="use_prev_sigma2" value="true" />

<param name="kernel" value="$(arg kernel)" />
<param name="downsample_leaf_size" value="0.008" />
<param name="multi_color_dlo" type="bool" value="$(arg multi_color_dlo)" />
<param name="visibility_threshold" type="double" value="0.008" />
<param name="dlo_pixel_width" value="40" />
<param name="gltp" type="bool" value="$(arg gltp)" />
</node>

<!-- launch python node for initialization -->
Expand Down
45 changes: 19 additions & 26 deletions trackdlo/include/trackdlo.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,17 @@ class trackdlo
trackdlo(int num_of_nodes);
// fancy constructor
trackdlo(int num_of_nodes,
double visibility_threshold,
double beta,
double lambda,
double alpha,
double gamma,
double k_vis,
double mu,
int max_iter,
const double tol,
bool include_lle,
bool use_geodesic,
bool use_prev_sigma2,
int kernel);
double visibility_threshold,
double beta,
double lambda,
double alpha,
double k_vis,
double mu,
int max_iter,
double tol,
double beta_pre_proc,
double lambda_pre_proc,
double lle_weight);

double get_sigma2();
MatrixXd get_tracking_result();
Expand All @@ -80,27 +78,23 @@ class trackdlo
void initialize_nodes (MatrixXd Y_init);
void set_sigma2 (double sigma2);

bool cpd_lle (MatrixXd X,
bool cpd_lle (MatrixXd X_orig,
MatrixXd& Y,
double& sigma2,
double beta,
double lambda,
double gamma,
double lle_weight,
double mu,
int max_iter = 30,
double tol = 0.00001,
double tol = 0.0001,
bool include_lle = true,
bool use_geodesic = false,
bool use_prev_sigma2 = false,
bool use_ecpd = false,
std::vector<MatrixXd> correspondence_priors = {},
double alpha = 0,
int kernel = 3,
std::vector<int> visible_nodes = {},
double k_vis = 0,
double visibility_threshold = 0.01);

void tracking_step (MatrixXd X,
void tracking_step (MatrixXd X_orig,
std::vector<int> visible_nodes,
std::vector<int> visible_nodes_extended,
MatrixXd proj_matrix,
Expand All @@ -112,17 +106,16 @@ class trackdlo
MatrixXd guide_nodes_;
double sigma2_;
double beta_;
double beta_pre_proc_;
double lambda_;
double lambda_pre_proc_;
double alpha_;
double lle_weight_;
double k_vis_;
double mu_;
int max_iter_;
double tol_;
bool include_lle_;
bool use_geodesic_;
bool use_prev_sigma2_;
int kernel_;
double lle_weight_;

std::vector<double> geodesic_coord_;
std::vector<MatrixXd> correspondence_priors_;
double visibility_threshold_;
Expand Down
Loading

0 comments on commit c3ef9bc

Please sign in to comment.