|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]
Services
Plugins
Recent questions tagged tracking_pid at Robotics Stack Exchange
|
tracking_pid package from tracking_pid repotracking_pid |
ROS Distro
|
Package Summary
| Tags | No category tags. |
| Version | 2.2.0 |
| License | Apache 2.0 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | PID controller following a moving carrot |
| Checkout URI | https://github.com/nobleo/tracking_pid.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-05-27 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | No category tags. |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Cesar Lopez
Authors
- Michiel Francke
- Cesar Lopez
Tracking_pid
Overview
Tracking PID offers a tuneable PID control loop to accurately follow a trajectory. An interpolator moves a goal over a
nav_msgs/Path
with a tuneable velocity, and a separate node tracks the given point.
One of the tracking options uses a carrot of length l in front of the robot to determine the velocity commands based on the lateral and longitudinal error between current Global Point (GP) and the Control point (CP):
![]()
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.
![]()
The PID contains three loops: Longitudinal, lateral and angular loops.
Keywords: tracking, pid, local_planner, trajectory
License
Apache 2.0
Author: Michiel Franke, Cesar Lopez
Maintainer: Cesar Lopez, cesar.lopez@nobleo.nl.
Affiliation: Nobleo Projects
The tracking_pid package has been tested under [ROS] Melodic and Ubuntu 18.04.
Installation
Building from Source
Dependencies
- Robot Operating System (ROS) (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://github.com/nobleo/tracking_pid.git
cd ../
catkin_make
Unit Tests
All tests can be run using:
catkin build tracking_pid --catkin-make-args run_tests
test_controller
Unit test that checks basic tracking functionality of the controller alone
test_interpolator
Unit test that checks interpolation between two poses
test_tracking_pid.test
Ros system test that checks that interpolator + controller drives a robot to track a given path
Usage
Run the main node:
roslaunch tracking_pid test_tracking_pid.test rviz:=true
Or run the tracking node together with a Coverage Path Planner
roslaunch tracking_pid test_tracking_pid_cpp.launch
Both of these depend on:
mobile_robot_simulator that integrates /cmd_vel into a /base_link TF-frame and an odometry publisher
tracking_pid test_tracking_pid_local_planner_cpp.launch depends on:
full_coverage_path_planner for CPP global planner
Configuring in RQT
Tracking_pid parameters are all available through (rqt_)dynamic_reconfigure. The main parameters are:
-
l(float, default:0.5); Following distance from robot’s rotational point to trajectory. Set negative to track backwards.
Proportional, Integral and Derivative actions for the three loops: Longitudinal, lateral and angular loops.
-
Kp_(loop_name)(float); Proportional action gain for loop ‘loop_name’ -
Ki_(loop_name)(float); Integral action gain for loop ‘loop_name’ -
Kd_(loop_name)(float); Derivative action gain for loop ‘loop_name’
File truncated at 100 lines see the full file
Changelog for package tracking_pid
Forthcoming
1.0.0 (2019-04-19)
- Add Apache 2.0 as license as per ROSIN
- Add backwards compatibility to ROS-Kinetic by overloading planner initialize function.
- Add ~loop param to make interpolator loop
- Deal with 0.0 velocity in Python path_interpolator
- Ported path_interpolator.py/PathInterpolator itself to path_interpolator.cpp and integrating it
- Re-format code according to ROS standard (https://github.com/davetcoleman/roscpp_code_format)
- Contributors: Alaa Alassi, Ferry Schoenmakers, Jasper Verhoeven, Loy van Beek, Mukunda Bharatheesha, Tim Clephas
0.6.4 (2019-01-03)
- Drive backwards when control point is behind robot (negative)
- Deal with paths that have duplicate poses
- Contributors: Loy van Beek, Tim Clephas
0.6.3 (2018-08-24)
- Added dynamic reconfigure parameter for velocity
- Add options for different start-time than current time to allow for faster resuming after paused state
- Do not re-initialise interpolator on every pause callback but only when paused
- Contributors: Tim Clephas
0.6.2 (2018-07-19)
- Publish when the path is done tracking
- The functionality of the Interpolator would also be suitable for an ActionServer, called with a path
- Add node to interpolate nav_msgs/Path and send that to the tracking_pid node
- Added interpolation between data points to allow for paths with data points further apart in time and space
- Add parameter to allow chosing controller frames
- Contributors: Loy van Beek, Tim Clephas, Yuri Steinbuch
0.1.0 (2017-10-16)
- Added backwards driving compatibility to the controller
- Fixed feedforward issue and some improvements in the perf_logger
- Added performance logger wrt to future lifetime tests
- Added general launch file in which desired trajectory can be set. Added dynamic reconfigure for the global_planner to change trajectories online easily
- Bugfixes and dynamic reconfigure of local planner
- Added feedforward actions, improved overall performance, bug fixes
- Contributors: Michiel Francke, Tim Clephas, Yuri Steinbuch
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- test/interpolator/test_path_interpolator_action.launch
- test/interpolator/test_path_interpolator_topic.launch
- test/interpolator/test_path_interpolator_topic_empty_frame_ids.launch
- test/tracking_pid/test_tracking_pid_cpp.launch
-
- map [default: $(find tracking_pid)/maps/grid.yaml]
- target_x_vel [default: 0.4]
- target_x_acc [default: 0.4]
- target_yaw_vel [default: 0.7]
- target_yaw_acc [default: 0.5]
- robot_radius [default: 0.3]
- tool_radius [default: 0.2]