Validation rules
This page is generated from mobiledsl.validation.standard; edit the code, not the page. Each rule asks one question of the facts analysis derived and answers pass, fail, unknown or not_applicable with the evidence it used. fail is an error that blocks compilation, except for an advisory rule, whose fail is a warning: the facts show a likely mistake that a program may still mean. unknown means the facts do not settle the question, usually because a library part did not state something; it is never a pass: each place it points at is a warning, and the compile's summary counts the rule as undecided. A rule answers for each place it points at: one that fails for one part and cannot decide another says both, the second as a warning. A rule reads facts; it does not recompute geometry and does not change the program.
| Rule | Category | Question | fail is | unknown when |
|---|---|---|---|---|
assembly.glue_on_connector | assembly | Does every component's glue name one connector of the chassis or of a part placed on it, and is that part placed? | an error | never |
assembly.one_part_per_connector | assembly | Does each chassis connector carry at most one part? | an error | never |
assembly.wheel_mounts_filled | assembly | Does every drive mount of the chassis type carry one wheel or track, on the mount or on the shaft of a motor on it, with any motor that turns it on the mount or on a seat of the chassis whose driveline turns it; does every other wheel mount carry one free wheel; and does nothing that drives sit elsewhere? | an error | never |
assembly.wheel_type_matches_chassis | assembly | Is every wheel that rolls, and every track, of a type the chassis takes? | an error | never |
assembly.steering_declared | assembly | Does each steered mount of the chassis type carry an upright kingpin? | an error | never |
kinematics.omni_wheels_span_the_plane | kinematics | Do an omni base's rolling directions span the plane? | an error | when no omni wheel is placed |
assembly.axles_horizontal | assembly | Is the axle of every wheel that rolls, and of every track's hub, horizontal? | an error | never |
assembly.wheels_touch_one_plane | assembly | Do all wheels, and both ends of every track's run, touch the ground on one plane, with each other and with a legged robot's feet (within 2 mm)? | an error | never |
assembly.feet_touch_the_ground | assembly | Does every foot of a legged robot, of its chassis's own legs or of a leg placed on it, touch the ground on one plane with the others (within 2 mm), where the servos hold the legs? | an error | never |
assembly.legs_on_a_legged_chassis | assembly | Is every leg placed on a Legged chassis that has no legs of its own, hanging from no connector of it that steers, and does such a chassis carry legs? | an error | never |
assembly.one_walker | assembly | Is the robot, its body and its legs placed as they are, the robot of one walker of its chassis's library at most? | an error | never |
assembly.links_clear_the_ground | assembly | Does every shape of a part's links but a legged robot's feet stay above the ground (within 2 mm), where its servos hold the links? | an error | no wheel, track or foot is placed |
statics.mass_inside_the_wheel_contacts | statics | Does the robot's centre of mass fall strictly inside the polygon of its ground contacts, the wheels, the tracks' runs, a legged robot's feet and the skids its parts declare, counting a skid a little above the wheels' plane once the base has tipped onto it, with no skid reaching below the wheels or the feet? | an error | no wheel, track or foot is placed, a wheel, a track's end or a foot is off the plane the others share, or the contacts lie on one line and the robot tips onto nothing declared |
assembly.footprint_known | assembly | Do the parts' collision shapes, their links' with them where their servos hold them, bound the robot's footprint? | an error | a placed part declares no collision box |
assembly.parts_clear_each_other | assembly | Do the declared shapes of the parts fixed to the base, each part's links' with it where their servos hold them, keep out of each other, but for what a well on a connector of either lets into that part's declared shape? | a warning | no two shapes are found to overlap, and a placed part declares no collision shape |
assembly.wheels_clear_other_parts | assembly | Does every other part's declared shape, its links' with it where their servos hold them, keep out of the space each wheel turns through, over its steering lock, and out of each track's unit, but for what a well on the part's connector lets into its declared shape? | an error | no part is found in a wheel's or a track's way, and a placed part or a track's unit declares no collision box or a stretch of a steering lock could not be settled within the analysis's budget |
kinematics.spin_supported | kinematics | If the task spins in place, can the base, and a walking base the way its gait turns? | an error | never |
kinematics.strafe_supported | kinematics | If the task strafes, is the base holonomic, and does a walking base's gait move aside to that side, as fast as the task states? | an error | never |
kinematics.walk_supported | kinematics | If the task advances, backs up or navigates a walking base, does its gait walk that way, as fast as the task states, and turn either way to navigate? | an error | never |
kinematics.gait_walks_the_feet | kinematics | If the chassis walks by a gait, does the robot stand on an even number of feet, four or more, each stepping by at least two servos of its own? | an error | never |
kinematics.tracks_state_their_travel | kinematics | Does every track's part state how far its belt travels per turn of its hub? | an error | a track's part states no travel per turn |
sensing.range_clears_the_ground | sensing | Does every Range sensor's cone stay above the ground within its range? | a warning | no wheel, track or foot is placed |
power.supply_voltage_accepted | power | Is the voltage every motor and motor driver is fed, full and run down, within the range its part states it accepts? | an error | a part that states a range names no supply, or its battery states a nominal voltage within that range and no range of its own |
power.rated_voltage_in_supply | power | Does the voltage every motor is fed, between full and run down, include the voltage its ratings hold at? | a warning | a motor names no supply, or its battery states only a nominal voltage that is not the motor's rated one |
power.driver_delivers_stall_current | power | Can every motor driver deliver, from one channel, the current the motor on it draws stalled? | a warning | never |
command.driver_commands_its_motors | command | Does every motor's driver have what commands it: a channel of its own for a motor without a bus, the motor's bus for one that carries its driver? | an error | a motor names no driver |
command.driver_has_a_channel_for_each_motor | command | Does every motor driver have a channel of its own for each motor it drives? | a warning | never |