Mobile robot simulation in ROS 2 (0-20 points)
Goal
Design and implement a system that simulate and control simple mobile robot.
Description
Create a system that will simulate motion of the unicycle mobile robot
\left\{\begin{array}{rcl} \dot{x} & = & \cos{\phi}\cdot u_1,\\ \dot{y} & = & \sin{\phi}\cdot u_1,\\ \dot{\phi} & = & u_2,\end{array}\right.where:
x, y, \phi represent the pose of the robot (position and orientation),
u_1 is the linear velocity control signal,
u_2 is the angular velocity control signal.
The diagram shows an example system (in the simplest case, open-loop control)
Mobile robot simulator
This node should calculate the consecutive states of the robot assuming received control values. If there is no control value in the specific time point, it should assume control values equal to 0 and publish new state.
Controller
It should generate controls functions for the mobile robot simulator. Control values should include parameters for linear velocity (u_1) and angular velocity (u_2).
The possible extension could be adding the closed-loop controller (with trajectory generator).
Remarks:
- Assume that the robot is moving on the XY plane and z is equal to 0.
- Assume that at the beginning robot is placed in point (0,0,0).
- Publish trajectory of the robot as a series of geometry_msgs/PoseStamped messages.
- Publish the robot pose also with tf2 as a transformation between
world
andbase_link
frame. You can assume that theworld
frame is constant. - Visualize the path and frames in rviz (alternatively in foxglove).
- The simulated robot should move in a meaningful way, for example, along a square.
- Create a new ROS 2 package for your robot simulation project.
- Create a launcher (Python based launcher) that will start all nodes and load parameters from a YAML files. The system should be started with single command.
ros2 launch package_name launcher_name
- Document your code!