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>_hilExecutable
hil via hil_launch.py (start it last)Instances×H, one per profile in HIL mode
Subscribed topics
| Topic | Description | Message type |
|---|---|---|
/<cost_topic> | mean cost of the current candidate | std_msgs/Float32MultiArraycost layout |
Published topics
| Topic | Description | Message type |
|---|---|---|
/<hil_output_topic> | next candidate | std_msgs/Float32MultiArrayHIL candidate layout |
Configuration
The keys that name or shape the topics above; every key is explained in Configuration.
| Key | Meaning |
|---|---|
profiles.<p>.hil_algo | OPT_CMA_ES, OPT_BAYESIAN or your plug-in |
hil_hyperparams.mean | start point, one value per dimension |
hil_hyperparams.bounds | [min, max] per dimension |
hil_hyperparams.maximize | true = maximize the cost (PASE: Purpose) |
hil_hyperparams.sigma, max_generations, population_size, n_max_resampling | CMA-ES settings |
hil_output_topic | candidate output; the profile node's input |
cost_topic | cost input |