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

Full review #2

Closed
wants to merge 251 commits into from
Closed
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
251 commits
Select commit Hold shift + click to select a range
f0ea20f
Robustify against negative dt values
Timple Aug 3, 2021
a8f45bd
Merge pull request #1 from nobleo/bugfix/HARVEY-812-negative-dt
Timple Aug 3, 2021
727ad5f
Make init-vel threshold tunable so users can pick a value for their a…
Aug 16, 2021
81b78b9
Merge pull request #3 from nobleo/fix/init_vel_threshold_tunable
MCFurry Aug 16, 2021
86e2dcf
2.16.0
Timple Aug 20, 2021
c6edd9c
Merge pull request #4 from nobleo/release/2.16.0
Timple Aug 21, 2021
503603d
Enable industrial CI
Timple Aug 23, 2021
5bb319c
See if noetic fails as well
Timple Aug 23, 2021
388bc15
Relax the criterium a bit
Timple Aug 23, 2021
709a2d2
Merge pull request #5 from nobleo/industrial-ci
Timple Sep 22, 2021
aed0080
Fix backwards cancel bug and add test for it
Dec 1, 2021
ada695d
Fix test!?
Dec 1, 2021
00202b4
Merge pull request #7 from nobleo/fix/HARVEY-855-cancel-on-backward-turn
MCFurry Dec 3, 2021
18146c1
Fix acceleration/deceleration switching in reverse driving
Jan 20, 2022
fa60109
Add ugly test for checking forward and reverse acceleration/decelerat…
Jan 20, 2022
8876ba8
Slight test improvements
Jan 20, 2022
c26e5cf
Change accel/decel check in test
Jan 25, 2022
39c0a10
Try fix test?
Jan 25, 2022
bdf0057
This seems to fix the tests?
Jan 26, 2022
6bb3f8b
using sign() function here is not necessary...
Jan 26, 2022
e6f4fcb
sign() function not needed here
Jan 27, 2022
1812b07
Cleanup unused dependencies
Rayman Jan 28, 2022
12dc7f0
Fix compile warnings
Rayman Jan 28, 2022
916de0f
Merge pull request #13 from nobleo/fix/compile-warnings
Rayman Jan 28, 2022
39b4b70
Cleanup header files
Rayman Jan 28, 2022
47806e2
fix: Use target_x_vel to determine collision look ahead direction
PaulVerhoeckx Feb 1, 2022
c088ff1
fix: Prevent configuring a collision check resolution of zero
PaulVerhoeckx Feb 1, 2022
77eca58
fix: Prevent dividing by zero when collision_look_ahead_distance is zero
PaulVerhoeckx Feb 1, 2022
a522def
Merge pull request #18 from nobleo/fix/prevent-devisions-by-zero
PaulVerhoeckx Feb 1, 2022
b255c38
Merge pull request #11 from nobleo/fix/HARVEY-939-acc-dec-switched-in…
MCFurry Feb 1, 2022
45d2bb3
fix: Use absolute largest velocity to determine collision look ahead …
PaulVerhoeckx Feb 3, 2022
9c12e68
Merge pull request #14 from nobleo/refactor/cleanup-headers
Rayman Feb 7, 2022
a0f0c64
Merge pull request #15 from nobleo/fix/collision-look-ahead-length-of…
PaulVerhoeckx Feb 9, 2022
e82ce1a
fix: check predicted footprints for LETHAL_OBSTACLE instead of INSCRI…
rokusottervanger Feb 2, 2022
05ee28a
fix: make velocity scaledown consider costmap only at predicted base_…
rokusottervanger Feb 2, 2022
3cc2b53
test: make tracking error assessment configurable
rokusottervanger Feb 3, 2022
12f8c95
test: disregard final tracking error in lethal obstacle test
rokusottervanger Feb 3, 2022
45f3092
Refactor visualization to a separate class
Rayman Jan 28, 2022
b1f969c
Merge pull request #23 from nobleo/refactor/visualization
Rayman Feb 14, 2022
53c1f5e
Fixed signed/unsigned comparisons.
lewie-donckers Feb 9, 2022
d1d5f47
Stricter compiler settings.
lewie-donckers Feb 9, 2022
fae6229
fixup! Refactor visualization to a separate class
Rayman Feb 14, 2022
f976942
Let the test fail if exceptions occur in vis_cb
Rayman Feb 14, 2022
9698b4e
Merge pull request #25 from nobleo/cleanup/fix-signed-unsigned-compar…
lewie-donckers Feb 15, 2022
f603fec
Reworked to add_compile_options().
lewie-donckers Feb 15, 2022
1495813
Merge pull request #26 from nobleo/cleanup/stricter-compiler-settings
lewie-donckers Feb 15, 2022
36cacd9
Switched to enum classes.
lewie-donckers Feb 9, 2022
1b54e83
Forgot pragma once.
lewie-donckers Feb 15, 2022
a992823
Replaced macros with constants.
lewie-donckers Feb 9, 2022
bdd6340
Merge pull request #27 from nobleo/cleanup/switched-to-enum-classes
lewie-donckers Feb 15, 2022
fe6ba23
Reworked formatting.
lewie-donckers Feb 15, 2022
717ea77
Merge pull request #24 from nobleo/fix/index-error
Rayman Feb 15, 2022
14b5e5e
Merge pull request #28 from nobleo/cleanup/replaced-macros-with-const…
lewie-donckers Feb 15, 2022
20e290b
Quaternion of carrotTF was not initialized, set to proper value
Feb 15, 2022
74f8080
Moved constants to reduce scope.
lewie-donckers Feb 9, 2022
fb96a3d
Merge pull request #29 from nobleo/cleanup/reduced-scope-of-constants
lewie-donckers Feb 16, 2022
2039749
Moved helper function.
lewie-donckers Feb 9, 2022
ce62ab5
Merge pull request #30 from nobleo/cleanup/reduced-scope-of-helper-fu…
lewie-donckers Feb 16, 2022
e7fa49a
Replaced C-style arrays.
lewie-donckers Feb 9, 2022
5706086
Fully initialize at once
Feb 16, 2022
931900d
Merge pull request #31 from nobleo/cleanup/replaced-c-style-arrays
lewie-donckers Feb 16, 2022
2cd5400
Remove unsused member variables.
lewie-donckers Feb 9, 2022
733488f
Mark overriden member functions as such.
lewie-donckers Feb 9, 2022
2008bd6
Distinguish between system and normal headers.
lewie-donckers Feb 9, 2022
00b4b43
Even stricter compiler settings.
lewie-donckers Feb 9, 2022
2611f8b
Replaced bind with lambda.
lewie-donckers Feb 9, 2022
6dfab7e
Merge pull request #32 from nobleo/cleanup/removed-unused-member-vari…
lewie-donckers Feb 16, 2022
7afa0d7
Merge pull request #34 from nobleo/cleanup/mark-overridden-functions
lewie-donckers Feb 16, 2022
ce5559e
Merge pull request #36 from nobleo/cleanup/distinguish-between-system…
lewie-donckers Feb 16, 2022
b5c1391
Merge pull request #47 from nobleo/fix/tf2_tf_not_properly_initialized
MCFurry Feb 16, 2022
e8f1b80
Merge pull request #37 from nobleo/cleanup/even-stricter-compiler-set…
lewie-donckers Feb 16, 2022
c03098f
Merge pull request #39 from nobleo/cleanup/replaced-bind-with-lambda
lewie-donckers Feb 16, 2022
7f18225
Replaced member variables with locals.
lewie-donckers Feb 9, 2022
e107cb9
Replaced member variable with local.
lewie-donckers Feb 9, 2022
4cadb68
Replaced member variables with constants.
lewie-donckers Feb 9, 2022
7841bdc
Ignore Python cache files.
lewie-donckers Feb 9, 2022
941217e
Reworked by moving gitignore.
lewie-donckers Feb 16, 2022
982d02c
Switched to std::clamp().
lewie-donckers Feb 9, 2022
aa1196e
Merge pull request #42 from nobleo/cleanup/replaced-member-variables-…
lewie-donckers Feb 16, 2022
25b3c7a
Merge pull request #43 from nobleo/cleanup/replaced-another-member-va…
lewie-donckers Feb 16, 2022
c2e5cdb
Merge pull request #45 from nobleo/cleanup/ignore-python-cache-files
lewie-donckers Feb 16, 2022
38a6b98
Merge pull request #44 from nobleo/cleanup/replaced-member-variables-…
lewie-donckers Feb 16, 2022
6396a14
Merge pull request #46 from nobleo/feature/use-std-clamp
lewie-donckers Feb 16, 2022
6b2264f
Explicitly disabled copy/move.
lewie-donckers Feb 9, 2022
b0a26ef
Reworked by switching to Boost.
lewie-donckers Feb 16, 2022
d1b3003
Removed dead code.
lewie-donckers Feb 9, 2022
120ffb6
Remove dead code.
lewie-donckers Feb 9, 2022
1cf7b91
Fixed signed/unsigned conversion warnings.
lewie-donckers Feb 10, 2022
1c32dda
Reworked to keep old behavior.
lewie-donckers Feb 16, 2022
6027dbf
Ensure all members are initialized.
lewie-donckers Feb 10, 2022
a76bf4e
Merge pull request #41 from nobleo/cleanup/explicitly-disable-copy-move
lewie-donckers Feb 17, 2022
b09a16e
Merge pull request #50 from nobleo/cleanup/removed-dead-code
lewie-donckers Feb 17, 2022
639ca65
Merge pull request #51 from nobleo/cleanup/removed-more-dead-code
lewie-donckers Feb 17, 2022
5c57eaf
Merge pull request #52 from nobleo/cleanup/fix-clang-tidy-signed-unsi…
lewie-donckers Feb 17, 2022
4dfa410
Reworked to different defaults.
lewie-donckers Feb 17, 2022
8cc7cf7
Merge pull request #53 from nobleo/cleanup/initialize-all-members
lewie-donckers Feb 17, 2022
17e5ddd
Fix possible unsigned underflow
Rayman Feb 17, 2022
3e85956
Added clang-tidy and fixed all warnings.
lewie-donckers Feb 16, 2022
c97e697
Reworked to use const& for big types.
lewie-donckers Feb 17, 2022
3867198
Reworked to exclude uninitialized variables.
lewie-donckers Feb 17, 2022
a9b2340
Use std::exchange().
lewie-donckers Feb 14, 2022
d9afec6
Added FifoArray abstraction.
lewie-donckers Feb 10, 2022
5c3178f
Added filtered error tracker abstraction.
lewie-donckers Feb 10, 2022
1f7a674
Reworked by renaming to SecondOrderLowpass.
lewie-donckers Feb 17, 2022
c218440
Merge pull request #55 from nobleo/cleanup/clang-tidy
lewie-donckers Feb 17, 2022
c68441d
Merge pull request #56 from nobleo/cleanup/use-std-exchange
lewie-donckers Feb 17, 2022
ee40fe0
Const locals when possible.
lewie-donckers Feb 11, 2022
367d68f
Replaced helper function sign().
lewie-donckers Feb 16, 2022
41ac8bb
Added to_transform() helper.
lewie-donckers Feb 17, 2022
4afeb4c
Merge pull request #68 from nobleo/fix/possible-unsigned-underflow
Rayman Feb 18, 2022
d45ff62
Merge pull request #57 from nobleo/cleanup/add-fifo-array-abstraction
lewie-donckers Feb 21, 2022
0bb2c08
Merge pull request #58 from nobleo/cleanup/add-filtered-error-tracker…
lewie-donckers Feb 21, 2022
abb0127
Merge pull request #60 from nobleo/cleanup/const-local-variables
lewie-donckers Feb 21, 2022
322e85b
Merge pull request #61 from nobleo/cleanup/replaced-helper-function
lewie-donckers Feb 21, 2022
8162623
Merge pull request #62 from nobleo/cleanup/added-to-transform-helper
lewie-donckers Feb 21, 2022
4d80e50
Moved distSquared() helpers.
lewie-donckers Feb 17, 2022
f267837
Reworked by switching to distance2().
lewie-donckers Feb 21, 2022
6b0b435
Merge pull request #63 from nobleo/cleanup/moved-dist-squared-helpers
lewie-donckers Feb 21, 2022
5224fa1
Added is_pose_angle_obtuse() helper.
lewie-donckers Feb 17, 2022
c033dc8
Removed config duplicate members.
lewie-donckers Feb 14, 2022
35a3250
Used ROS2 clang-format on all files.
lewie-donckers Feb 17, 2022
6f154fe
Cleaned up includes.
lewie-donckers Feb 9, 2022
07f8346
Merge pull request #64 from nobleo/cleanup/added-is-obtuse-helper
lewie-donckers Feb 21, 2022
a2d772a
Merge pull request #66 from nobleo/cleanup/removed-config-duplicate-m…
lewie-donckers Feb 21, 2022
a11a446
Merge pull request #67 from nobleo/cleanup/clang-format
lewie-donckers Feb 21, 2022
338f321
Merge pull request #40 from nobleo/cleanup/cleanup-includes
lewie-donckers Feb 21, 2022
cf7e1b2
Extracted filter_plan() function.
lewie-donckers Feb 21, 2022
b491f68
Added unittests for FifoArray.
lewie-donckers Feb 21, 2022
3e46d5f
Reworked by moving test source files.
lewie-donckers Feb 21, 2022
70a6b86
Enable VERBOSE_TESTS
Rayman Feb 21, 2022
ec8c881
Merge pull request #73 from nobleo/cleanup/extract-function-filter-plan
lewie-donckers Feb 22, 2022
feeeb15
Merge pull request #74 from nobleo/cleanup/unittest_fifo_array
lewie-donckers Feb 22, 2022
5dacfef
Merge pull request #77 from nobleo/feature/verbose-tests
Rayman Feb 22, 2022
c33c2eb
Enable roslint
Rayman Feb 22, 2022
c7e973a
Disable whitespace/braces check
Rayman Feb 22, 2022
32f9d89
Fix roslint
Rayman Feb 22, 2022
61c6cc8
Merge pull request #78 from nobleo/fix/enable-roslint
Rayman Feb 22, 2022
9fc9c64
Refactored output parameters of update.
lewie-donckers Feb 23, 2022
fb18c46
Refactored output parameters of distToSegmentSquared().
lewie-donckers Feb 23, 2022
2f38340
Refactored distToSegmentSquared().
lewie-donckers Feb 23, 2022
5c81ea7
Refactored findPositionOnPlan().
lewie-donckers Feb 23, 2022
27794c5
Reworked by adding documentation.
lewie-donckers Feb 24, 2022
029012c
Reworked by switching to std::clamp().
lewie-donckers Feb 24, 2022
60febdb
Merge pull request #84 from nobleo/cleanup/refactored-output-paramete…
lewie-donckers Feb 24, 2022
0b0aa98
Merge pull request #85 from nobleo/cleanup/refactored-output-paramete…
lewie-donckers Feb 24, 2022
292baa9
Merge pull request #91 from nobleo/cleanup/refactored-distToSegmentSq…
lewie-donckers Feb 24, 2022
3a50bc1
Merge pull request #92 from nobleo/cleanup/refactored-findPositionOnPlan
lewie-donckers Feb 24, 2022
dad418d
Refactored mandatory ptr parameter to reference.
lewie-donckers Feb 21, 2022
edb060d
Merge pull request #76 from nobleo/cleanup/refactored-mandatory-ptr-p…
lewie-donckers Feb 24, 2022
05e3c26
Split loop into 3.
lewie-donckers Feb 23, 2022
a97a7f6
Replaced some loops with algorithms.
lewie-donckers Feb 23, 2022
eadc778
Extracted deltas_of_plan().
lewie-donckers Feb 24, 2022
61bd1c1
Keep RosLint happy.
lewie-donckers Feb 24, 2022
9553a44
Extracted distances_to_goal().
lewie-donckers Feb 24, 2022
727444b
Extracted inverse_turning_radiuses().
lewie-donckers Feb 24, 2022
f3c81ec
Keep RosLint happy.
lewie-donckers Feb 24, 2022
454f586
Refactored setTricycleModel().
lewie-donckers Feb 24, 2022
3226551
Refactored setPlan().
lewie-donckers Feb 24, 2022
c060190
Refactored findPositionOnPlan().
lewie-donckers Feb 24, 2022
02c0e8b
Refactored last Controller functions().
lewie-donckers Feb 24, 2022
591d815
Removed unnecessary conversions.
lewie-donckers Feb 24, 2022
79a04e8
Removed global_plan_ member.
lewie-donckers Feb 24, 2022
f75275f
Merge pull request #95 from nobleo/cleanup/refactored-setPlan
lewie-donckers Feb 28, 2022
c72feae
Merge pull request #96 from nobleo/cleanup/extracted-setPlan-calculat…
lewie-donckers Feb 28, 2022
056f450
Merge pull request #98 from nobleo/cleanup/extracted-setPlan-calculat…
lewie-donckers Feb 28, 2022
74833d5
Merge pull request #99 from nobleo/cleanup/extracted-setPlan-calculat…
lewie-donckers Feb 28, 2022
dd16487
Moved visualization.
lewie-donckers Feb 28, 2022
2a0762e
Reworked by renaming local variable.
lewie-donckers Feb 28, 2022
d2bcbbd
Keep clang-tidy happy.
lewie-donckers Feb 28, 2022
5f3c36e
Merge pull request #109 from nobleo/cleanup/calculations-clang-tidy-fix
lewie-donckers Feb 28, 2022
8366354
2.18.0
Timple Mar 1, 2022
fea81ec
Merge branch 'main' into fix/controller-is-too-conservative-in-its-co…
rokusottervanger Mar 1, 2022
68ab94d
Merge pull request #100 from nobleo/fix/97-refactored-setTricycleModel
lewie-donckers Mar 2, 2022
8478161
Merge pull request #101 from nobleo/fix/97-refactored-setPlan
lewie-donckers Mar 2, 2022
e9b5da2
Merge pull request #102 from nobleo/fix/97-refactored-findPositionOnPlan
lewie-donckers Mar 2, 2022
64f450d
Merge pull request #103 from nobleo/fix/97-refactored-update
lewie-donckers Mar 2, 2022
9185c3b
Merge pull request #104 from nobleo/fix/97-removed-unnecessary-conver…
lewie-donckers Mar 2, 2022
0601627
Merge pull request #105 from nobleo/fix/97-removed-global-plan-member
lewie-donckers Mar 2, 2022
ff653a6
Merge pull request #106 from nobleo/fix/38-move-visualization
lewie-donckers Mar 3, 2022
2e9447e
Refactor collision visualization functions
Rayman Mar 2, 2022
6bd6587
Remove unnecessary marker ids
Rayman Mar 3, 2022
7c24fc5
Refactor std::transform calls into a separate function
Rayman Mar 3, 2022
33b0262
Simplified the calculation of goal direction.
lewie-donckers Feb 28, 2022
c70762c
Reworked to separate function.
lewie-donckers Mar 3, 2022
c8da2a2
Switched to old GTest syntax for melodic.
lewie-donckers Mar 3, 2022
9e329e8
Fix for melodic that is compatible with noetic.
lewie-donckers Mar 3, 2022
1a77a2f
Disable nav_core::BaseLocalPlanner support.
lewie-donckers Feb 28, 2022
5b0f1b8
Removed unnecessary nav_core references.
lewie-donckers Feb 28, 2022
25305c3
Controller no longer changes plan.
lewie-donckers Feb 28, 2022
b649534
Reworked by changing logging to error.
lewie-donckers Mar 2, 2022
5aad0ec
Replaced data member with local.
lewie-donckers Mar 1, 2022
efcda2c
Removed NOLINT.
lewie-donckers Mar 1, 2022
16acb5e
Refactored output parameter.
lewie-donckers Mar 1, 2022
c615c89
Reworked by adding comment.
lewie-donckers Mar 3, 2022
ed9caa3
Refactor to use color names
Rayman Mar 4, 2022
a09706b
Merge pull request #118 from nobleo/fix/38-move-visualization-refactored
Rayman Mar 7, 2022
b986bc9
Merge pull request #108 from nobleo/fix/82-simplify-goal-direction-ca…
lewie-donckers Mar 7, 2022
00009ed
Merge pull request #110 from nobleo/fix/90-disable-base-local-planner…
lewie-donckers Mar 7, 2022
0101afd
Merge pull request #111 from nobleo/fix/86-controller-no-longer-chang…
lewie-donckers Mar 7, 2022
08b7a12
Merge pull request #113 from nobleo/cleanup/planner-replaced-data-mem…
lewie-donckers Mar 7, 2022
22e3cb0
Merge pull request #114 from nobleo/cleanup/removed-nolint
lewie-donckers Mar 7, 2022
3173444
Merge pull request #115 from nobleo/cleanup/planner-refactor-output-p…
lewie-donckers Mar 7, 2022
660ff55
Merge branch 'main' into fix/controller-is-too-conservative-in-its-co…
rokusottervanger Mar 7, 2022
6ceb953
Moved distSquared and added tests.
lewie-donckers Mar 8, 2022
b9067ef
Made distToSegmentSquared static.
lewie-donckers Mar 8, 2022
fb79ba8
Merge pull request #20 from nobleo/fix/controller-is-too-conservative…
rokusottervanger Mar 8, 2022
8dde3a8
Clarify init_vel_max_diff check
Timple Feb 15, 2022
dac1ff0
Rokus comments
Timple Mar 9, 2022
c13602f
Reworked by renaming data member.
lewie-donckers Mar 14, 2022
9d12eda
Refactor name and output of distToSegmentSquared.
lewie-donckers Mar 8, 2022
d196881
Move, refactor and test closestPointOnSegment().
lewie-donckers Mar 10, 2022
8ab5a25
Reworked by renaming function.
lewie-donckers Mar 14, 2022
b576661
Merge pull request #130 from nobleo/refactor/122-move-distSquared
lewie-donckers Mar 14, 2022
f04dcb5
Merge pull request #131 from nobleo/refactor/122-make-distToSegmentSq…
lewie-donckers Mar 14, 2022
a7d16ca
Merge pull request #132 from nobleo/refactor/122-rename-distToSegment…
lewie-donckers Mar 14, 2022
04d8458
Merge pull request #133 from nobleo/refactor/122-move-test-closestPoi…
lewie-donckers Mar 14, 2022
ff5bb45
Fix lowpass & refactor filter structure
Rayman Feb 25, 2022
d5fdccb
Enable feedforward_ang during testing for lower error
Rayman Mar 3, 2022
f63223e
Add integral filter abstraction
Rayman Mar 4, 2022
b485259
Add reset() and configure() tests
Rayman Mar 7, 2022
d424e22
Increase timeout to reduce test flakeyness
Rayman Mar 7, 2022
3ada333
Merge pull request #119 from nobleo/fix/lowpass
Rayman Mar 14, 2022
b084218
Cleanup Controller::update().
lewie-donckers Mar 15, 2022
be0176d
Replaced path pose parameter with return value.
lewie-donckers Mar 15, 2022
e9701f3
Made Controller::findPositionOnPlan() const.
lewie-donckers Mar 15, 2022
9d4b602
Replaced distance_to_goal_ data member with local.
lewie-donckers Mar 15, 2022
b7e143c
Moved last visited pose index to find result.
lewie-donckers Mar 15, 2022
3ac6955
Replaced controller_state parameter of findPositionOnPlan().
lewie-donckers Mar 15, 2022
cd11f02
Replaced Controller::getControllerState().
lewie-donckers Mar 15, 2022
a9db24d
Renamed position to pose for findPositionOnPlan.
lewie-donckers Mar 17, 2022
c0e7d15
Merge pull request #135 from nobleo/fix/123-cleanup-update
lewie-donckers Mar 17, 2022
13aad0a
Merge pull request #136 from nobleo/fix/123-replace-path-pose-parameter
lewie-donckers Mar 17, 2022
536a557
Merge pull request #137 from nobleo/fix/123-made-findPositionOnPlan-c…
lewie-donckers Mar 17, 2022
0e68580
Merge pull request #138 from nobleo/fix/123-replaced-distance-to-goal…
lewie-donckers Mar 17, 2022
010f296
Merge pull request #139 from nobleo/fix/123-moved-last-visited-pose-i…
lewie-donckers Mar 17, 2022
746ccbe
Merge pull request #140 from nobleo/fix/123-replaced-controller-state…
lewie-donckers Mar 17, 2022
497e790
Merge pull request #144 from nobleo/fix/123-renamed-position-to-pose
lewie-donckers Mar 17, 2022
dbe631d
Merge pull request #141 from nobleo/fix/124-replace-getControllerState
lewie-donckers Mar 17, 2022
e10e6b0
Move getControlPointPose to a separate function & test
Rayman Mar 21, 2022
e3bd43c
Simplify closestPoseOnSegment math
Rayman Mar 21, 2022
d5198be
fix: Use absolute target velocity to calculate end phase distance
PaulVerhoeckx Mar 22, 2022
ec82e90
fix: Enforce positive end phase time and simplify end phase distance
PaulVerhoeckx Mar 22, 2022
8f26afc
Merge pull request #150 from nobleo/fix/end-phase-distance-for-drivin…
PaulVerhoeckx Mar 22, 2022
1cd31ea
Merge pull request #148 from nobleo/refactor/closest-pose-on-segment
Rayman Mar 24, 2022
4d51759
Refactor projectedCollisionCost to input-output function
Timple Mar 24, 2022
1512fbc
Make projectedCollisionCost static
Timple Mar 24, 2022
28d90cc
Factored out creation of projected footprint
Timple Mar 25, 2022
826bd16
2.19.0
Timple Mar 7, 2022
c0e598d
Relicense the code under Apache-2.0
Rayman Jan 6, 2023
750f8c1
Merge pull request #157 from nobleo/relicense-apache-v2
Rayman Jan 10, 2023
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
17 changes: 17 additions & 0 deletions .github/workflows/industrial_ci_action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: CI

