---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- -- *** Feature Algebra: Robot family example (Hardware perspective) *** -- *** (c) June 2006 by Peter Höfner, Ridha Khedri, Bernhard Möller *** ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- import FeatureAlg ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- -- *** basic features *** treads = bf "Moves around on treads" wheels = bf "Moves around on wheels" legs = bf "Moves around on legs" basic_means_of_locomotion = treads .+. wheels .+. legs turn = bf "Able to turn an angle from the initial heading" move_frwrd = bf "Able to move forward" move_bckwrd = bf "Able to move backward" stay_idle = bf "Able to stay inactive" limited_spd = bf "Robot limited to low speed of locomotion" extended_spd = bf "Robot extended to high speed of locomotion" basic_ctrl = bf "Robot equipped with basic control (only on or off)" digital_ctrl = bf "Robot equipped with digital valued indication of locomotion speed and direction" small_pltfrm = bf "Small size platform robot" medium_pltfrm = bf "Medium size platform robot" large_pltfrm = bf "Large size platform robot" c_s_pneumatic = bf "Pneumatic collision sensor" c_s_mechanical = bf "Mechanical collision sensor" c_s_combination = bf "Collision sensor is a combination of mechanical and pneumatic" sur_finder = bf "Small Ultrasonic Range Finder" lcur_finder = bf "Low-cost Ultrasonic Ranger" chpu_finder = bf "Compact High Performance Ultrasonic Ranger" v_s_color_vision = bf "Sensor capable of determining the color of objects in the robot's environment" black_white_vision = bf "Black and white environmental vision system" primary_colors_vision = bf "Primary colors environmental vision system" speed_of_locomotion = limited_spd .+. extended_spd locomotion_ctrl_sys = basic_ctrl .+. digital_ctrl c_sensor = c_s_pneumatic .+. c_s_mechanical .+. c_s_combination rng_finder = sur_finder .+. lcur_finder .+. chpu_finder platform_size_snsor = small_pltfrm .*. (c_sensor .^<=. 3) .+. medium_pltfrm .*. (c_sensor .^<=. 7) .+. large_pltfrm .*. (c_sensor .^<=. 11) platform_size_finder = small_pltfrm .*. (rng_finder .^<=. 1) .+. medium_pltfrm .*. (rng_finder .^<=. 2) .+. large_pltfrm .*. (rng_finder .^<=. 3) ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- -- *** product lines *** ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- basic_platform = basic_means_of_locomotion .*. turn .*. move_frwrd .*. move_bckwrd .*. stay_idle .*. opt[speed_of_locomotion] .*. opt[locomotion_ctrl_sys] .*. opt[platform_size_snsor] enhanced_obstacle_detection = basic_platform .*. c_sensor .*. opt[platform_size_finder] environmental_vision = enhanced_obstacle_detection .*. v_s_color_vision .*. opt[black_white_vision] .*. opt[primary_colors_vision] ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- -- *** constraints *** ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- excludes = treads .*. wheels .+. treads .*. legs .+. wheels .*. legs .+. limited_spd .*. extended_spd .+. basic_ctrl .*. digital_ctrl .+. basic_ctrl .*. digital_ctrl .+. small_pltfrm .*. large_pltfrm .+. medium_pltfrm .*. large_pltfrm .+. small_pltfrm .*. c_sensor .^. 4 .+. medium_pltfrm .*. c_sensor .^. 5 .+. large_pltfrm .*. c_sensor excludes2 = treads .*. wheels .+. treads .*. legs .+. wheels .*. legs excludes3 = limited_spd .*. extended_spd .+. basic_ctrl .*. digital_ctrl .+. basic_ctrl .*. digital_ctrl .+. small_pltfrm .*. large_pltfrm .+. medium_pltfrm .*. large_pltfrm .+. small_pltfrm .*. c_sensor .^. 4 .+. medium_pltfrm .*. c_sensor .^. 5 .+. large_pltfrm .*. c_sensor ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- -- *** constrained family *** constrained_basic_platform = basic_platform .-. excludes ----------------------------------------------------------------------------------