Crazy Turtle


In this project I developed two different feedback controller for the ROS turtle simulation with a wall avoidance algorithm. The implementation of mine uses an action server, so that the user can set and change goals whenever it is needed (non-blocking). Because setting an action goal in terminal is not as convenient as calling a ROS service, I made the action communication completely by the software. This means, the user only has to call the service server, which handles the rest.

Afterwards, the service node sends the desired turtle position to the action node. The controller starts steering the turtle towards the goal while sending information about the turtle state and distance to the goal. Since it is an action message, it is non-blocking and the user might change the goal whenever desired.

this is a placeholder image
Crazy turtle in action

Background story

I started learning ROS back in July 2019. The first tutorials are pretty basic. You start installing ROS and the first tutorial tasks are to simply download and run pre-made ROS packages. One of the first ones is the turtesim simulator. Pretty basic and quite fun. It is a turtle, moving around in a colored plane. The normal task is to start two ROS nodes, the simulator and the teleop-twist-keyboard. Afterwards, you should be able to steer the little turtle around with your arrow keys. Then, the fun began. :smirk:

Feedback control with wall avoidance

  • explain feedback control and point to image in rqt graph
  • explain 2 different approaches
  • explain wall avoidance with penalty function
    • explain why I used min{cost, 20} (simulation gets instable)
this is a placeholder image
Wall avoidance cost function. 3D plot created with MATLAB

ROS communication

  • explain 2 added ros nodes
  • explain ros action msg and ros service msg and differences
  • action is non blocking, can be changed every time
this is a placeholder image
rqt-Graph of ROS nodes and topics communication