on: [push, pull_request]

jobs:
industrial_ci:
strategy:
matrix:
env:
- {ROS_DISTRO: melodic}
- {ROS_DISTRO: noetic, CMAKE_ARGS: '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON'}
fail-fast: false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: 'ros-industrial/industrial_ci@master'
env: ${{matrix.env}}
110 changes: 110 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
cmake_minimum_required(VERSION 3.0.2)
add_compile_options(-std=c++17)
project(path_tracking_pid)

## Find catkin and any catkin packages
find_package(catkin REQUIRED
COMPONENTS
actionlib
actionlib_msgs
dynamic_reconfigure
geometry_msgs
mbf_costmap_core
mbf_msgs
message_generation
nav_core
nav_msgs
pluginlib
roscpp
roslint
rospy
rostest
std_msgs
std_srvs
tf2
tf2_geometry_msgs
tf2_ros
visualization_msgs
)

add_message_files(
FILES
PidDebug.msg
PidFeedback.msg
)

generate_dynamic_reconfigure_options(
cfg/Pid.cfg
)

generate_messages(
DEPENDENCIES
actionlib_msgs
geometry_msgs
nav_msgs
std_msgs
)

catkin_package(
CATKIN_DEPENDS
actionlib
actionlib_msgs
dynamic_reconfigure
geometry_msgs
mbf_costmap_core
mbf_msgs
message_runtime
nav_msgs
pluginlib
roscpp
std_msgs
std_srvs
tf2_geometry_msgs
tf2_ros
visualization_msgs
)

