The purpose of this set of packages is to perform the linear control of the Turtlebot3 Waffle PI for trajectory tracking. The main algorithm is based on a linear proportional control which uses the linearized model of the robot. The pub_desired_states
package computes the desired states taking into account physical and dynamic limitations. The turtlebot_linear_control
package subscribes to the /odom
topic, computes the adequate control signals and publish them to the /cmd_vel
topic.
First of all, it is necessary to set the driver up, which is in charge of controlling the actuators and reading the sensors. If you want to test the controller in a real platform you have to configure the robot computer as well as the remote PC properly, a detailed description of the entire process can be found in the official site of the project Turtlebot3 in the setup tab. In the other hand, if you wish to test the controller inside the Gazebo enviroment you need to download the corresponding packages, also from the official site in the simulation tab.
The entire repository should be cloned to ~/catkin_ws/src
by entering the command git clone https://github.com/EDU4RDO-SH/turtlebot_control.git
and compile the code with catkin_make
. If you are installing ROS for the first time, see the instructions here. This version has been created using the Turtlebot3 Waffle PI, ROS Kinetic, and Ubuntu 16.04.
First, execute the robot driver in a terminal:
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
Then, launch the control algorithm in another terminal window, in that moment the robot will start moving following the reference.
$ roslaunch turtlebot_linear_control linear_control_path1.launch
The control performance can be seen in the next video.
If you want to test the control algorithm in Gazebo you have to launch the vitual robot with the following commands.
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
Next, execute the linear controller.
$ roslaunch turtlebot_linear_control linear_control_path1.launch
Similary the robot will track the desired trajectory.