{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Four-bar Linkage\n", "\n", "Welcome to this tutorial on using SymPy to derive the equations of motion (EoMs) of a four-bar linkage!\n", "\n", "This notebook provides a hands-on introduction to using SymPy in a workflow, which is similar to the internals of SymBRiM. which also follows [the four-bar linkage example in SymPy](https://docs.sympy.org/dev/modules/physics/mechanics/examples/four_bar_linkage_example.html). In doing so it aims to satisfy the following learning objectives:\n", "\n", "- Learn some of the basic syntax of SymPy for creating symbols and expressions.\n", "- Learn how to create bodies and joints in `sympy.physics.mechanics`.\n", "- Learn how to define a system in a systematic approach such that the EoMs can automatically be formed using Kane's method.\n", "- Learn about the underlying workflow utilized in SymBRiM.\n", "- Learn to perform a simple simulation using `solve_ivp` from SciPy and visualize the results using SymMePlot.\n", "\n", "[Learn Multibody Dynamics by Moore](https://moorepants.github.io/learn-multibody-dynamics/index.html) is a great resource for learning about multibody dynamics while using the more lower-level API of the mechanics module. It should be noted that this book is part of a university course, so it does not use a lot of the high-level API of `sympy.physics.mechanics`. The following chapters are recommendable for learning more about the basics:\n", "\n", "- [SymPy](https://moorepants.github.io/learn-multibody-dynamics/sympy.html) gives a brief introduction to the basics of SymPy.\n", "- [Orientation of Reference Frames](https://moorepants.github.io/learn-multibody-dynamics/orientation.html) gives a brief introduction to the basics of reference frames.\n", "- [Vectors](https://moorepants.github.io/learn-multibody-dynamics/vectors.html) gives a brief introduction to the basics of vectors.\n", "- [Angular Kinematics](https://moorepants.github.io/learn-multibody-dynamics/angular.html) is a more in-depth introduction to angular kinematics.\n", "- [Translational Kinematics](https://moorepants.github.io/learn-multibody-dynamics/translational.html) introduces the usage of points and discusses various theorems for computing velocities and accelerations.\n", "- [Holonomic Constraints](https://moorepants.github.io/learn-multibody-dynamics/configuration.html) and [Nonholonomic Constraints](https://moorepants.github.io/learn-multibody-dynamics/motion.html) introduce the usage of constraints and how to formulate them.\n", "- [Mass Distribution](https://moorepants.github.io/learn-multibody-dynamics/mass.html) gives an in-depth introduction to defining mass and inertia.\n", "- [Force, Moment and Torque](https://moorepants.github.io/learn-multibody-dynamics/loads.html) gives an in-depth introduction to defining forces, moments, and torques without utilizing the high-level API of `sympy.physics.mechanics`.\n", "- Other chapters cover things like how vector differentiation is defined and how to derive the EoMs using your own manually written Kane's method and Lagrange's method.\n", "\n", "## Overview of the Workflow\n", "When forming the EoMs of a system in SymPy, one typically first describes the model after which an algorithmic implementation of Kane's method or Lagrange's method is used to derive the EoMs. In this tutorial, we will use Kane's method. SymBrim breaks the model description into four parts:\n", "\n", "1. **Define objects**: Create the objects, such as symbols reference frames, without defining any relationships between them.\n", "2. **Define kinematics**: Establish relationships between the objects' orientations/positions, velocities, and accelerations.\n", "3. **Define loads**: Specifies the forces and torques acting upon the system.\n", "4. **Define constraints**: Computes the holonomic and nonholonomic constraints to which the system is subject.\n", "\n", "The image below shows a schematic visualization of these steps for a rolling disc.\n", "\n", "