add_library(${PROJECT_NAME} src/controller.cpp src/${PROJECT_NAME}_local_planner.cpp)
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES})

include_directories(
include
${catkin_INCLUDE_DIRS}
${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake
)

# Configure roslint for nodes

# Roslint cpp
set(ROSLINT_CPP_OPTS "--filter=-legal/copyright")
roslint_cpp()

install(
TARGETS
${PROJECT_NAME}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)

# Install files
install(
FILES
README.md
${PROJECT_NAME}_plugin.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

# Install directories
install(
DIRECTORY
doc
launch
param
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

if(CATKIN_ENABLE_TESTING)
add_rostest(test/test_path_tracking_pid.test ARGS rviz:=false reconfigure:=false)
endif()
220 changes: 220 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
# path_tracking_pid

## Overview

Path Tracking PID offers a tuneable PID control loop decouling steerting and forward velocity. The forward velocity is generated in an open loop fashion by using target velocities and accelerations.

One of the tracking options uses a carrot of length l in front of the robot to determine the steering action based on the lateral error between the current Global Point (GP) and the Control point (CP):

![Tracking carrot](doc/figures/tracking.png)

If a smooth path is provided, the controller has the option to track the path with the base_link directly instead of lagging behind a carrot. In this case a Projected Global Point (PGP) is computed as well which is tracked by the CP. In this mode, the yaw error can also be used as control input.

![Tracking Base Link](doc/figures/tracking_base_link.png)


The PID contains two closed loops: Lateral and angular loops, and an open loop: Longitudinal. For non-holonomic robots, the lateral and angular loops can be combine to compute steering actions.

## Model Predictive Control

As an optional feature, we use a Model Predictive Control (MPC) concept to regulate the forward velocity. The user can specify a maximum desired error bound to track the path. Using the model of the robot plus the controller settings, a predicted path is calculated and if the error bound is violated, the forward velocity of the robot is decreased until the predicted path lies within acceptable bounds.

![MPC](doc/figures/mpc.png)

## Tricycle model

The tricycle model is supported as well.

![Tricycle Model](doc/figures/tricycle_model.png)

It is assumed the front wheel is steered and driven. The steered wheel link (SL) can be asymmetrically placed with respect to the BL. Limitations of steering and actuation are also taken into account.
## Anti collision

When used as a plugin, Path Tracking PID uses the costmap (and the robot footprint from the costmap) for anti-collision. No evasive maneuvers will be preformed (sticking to the path is key). However when obstacles are detected in close proximity to the robot or in the direct line of direction of the robot, the forward velocity will be decreased. This results in safer velocities around obstacles. If an obstacle cannot be avoided or is too close to the robot, a standstill will occur and the navigation is cancelled.

The maximum velocity of the robot will be scale linear with the costmap values around or in path of the robot. One can use the inflation layers (or even social layers) to construct these gradients in the costmap.

**Keywords:** tracking, pid, local_planner, trajectory, model predictive control

### License

TBD

**Author: Cesar Lopez, [email protected].**

**Maintainer: Cesar Lopez, [email protected].**

**Affiliation: [Nobleo Projects](https://www.nobleo.nl)**


The path_tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.

[![Build Status](https://bitbucket.org/nobleo/path_tracking_pid/branch/develop)](https://bitbucket.org/nobleo/path_tracking_pid/branch/develop)


## Installation

### Building from Source

#### Dependencies

- [Robot Operating System (ROS)](http://wiki.ros.org) (middleware for robotics),

#### Building

To build from source, clone the latest version from this repository into your catkin workspace and compile the package using

cd catkin_workspace/src
git clone https://bitbucket.org/nobleo/path_tracking_pid.git
cd ../
catkin_make

### Unit Tests

Run the unit tests with `catkin run_tests path_tracking_pid`

## Usage

The path_tracking_pid is a plugin for [move_base_flex](http://wiki.ros.org/move_base_flex).

To run move_base_flex with path_tracking_pid plugin:

roslaunch path_tracking_pid path_tracking_pid_mbf.launch

## Static parameters

* **`base_link_frame`** (string, default: `base_link`) Name of the base link frame.

* **`holonomic_robot`** (bool, default: `false`) True for an holonomic robot. --> Unmaintained, expect bugs

* **`estimate_pose_angle`** (bool, default: `false`) Whether to take the pose angles from the path directly or to estimate them form consecutive path poses.

* **`use_tricycle_model`** (bool, default: `false`) True for using tricycle model instead of differential drive.

* **`steered_wheel_frame`** (string, default: `steer`) Name of the steered wheel frame.

* **`use_mpc`** (bool, default: `false`) True for using MPC to regulate x velocity.

## Configuring in RQT

Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:

* **`l`** (double, default: `0.5`) Following distance from robot's rotational point to trajectory.
* **`track_base_link`** (bool, default: `false`) Whether to track the path using the base_link instead of the control point ahead. A smooth path is needed.
* **`init_vel_method`** (enum, default: `1`) Method to choose initial velocity on new paths.
* **`init_vel_max_diff`** (double, default: `0.5`) How much velocity difference is acceptable upon starting a new path. If internal state and new path's velocity differ more than this, the path will be rejected. Set to -1 to ignore this check.

Proportional, Integral and Derivative actions for the two closed loops: Lateral and angular loops.

* **`Kp_lat`** (double, default: `1.0`) Proportional action gain for lateral loop.
* **`Ki_lat`** (double, default: `0.0`) Integral action gain for lateral loop.
* **`Kd_lat`** (double, default: `0.3`) Derivative action gain for lateral loop.
* **`Kp_ang`** (double, default: `1.0`) Proportional action gain for angular loop.
* **`Ki_ang`** (double, default: `0.0`) Integral action gain for angular loop.
* **`Kd_ang`** (double, default: `0.3`) Derivative action gain for angular loop.

Each loop can be enabled/disabled separetly.

* **`feedback_lat`** (boolean, default: `true`) Enable feedback lateral loop.
* **`feedback_ang`** (boolean, default: `false`) Enable feedback angular loop.

Moreover, feedforward using trajectory velocity can be enabled/disabled.

* **`feedforward_lat`** (boolean, default: `true`) Enable velocity feedforward for lateral loop.
* **`feedforward_ang`** (boolean, default: `false`) Enable velocity feedforward for angular loop.

Target velocities and accelerations for generating the open loop forward velocity:

* **`target_x_vel`** (double, default: `2.0`) Nominal target forward velocity.
* **`target_end_x_vel`** (double, default: `0.0`) Target forward velocity at the end of the path.
* **`target_x_acc`** (double, default: `2.0`) Desired acceleration at the beginning of the path.
* **`target_x_decc`** (double, default: `2.0`) Desired decceleration at the end of the path.

Constraints on the generated velocities:

* **`abs_minimum_x_vel`** (double, default: `0.025`) Minimum velocity of the vehicle, used to reach the very end of the path.
* **`max_error_x_vel`** (double, default: `1.0`) Maximum allowed x velocity error.
* **`max_yaw_vel`** (double, default: `2.0`) Maximum allowed yaw velocity
* **`max_yaw_acc`** (double, default: `2.0`) Maximum allowed yaw acceleration
* **`min_turning_radius`** (double, default: `0.0`) Minimum turning radius of the vehicle.

Constraints on the steered wheel for the tricycle model:

* **`max_steering_angle`** (double, default: `3.1416`) Maximum steering angle for tricycle model.

* **`max_steering_x_vel`** (double, default: `3.0`) Maximum steering x velocity for tricycle model.

* **`max_steering_x_acc`** (double, default: `2.0`) Maximum steering x acceleration for tricycle model.

* **`max_steering_yaw_vel`** (double, default: `0.5`) Maximum steering yaw velocity for tricycle model.

* **`max_steering_yaw_acc`** (double, default: `0.5`) Maximum steering yaw acceleration for tricycle model.

Anti-collision parameters:

* **`collision_look_ahead_length_offset`** (double, default: `1.0`) Offset in length to project rectangle collision along path.
* **`collision_look_ahead_resolution`** (double, default: `1.0`) Spatial resolution to project rectangle collision along path.

Debug topic enable:

* **`controller_debug_enabled`** (boolean, default: `false`) Enable debug topic.

Parameters to configure MPC behavior:

* **`mpc_max_error_lat`** (double, default: `0.5`) MPC maximum allowed lateral error.
* **`mpc_min_x_vel`** (double, default: `0.5`) MPC minimum absolute forward velocity.
* **`mpc_simulation_sample_time`** (double, default: `0.05`) MPC simulation sample time MPC maximum allowed iterations forward in time.
* **`mpc_max_fwd_iterations`** (int, default: `200`) Prediction iterations. Total simulation time will be then mpc_max_fwd_iterations*mpc_simulation_sample_time.
* **`mpc_max_vel_optimization_iterations`** (int, default: `5`) MPC maximum allowed velocity optimization iterations.

![RQT reconfigure Tracking PID](doc/figures/rqt_path_tracking_pid.png)

## Launch files

* [launch/path_tracking_pid_mbf.launch](launch/path_tracking_pid_mbf.launch): Runs move_base_flex with path_tracking_pid plugin

* [test/test_path_tracking_pid.launch](test/test_path_tracking_pid.launch): If all is well, a red square moves along a toothed path that covers a square. The square should be followed by the base_link frame.

## Plugin
### path_tracking_pid/TrackingPidLocalPlanner
For use in move_base_flex. See launch/path_tracking_pid_mbf.launch to see an example.

#### Subscribed Topics

* **`path`** ([nav_msgs/Path])
The path to follow.

* **`odom`** ([nav_msgs/Odometry])
Robot odometry.

* **`/tf`** ([tf2_msgs/TFMessage])
The position of the robot wrt. the frame in which the map is received.

* **`vel_max`** ([std_msgs/Float64])
Dynamic maximum velocity. To be used for example when maximum power demands are reached.
Higher level software could also use the reconfigure interface for this and set new speed values, but when required in a feedback-loop, this streaming topic is preferred.

#### Published Topics

* **`cmd_vel`** ([geometry_msgs/Twist])
The Twist the robot should realize to track the desired path.

* **`feedback`** ([path_tracking_pid/PidFeedback])
Estimated duration remaining and progress towards final goal.

* **`visualization_marker`** ([visualization_msgs/Marker])
A Marker indicating the current control goal of the towards.

* **`collision_footprint_marker`** ([visualization_msgs/Marker])
A Marker indicating the footprint(s) along the path that are used for ahead collision detection.

* **`debug`** ([path_tracking_pid/PidDebug])
Intermediate values of the PID controller. Topic is silent by default, can be enabled via dynamic_reconfigure.


## Bugs & Feature Requests

Please report bugs and request features using the [Issue Tracker](https://bitbucket.org/nobleo/path_tracking_pid/).

[ROS]: http://www.ros.org
[rviz]: http://wiki.ros.org/rviz
Loading