Problem 1: Smart Manufacturing Cell Simulation
Description: Design a simplified simulation of a smart manufacturing cell. This cell
consists of various automated components that interact to process parts. Key
components include:
• Conveyor Belts: Move parts from one station to another.
• Workstations: Perform operations (e.g., drilling, inspection, assembly) on parts.
Each workstation has a specific processing time.
• Sensors: Detect the presence of parts at specific points (e.g., entry/exit of a
workstation, end of a conveyor).
• Parts: Objects that move through the system, each having a unique ID and a
record of operations performed.
Suggested Classes & Concepts:
• Part Class:
o Attributes: part_id, current_station, operations_log (list of strings).
o Methods: add_operation(operation_name), move_to(station).
• Component (Abstract Base Class/Parent Class):
o Common attributes: name, status.
o Common methods: get_status().
• ConveyorBelt Class (inherits from Component):
o Attributes: length, speed, has_part (boolean), part_on_belt (reference to
Part object).
o Methods: load_part(part), unload_part(), run_cycle().
• Workstation Class (inherits from Component):
o Attributes: processing_time, is_busy, part_being_processed.
o Methods: receive_part(part), process_part(), release_part().
• DrillingStation / InspectionStation (inherit from Workstation):
o Specific attributes/methods related to their operation (e.g., drill_depth,
check_quality(part)).
• Sensor Class (inherits from Component):
o Attributes: location, detection_range, is_active.
o Methods: detect_part(part_list), get_reading().
• ManufacturingCell Class:
o Attributes: Lists of ConveyorBelt, Workstation, Sensor objects.
o Methods: add_component(component), simulate_step(),
run_simulation(duration).
Problem 2: Autonomous Mobile Robot (AMR) Navigation System
Description: Develop a simplified model for an Autonomous Mobile Robot (AMR)
navigating a grid-based environment. The robot needs to:
• Move within the grid (forward, backward, turn left/right).
• Detect obstacles using simulated sensors (e.g., "distance sensors" that return
distance to nearest obstacle in a direction).
• Maintain its current position and orientation.
• Execute a sequence of movement commands.
Suggested Classes & Concepts:
• Environment Class:
o Attributes: grid (2D array representing the map, with cells for obstacles,
empty space, goals), width, height.
o Methods: is_obstacle(x, y), get_cell_content(x, y), display_map().
• Robot Class:
o Attributes: x_pos, y_pos, orientation (e.g., 0=North, 90=East, etc.), speed,
battery_level.
o Methods:
▪ move_forward(steps): Updates position based on orientation.
▪ turn_left(), turn_right(): Updates orientation.
▪ get_position(), get_orientation().
▪ sense_obstacles(environment): Uses internal Sensor objects.
▪ execute_command(command_string, environment).
• Sensor (Abstract Base Class/Parent Class):
o Common attributes: range.
o Common methods: read_data().
• DistanceSensor (inherits from Sensor):
o Attributes: direction (relative to robot's orientation).
o Methods: get_distance(robot_position, robot_orientation, environment).
• WheeledRobot / TrackedRobot (inherit from Robot):
o Specific movement characteristics or additional attributes (e.g.,
wheel_diameter, track_width).
Problem 3: Robotic Gripper Control System
Description: Model a robotic gripper system capable of handling different types of
objects. The system should:
• Represent various gripper types (e.g., two-finger parallel gripper, three-finger
adaptive gripper).
• Define how each gripper type "grasps" an object (e.g., closing fingers to a certain
width, applying a specific force).
• Allow for different "objects" to be picked up, each with properties like size,
weight, and fragility.
• Simulate the success or failure of a grasp based on gripper capabilities and
object properties.
Suggested Classes & Concepts:
• Object Class:
o Attributes: name, weight_kg, size_mm (e.g., diameter for cylindrical, side
length for cubic), fragility_level (e.g., 1-5).
o Methods: get_properties().
• Gripper (Abstract Base Class/Parent Class):
o Common attributes: max_opening_mm, max_force_N, is_open.
o Abstract method: _perform_grasp(object) (to be implemented by
subclasses).
o Methods: open(), close(), grasp(object) (calls _perform_grasp), release().
• TwoFingerGripper (inherits from Gripper):
o Attributes: finger_width_mm (width of each finger), min_grip_width_mm.
o Implementation of _perform_grasp(object): Checks if object size is within
min/max grip width and if force is sufficient.
• ThreeFingerAdaptiveGripper (inherits from Gripper):
o Attributes: adaptive_range_mm, finger_compliance.
o Implementation of _perform_grasp(object): More complex logic for
conforming to object shape, potentially handling fragility.
• VacuumGripper (inherits from Gripper):
o Attributes: suction_pressure_kPa, contact_area_cm2.
o Implementation of _perform_grasp(object): Checks if object surface is
suitable for suction and if suction force is sufficient for weight.
• RobotArmInterface (Optional, for higher level control):
o Attributes: attached_gripper (reference to a Gripper object).
o Methods: pick_up_object(object_to_pick), place_object().
Submission
1. You should write 3 different classes, one for each assignment.
2. In each python file in Spyder or any other environment called OOP1_MCS23_00001.py,
OOP2_MCS23_00001.py, OOP3_MCS23_00001.py corresponding to each problem.
(00001 should be your 5-digit registration number) and input your data in the beginning of
the file.
A starter is shown below:
3. Save each file with your registration number format as usual
4. Submit the 3 files to the class rep and the captain should zip all files per program in a
single file called MCT23_OOP.zip and send to my email with subject MCS3203_OOP
with the zip file attached. Latest 20th September, 2025.