Simulation ========== Le paquet ``ratbot_sim`` permet de développer et tester sans robot réel. Simulateur cinématique léger ---------------------------- Le nœud ``base_sim`` imite le firmware, vu du graphe ROS : il s'abonne à ``base/cmd_vel_safe`` (la sortie du garde-barrière, comme la vraie carte), intègre une odométrie parfaite et publie ``base/odom``, ``base/joint_states`` et la TF ``ratbot_N/odom → ratbot_N/base_footprint``. Le **watchdog du firmware est simulé** : sans commande pendant 0,5 s, le robot s'arrête. Toute la chaîne réelle est donc en jeu, arrêt d'urgence compris. .. code-block:: bash source ros2/install/local_setup.bash ros2 launch ratbot_sim sim.launch.py robot_id:=1 Arguments : ``robot_id`` (défaut ``1``), ``rviz`` (défaut ``true``). Dans RViz : *Fixed Frame* = ``ratbot_1/odom``, ajouter un affichage **RobotModel** (topic ``/ratbot_1/robot_description``) et **TF**. Piloter au clavier : .. code-block:: bash ros2 run teleop_twist_keyboard teleop_twist_keyboard \ --ros-args -r cmd_vel:=/ratbot_1/base/cmd_vel Tester l'arrêt d'urgence global pendant que le robot roule : .. code-block:: bash ros2 topic pub --once /emergency_stop std_msgs/msg/Bool "data: true" Paramètres du nœud ``base_sim`` : ``wheel_radius`` (0,03 m) et ``wheel_separation`` (0,12 m) — à garder cohérents avec l'URDF —, ``rate`` (50 Hz), ``cmd_timeout`` (0,5 s). Gazebo ------ TODO : simulation physique sous Gazebo (masses, inerties et maillages à intégrer dans l'URDF — données de conception à venir). Le simulateur cinématique restera utile pour les tests rapides sans physique.