The evaluation
The .eval file is optional. It lists checks, each a measurement of the run with bounds it must stay within.
Evaluate demo_eval {
Check_clearance(target = @world/goal, min = 0.3)
Check_vel(target = @core/wheel_lf, min = 0, max = 60)
Check_time(target = @task/drone_demo, max = 300)
}Every check takes a target and at least one of min and max.
Checks
| Check | Measures | Target |
|---|---|---|
Check_vel | A joint's speed, rad/s, every sample | a wheel, @core/... |
Check_acc | A joint's acceleration, rad/s², every sample | a wheel |
Check_jerk | A joint's jerk, rad/s³, every sample | a wheel |
Check_effort | A joint's effort, N·m, every sample | a wheel |
Check_distance | Distance to a goal or entity: min bounds the closest approach, max the distance at the end | @world/... |
Check_clearance | The closest approach to an obstacle over the run | @world/..., or every obstacle |
Check_contact | Seconds a part spends touching a scene entity | a part, @core/... |
Check_time | The task's duration, seconds | @task/... |
Check_distance and Check_clearance also take a source, the part measured from; without it they measure from the whole robot. On a Bumper, Check_contact reads what the bumper itself reported; on any other part, the simulator's geometry.
How checks are judged
A check is judged from the simulator's own record of the run, never from what the robot or its navigation stack believed: the robot's pose as the simulator publishes it, the joint states, and the bumpers' reports. Each check ends pass, fail or unknown. A check with no samples to judge is unknown, never pass.
A joint check on a part that has no moving joint is refused at compile time, since there would be nothing to measure.
The checks are one of three verdicts a run gets; Judging a run explains the other two.
Next
Component libraries explains where the parts come from.