Changing Messages and Services
Do not change messages or services unless there is no other way. The definitions in common-interfaces
(cpm_lab_lab_msgs, cpm_lab_map_msgs, cpm_lab_control_flow_msgs, cpm_lab_evaluation_msgs,
cpm_lab_commonroad_msgs) are the contract between parts of the lab that are updated at different times:
muCars: the vehicle controller is cross-compiled and deployed separately (see muCar). A controller with other message definitions than the central workstation cannot talk to it; ROS2 does not even report an error, the messages simply do not arrive.
Motion planners of students and partner labs are built against the installed release and break with every change.
Recordings contain the message types of their release.
cpm_evalreads them with the installed definitions, so old recordings can become unreadable, see Design: Recording and Evaluation.Lichtblick extensions, the Control Center and the documentation (Interface Reference) all mirror the messages.
Before You Change a Message
Check the alternatives first:
Use an existing field or message, e.g. a
SystemTriggertype or thesource_id.Add a parameter, a new topic or a new service instead of changing an existing one.
Keep data that only one component needs inside that component.
Discuss the change with the team in an issue before you implement it, and plan it for a release, never as a hotfix.