Encapsulation, Inheritance and Polymorphism Object Oriented Programming

Download Solution Order New Solution

Assignment Task

Intent

Skills in utilising, classes, functions, pointers and utilising abstraction, encapsulation, inheritance, polymorphism with appropriate documentation will be assessed.

Task

Write a program in C++ using object-oriented paradigms that embodies a range of platforms, utilising abstraction, encapsulation, inheritance and polymorphism. Supply appropriate auto-generated documentation utilising inline source mark-up.

Rationale

In a Mechatronics System we would use a class to represent a real-world object such as a robotic platform (vehicle, drone). In large projects to facilitate testing it is common to develop a mock (fake) platform class that behaves the same as the real platform. This allows for some system testing without the presence of all hardware.

Platform control of similar nature are often abstracted from a base platform (ie. moving a platform to reach a goal has similar functionality, but depends on the platform kinematics/design). This allows treating a suite of platforms in an abstract manner when navigating them to goals for a mission, the remaining of our processing code can be agnostic to the platform type.

Assignment Specifics

There are two ground vehicle platforms that are used to accomplish missions, an Audi R8 (vehicle with Ackerman steering) and a Husky (vehicle with Skid Steering). Dynamic constraints for the Audi R8 (Ackerman) are provided below, it grips the road and travels predictably unless it is drifting (which low throttle will avoid). It is controlled by steering, brake and throttle. The skid steer platform needs to skid to turn, it can turn on the spot roughly.

The goal of the assessment is simply to coordinate the platforms slowly (like a learner driver) and allowing to compute estimates of time and distance to travel to goals (which ignore effects of acceleration and assume constant velocity for travel). The Ackerman platform should be controlled via a constant steering angle (so it travels in arcs of a circle) and fixed throttle. The SkidSteer platform should be controlled via a constant turn rate (turns on the spot). These constraints allow easier control, though for stopping I would suggest some P control to stop at goal.

You have been supplied a very simple main that accepts two goals : x1 y1 x2 y2, instantiates both platforms and provides them to the Mission class. Calling runMission (of the Mission class) drives to goal(s), one platform at a time (they do not move simultaneously – we will do this when we learn threading for assignment 2). Upon completing the mission, the example main terminates. While a sample main is provided, your code will ONLY be marked via unit tests.

All goals are supplied in world coordinates (right handed coordinate system with X-forward, Y-left and therefore positive angle from X to Y. The local coordinate frame of each platform is superimposed on the platforms in Fig 1, red as X (forward) and Y (left). There is an a1_snippets folder in your repository (under skeleton folder) that has example of sending commands and getting odometry from those platforms.

This IT Computer Science has been solved by our PhD Experts at My Uni Paper.

Get It Done! Today

Country
Applicable Time Zone is AEST [Sydney, NSW] (GMT+11)
+

Every Assignment. Every Solution. Instantly. Deadline Ahead? Grab Your Sample Now.