Skip to content

Instantly share code, notes, and snippets.

@jpieper
Last active February 15, 2019 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpieper/33bfc7e43f59cd293fc371d253ceaa71 to your computer and use it in GitHub Desktop.
Save jpieper/33bfc7e43f59cd293fc371d253ceaa71 to your computer and use it in GitHub Desktop.
Mammal geometry 1
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mammal geometry leg inverse kinematics\n",
"\n",
"Here we determine the inverse kinematics in position and force for\n",
"mammal geometry legs in 2D. The 3D case is only slightly more \n",
"complicated as the lateral angle is solved independently, at which\n",
"the remaining position is determined using exactly this procedure."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"import numpy as np\n",
"import sympy as sp"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# This is conducted purely in 2d. The geometry looks \n",
"# like:\n",
"#\n",
"# O +y\n",
"# / ^\n",
"# / <--- femur |\n",
"# /\n",
"# ---------P -> +x\n",
"#\n",
"# ^tibia\n",
"#\n",
"# Where O is the origin and P is the end effector point.\n",
"\n",
"# Px, Py - position of end effector\n",
"# l1, l2 - length of femur and tibia\n",
"# theta1 - angle from vertical of upper leg\n",
"# theta2 - angle from vertical of lower leg\n",
"Px, Py, l1, l2, theta1, theta2 = \\\n",
" sp.symbols('Px Py l1 l2 theta1 theta2')\n",
"\n",
"# This is a simple triangle. We know the length of all \n",
"# three sides, which means we can find all three angles.\n",
"\n",
"# Use the law of cosines to find the tibia angle first. \n",
"# Note: A practical implementation of this needs to \n",
"# handle the limited domain of the relevant actuators \n",
"# and other domain errors.\n",
"norm_PO_sq = Px * Px + Py * Py\n",
"norm_PO = sp.sqrt(norm_PO_sq)\n",
"\n",
"cos_tibia_sub = l1 * l1 + l2 * l2 - norm_PO_sq\n",
"\n",
"cos_tibia_inv = cos_tibia_sub / (2 * l1 * l2)\n",
"tibia_angle = sp.acos(cos_tibia_inv)\n",
"\n",
"# Now do the femur.\n",
"cos_femur_sub = norm_PO_sq + l1 * l1 - l2 * l2\n",
"cos_femur_inv = cos_femur_sub / (2 * norm_PO * l1)\n",
"femur_angle = sp.acos(cos_femur_inv)\n",
"\n",
"# Finally, convert these triangle angles into theta1 and \n",
"# theta2, which are both measured relative to vertical, \n",
"# with positive being a counterclockwise rotation.\n",
"etheta1 = {theta1: sp.atan2(Py, Px) + femur_angle + \n",
" sp.pi / 2}\n",
"ik = {\n",
" 'theta1': etheta1[theta1],\n",
" 'theta2': (theta1 - (sp.pi - tibia_angle)).subs(etheta1)\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"acos((Px**2 + Py**2 + l1**2 - l2**2)/(2*l1*sqrt(Px**2 + Py**2))) + atan2(Py, Px) + pi/2"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ik['theta1']"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"acos((-Px**2 - Py**2 + l1**2 + l2**2)/(2*l1*l2)) + acos((Px**2 + Py**2 + l1**2 - l2**2)/(2*l1*sqrt(Px**2 + Py**2))) + atan2(Py, Px) - pi/2"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ik['theta2']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Torque\n",
"\n",
"Now we will calculate the torque from an in-plane mammal geometry leg to \n",
"achieve a given end-effector force. As before, this only solves in 2 dimensions\n",
"as this is a sub-component of the 3 dimensional solution.\n",
"\n",
"![Reference free body diagram](https://docs.google.com/drawings/d/e/2PACX-1vSUltzhAZBrtDqKxn8LvBXLhLOQatCL49l1j8gooBX2Ta413AleyVg1t0NhttvILkd1275p3pvYSvb6/pub?w=764&amp;h=723)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# Fx, Fy - force at end effector\n",
"# t1, t2 - torque on the upper and lower leg\n",
"# l1, l2 - length of upper and lower leg\n",
"# theta1 - angle from vertical of upper leg\n",
"# theta2 - angle from vertical of lower leg\n",
"Fx, Fy, t1, t2 = sp.symbols('Fx Fy t1 t2')\n",
" \n",
"# We can trivially determine that F = I, so we'll just \n",
"# use F for I everywhere.\n",
" \n",
"# First, generate the equations for the top member.\n",
" \n",
"# Torque as measured from the top pin point.\n",
"top_torque = sp.Eq(t1 + t2 - sp.cos(theta1) * l1 * Fx - \n",
" sp.sin(theta1) * l1 * Fy, 0)\n",
"\n",
"# The bottom force equation is identical to the top, so \n",
"# provides no more degrees of freedom.\n",
"\n",
"# Torque as measured from the bottom pin point.\n",
"bottom_torque = sp.Eq(t2 - sp.cos(theta2) * l2 * Fx + \n",
" sp.sin(theta2) * l2 * Fy, 0)\n",
"\n",
"# Now we have 2 equations and two unknowns.\n",
"torque_equations = sp.solve([top_torque, bottom_torque], \n",
" [t1, t2])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{t1: Fx*l1*cos(theta1) - Fx*l2*cos(theta2) + Fy*l1*sin(theta1) + Fy*l2*sin(theta2),\n",
" t2: l2*(Fx*cos(theta2) - Fy*sin(theta2))}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"torque_equations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Static torque required through a gait cycle\n",
"\n",
"Now, given a sample leg design (femur and tibia length), determine the torque\n",
"required of both actuators through a single forward walking gait cycle. This\n",
"results in the end effector moving along a line at a constant y position."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.animation as animation\n",
"\n",
"from IPython.display import HTML\n",
"\n",
"plt.rcParams[\"animation.html\"] = \"jshtml\""
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def rotate(theta):\n",
" c, s = math.cos(theta), math.sin(theta)\n",
" return np.array(((c, -s), (s, c)))\n",
"\n",
"class Gait:\n",
" def __init__(self, height_off_ground, force=10, \n",
" sl1=0.113, sl2=0.119):\n",
" '''height_off_ground - gait offset from maximum \n",
" extension (m)\n",
" sl1 - femur length\n",
" sl2 - tibia length'''\n",
" self.height_off_ground = height_off_ground\n",
" self.force = force\n",
" self.sl1 = sl1\n",
" self.sl2 = sl2\n",
"\n",
" self.ypos = -sl1 - sl2 + self.height_off_ground\n",
" self.xmax = .98 * math.sqrt((sl1 + sl2) ** 2 - \n",
" self.ypos ** 2)\n",
" \n",
" # An optimal gait is one that runs from an x \n",
" # position of 0, until when the tibia is directly \n",
" # vertical. The total torque required outside of\n",
" # that range increases drastically. Compute that \n",
" # range here.\n",
" self.optimal_xrange = np.array(\n",
" [0, math.sqrt(self.sl1**2 - \n",
" (self.ypos + self.sl2)**2)])\n",
" \n",
" def do_ik(self, x, y):\n",
" sPx = x \n",
" sPy = y\n",
"\n",
" exp = [\n",
" (l1, self.sl1), \n",
" (l2, self.sl2), \n",
" (Px, sPx), \n",
" (Py, sPy),\n",
" ]\n",
" current = {key : sp.N(value.subs(exp)) \n",
" for key, value in ik.items()}\n",
"\n",
" # Now do the forward kinematics to find where the \n",
" # joint and end-effector position are.\n",
"\n",
" stheta1, stheta2 = (current['theta1'], \n",
" current['theta2'])\n",
"\n",
" p1 = rotate(stheta1).dot(\n",
" np.array([[0], [-self.sl1]]))\n",
" p2 = p1 + rotate(stheta2).dot(\n",
" np.array([[0], [-self.sl2]]))\n",
"\n",
" return {\n",
" 'stheta1': stheta1,\n",
" 'stheta2': stheta2,\n",
" 'p1': p1,\n",
" 'p2': p2,\n",
" }\n",
"\n",
" def find_torques(self, xpos):\n",
" r = self.do_ik(xpos, self.ypos)\n",
" exp = [(theta1, r['stheta1']),\n",
" (theta2, r['stheta2']),\n",
" (l1, self.sl1), (l2, self.sl2),\n",
" (Fx, 0), (Fy, self.force)]\n",
" torques = {key : sp.N(value.subs(exp)) \n",
" for key, value in \n",
" torque_equations.items()}\n",
" return torques[t1], torques[t2]\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd4531c5940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Now generate our plots.\n",
"gait = Gait(0.02, sl1=0.5*0.25, sl2=0.5*0.25, force=15)\n",
"\n",
"fig, [ax1, ax2] = plt.subplots(\n",
" nrows=1, ncols=2, sharex=True, figsize=(14, 6))\n",
"ax1.axis('equal')\n",
"ax1.set_xlim((-0.20, 0.2))\n",
"ax1.set_ylim((-0.30, 0.1))\n",
"\n",
"xspace = np.linspace(-gait.xmax, gait.xmax, 50)\n",
"\n",
"torques = [gait.find_torques(x) for x in xspace]\n",
"\n",
"# Plot the torques.\n",
"ax2.plot(xspace, [x[0] for x in torques], label='femur')\n",
"ax2.plot(xspace, [x[1] for x in torques], label='tibia')\n",
"ax2.plot(xspace, [abs(x[0]) + abs(x[1]) for x in torques],\n",
" label='total')\n",
"xvline = ax2.axvline(x=0)\n",
"ax2.legend()\n",
"\n",
"# Plot the leg configuration.\n",
"leg_line, = ax1.plot([], [], 'ro-', lw=3, markersize=10)\n",
"ax2.axvspan(gait.optimal_xrange[0],\n",
" gait.optimal_xrange[1],\n",
" color='gray', alpha=0.05)\n",
"\n",
"def animate(i):\n",
" r = gait.do_ik(xspace[i], gait.ypos)\n",
" p1 = r['p1']\n",
" p2 = r['p2']\n",
" leg_line.set_data([0, p1[0], p2[0]], \n",
" [0, p1[1], p2[1]])\n",
" xvline.set_data([xspace[i], xspace[i]], [0, 1])\n",
" return (leg_line,)\n",
"\n",
"_ = animate(0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# animation.FuncAnimation(fig, animate, frames=len(xspace), interval=60)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Power consumption\n",
"\n",
"Now, we will assume actuators which have a known current to torque ratio,\n",
"and a known resistance. We will also assume that the primary power requirement\n",
"is the current required to hold the machine up, and that required for actual\n",
"forward motion. This will allow us to calculate the instantaneous\n",
"and average power required during a gait cycle."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0AAAAF3CAYAAACMgyt+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3XmcjeX/x/HXZcbS2JcG0c8Skl22JIwlIpGypPS1FlJTRIgoElHkq5CyTMiapEIxjH2vITtZx26sg2GW6/fHDN+xjzFn7jln3s/Hw2POfZ97eZ9TjznzOdd1f25jrUVERERERCQlSOV0ABERERERkaSiAkhERERERFIMFUAiIiIiIpJiqAASEREREZEUQwWQiIiIiIikGCqAREREREQkxVABJCIiIiIiKYYKIBERERERSTFUAImIiIiISIqhAkhERERERFIMb6cDxEeOHDls/vz5E+14Fy9eJH369Il2PFdTXtdSXtdSXtdKyrwbN248Za19OElO5mYS+3MK3Ov/RXfKCsrrasrrWsp7Z/H+nLLWJvt/5cqVs4lpyZIliXo8V1Ne11Je11Je10rKvMAGmww+E5Ljv8T+nLLWvf5fdKes1iqvqymvaynvncX3c0pT4EREREREJMVQASQiIiIiIimGCiAREREREUkxXNYEwRjzODA9zqqCQF/gh9j1+YH9QDNr7Zn7PX5ERAQhISGEh4ffd7bMmTOzffv2+94vqaRLl468efOSOnVqp6OIiIiIiHgUlxVA1tqdQBkAY4wXcBj4GegJBFprBxtjesYu97jf44eEhJAxY0by58+PMea+9r1w4QIZM2a831MmCWstoaGhhISEUKBAAafjiIiIiIh4lKSaAlcL+NdaewBoBATErg8AXkzIAcPDw8mePft9Fz/JnTGG7NmzJ2hkS0RERERE7i6pCqBXgKmxj3Naa48CxP70TehBPa34ucZTX5eIiIiIiNNcfiNUY0waoCHQ6z73exN4EyBnzpwEBQXd8HzmzJm5cOFCgjJFRUUleN+43nrrLRYsWMDDDz/M2rVrAfjss88ICAggR44cAPTt25e6deuyfPlynn/+eaZPn069evUAaNq0Kf7+/lStWvWWY4eHh19/zWFhYbe8/uRMeV1LeV1LeUVERDybywsgoB7wl7X2eOzycWNMbmvtUWNM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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd452cd5e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Titan 6008 (0.0450 / 0.06)\n",
"# BE8108 (0.0875 / 0.10)\n",
"# 3508 gearbox (0.085 / 0.06)\n",
"\n",
"femur_torque_per_amp = 0.0875\n",
"femur_resistance = 0.10\n",
"tibia_torque_per_amp = 0.0450 * 1.8 # belt reduction\n",
"tibia_resistance = 0.06\n",
"\n",
"def calculate_power(femur_tibia_torque):\n",
" femur_current_A = (femur_tibia_torque[0] / \n",
" femur_torque_per_amp)\n",
" femur_power = (femur_current_A ** 2 * \n",
" femur_resistance)\n",
" \n",
" tibia_current_A = (femur_tibia_torque[1] / \n",
" tibia_torque_per_amp)\n",
" tibia_power = tibia_current_A ** 2 * tibia_resistance\n",
" \n",
" return femur_power, tibia_power\n",
"\n",
"def get_gait_parameters(height, scale=1):\n",
" total_length = .25 # .232\n",
" ratio = 0.5\n",
" gait = Gait(height, force=15 * scale, \n",
" sl1=ratio * total_length, \n",
" sl2=(1.0 - ratio)*total_length)\n",
" xrange = np.linspace(gait.optimal_xrange[0], \n",
" gait.optimal_xrange[1])\n",
" torques = [gait.find_torques(x) for x in xrange]\n",
"\n",
" powers = [calculate_power(v) for v in torques]\n",
" avg_femur_power = (sum([i[0] for i in powers]) / \n",
" len(powers))\n",
" avg_tibia_power = (sum([i[1] for i in powers]) / \n",
" len(powers))\n",
" return ((avg_femur_power + avg_tibia_power) / scale, \n",
" (gait.optimal_xrange[1] - \n",
" gait.optimal_xrange[0])\n",
"\n",
"# We will plot the average power required as a function of\n",
"# height, along with the maximum gait distance.\n",
"dspace = np.linspace(0.01, 0.10, 5)\n",
"fig, [ax, ax2] = plt.subplots(nrows=1, ncols=2, \n",
" figsize=(14, 6))\n",
"\n",
"ax.set_xlabel('stride (m)')\n",
"ax.set_ylabel('power (W)')\n",
"\n",
"def make_plot(scale):\n",
" results = [get_gait_parameters(x, scale=scale) \n",
" for x in dspace]\n",
" strides = np.array([x[1] for x in results], \n",
" dtype=np.float64)\n",
" powers = np.array([x[0] for x in results], \n",
" dtype=np.float64)\n",
" line, = ax.plot(strides, powers, \n",
" label='{:d}N'.format(15*scale))\n",
" \n",
" # Interpolate the power required for a stride of 0.1m \n",
" # and denote that on the plot.\n",
" power_10cm = np.interp(0.1, strides, powers)\n",
" ax.annotate('{:.2f}W'.format(power_10cm), \n",
" xy=(0.1, power_10cm),\n",
" textcoords='offset pixels', \n",
" xytext=(30, 0),\n",
" arrowprops=dict(arrowstyle=\"->\"))\n",
" return results\n",
"\n",
"make_plot(1)\n",
"make_plot(2)\n",
"results = make_plot(3)\n",
"\n",
"ax.legend(loc='upper left')\n",
"ax.set_ylim(bottom=0)\n",
"ax.grid()\n",
"\n",
"# The height will be the same for everything, we we just \n",
"# use the most recent one.\n",
"ax2.plot([x[1] for x in results], dspace, 'g')\n",
"ax2.set_ylim(bottom=0)\n",
"ax2.set_xlabel('stride (m)')\n",
"ax2.set_ylabel('height (m)')\n",
"_ = ax2.grid()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment