ExoStack / ROS 2 interfaces

HIL optimizer

Proposes candidates, collects their costs and keeps the best; there is one optimizer per profile in HIL mode.

The node asks its plug-in for a candidate (get_next_candidate()), publishes it with a new k, and passes each matching cost back (submit_result()). Costs with another k are discarded. When the optimizer stops, every round and the best candidate (get_best_so_far()) are written to ~/exo_stack_resources/hil_results/HIL_<optimizer>_<cost>_…_<time>.csv.

Node name<profile>_hil
Executablehil via hil_launch.py (start it last)
Instances×H, one per profile in HIL mode

Subscribed topics

TopicDescriptionMessage type
/<cost_topic>mean cost of the current candidatestd_msgs/Float32MultiArraycost layout

Published topics

TopicDescriptionMessage type
/<hil_output_topic>next candidatestd_msgs/Float32MultiArrayHIL candidate layout

Configuration

The keys that name or shape the topics above; every key is explained in Configuration.

KeyMeaning
profiles.<p>.hil_algoOPT_CMA_ES, OPT_BAYESIAN or your plug-in
hil_hyperparams.meanstart point, one value per dimension
hil_hyperparams.bounds[min, max] per dimension
hil_hyperparams.maximizetrue = maximize the cost (PASE: Purpose)
hil_hyperparams.sigma, max_generations, population_size, n_max_resamplingCMA-ES settings
hil_output_topiccandidate output; the profile node's input
cost_topiccost input