diff --git a/examples/notebooks/quadcopter_mission.ipynb b/examples/notebooks/quadcopter_mission.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..aca5726c484f6b7771d0542df09e37b8238d6f5d --- /dev/null +++ b/examples/notebooks/quadcopter_mission.ipynb @@ -0,0 +1,527 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from crocoddyl import *\n", + "import pinocchio as pin\n", + "import numpy as np\n", + "from crocoddyl.diagnostic import displayTrajectory" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# LOAD ROBOT\n", + "robot = loadHector()\n", + "robot.initViewer(loadModel=True)\n", + "robot.display(robot.q0)\n", + "\n", + "robot.framesForwardKinematics(robot.q0)\n", + "\n", + "rmodel = robot.model" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "def uavPlacementModel(targetPos, targetQuat, integrationStep, frameName):\n", + " # ACTUATION MODEL\n", + " distanceRotorCOG = 0.1525\n", + " cf = 6.6e-5\n", + " cm = 1e-6\n", + " actModel = ActuationModelUAM(robot.model, distanceRotorCOG, cf, cm)\n", + "\n", + " # COST MODEL\n", + " # Create a cost model per the running and terminal action model.\n", + " runningCostModel = CostModelSum(rmodel, actModel.nu)\n", + " terminalCostModel = CostModelSum(rmodel, actModel.nu)\n", + "\n", + " state = StatePinocchio(rmodel)\n", + " SE3ref = pin.SE3()\n", + " SE3ref.translation = targetPos.reshape(3,1)\n", + " SE3ref.rotation = targetQuat.matrix()\n", + "\n", + " wBasePos = [10]\n", + " wBaseOri = [1]\n", + " wBaseVel = [100]\n", + " wBaseRate = [10]\n", + " \n", + " stateWeights = np.array(wBasePos * 3 + wBaseOri * 3 + wBaseVel * robot.model.nv)\n", + " controlWeights = np.array([10]*4)\n", + " \n", + " goalTrackingCost = CostModelFramePlacement(rmodel,\n", + " frame=rmodel.getFrameId(frameName),\n", + " ref=SE3ref,\n", + " nu =actModel.nu)\n", + " xRegCost = CostModelState(rmodel, \n", + " state, \n", + " ref=state.zero(), \n", + " nu=actModel.nu,\n", + " activation=ActivationModelWeightedQuad(stateWeights))\n", + " uRegCost = CostModelControl(rmodel, \n", + " nu=robot.\n", + " model.nv-2,\n", + " activation = ActivationModelWeightedQuad(controlWeights))\n", + " uLimCost = CostModelControl(rmodel, \n", + " nu=robot.\n", + " model.nv-2,\n", + " activation = ActivationModelInequality(np.array([0.1, 0.1, 0.1, 0.1, -1, -1, -1, -1, -1, -1]), \n", + " np.array([5, 5, 5, 5, 1, 1, 1, 1, 1, 1])))\n", + "\n", + " # Then let's add the running and terminal cost functions\n", + " runningCostModel.addCost(name=\"pos\", weight=0.1, cost=goalTrackingCost)\n", + " runningCostModel.addCost(name=\"regx\", weight=1e-4, cost=xRegCost)\n", + " runningCostModel.addCost(name=\"regu\", weight=1e-6, cost=uRegCost)\n", + " # runningCostModel.addCost(name=\"limu\", weight=1e-3, cost=uLimCost)\n", + " terminalCostModel.addCost(name=\"pos\", weight=50, cost=goalTrackingCost)\n", + "\n", + " # DIFFERENTIAL ACTION MODEL\n", + " runningDmodel = DifferentialActionModelActuated(rmodel, actModel, runningCostModel)\n", + " terminalDmodel = DifferentialActionModelActuated(rmodel, actModel, terminalCostModel)\n", + " runningModel = IntegratedActionModelEuler(runningDmodel)\n", + " runningModel.timeStep = integrationStep \n", + " terminalModel = IntegratedActionModelEuler(terminalDmodel)\n", + " terminalModel.timeStep = integrationStep \n", + " \n", + " return runningModel,terminalModel " + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# DEFINING THE SHOOTING PROBLEM & SOLVING\n", + "\n", + "# Defining the time duration for running action models and the terminal one\n", + "dt = 5e-2\n", + "T = 25\n", + "\n", + "\n", + "# DEFINE POSITION WAYPOINTS\n", + "target_pos = [np.array([0,0,1])]\n", + "target_pos += [np.array([0,1,1])]\n", + "quat = pin.Quaternion(1, 0, 0, 0)\n", + "quat.normalize()\n", + "target_quat = [quat]*2\n", + "\n", + "# Plot goal frame\n", + "for i in range(0,len(target_pos)):\n", + " robot.viewer.gui.addXYZaxis('world/wp%i' % i, [1., 0., 0., 1.], .03, 0.5)\n", + " robot.viewer.gui.applyConfiguration('world/wp%i' % i, \n", + " target_pos[i].tolist() + [target_quat[i][0], target_quat[i][1], target_quat[i][2], target_quat[i][3]])\n", + " \n", + "robot.viewer.gui.refresh()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "iter \t cost \t stop \t grad \t xreg \t ureg \t step \t feas\n", + " 0 3.68073e+00 1.25267e+00 1.56079e+02 1.00000e-09 1.00000e-09 1.0000 1\n", + " 1 1.00058e+00 1.66607e-01 5.80878e+00 1.00000e-09 1.00000e-09 1.0000 1\n", + " 2 8.01123e-01 6.25271e-03 3.87854e-01 1.00000e-09 1.00000e-09 1.0000 1\n", + " 3 7.95405e-01 6.31666e-05 9.12472e-03 1.00000e-09 1.00000e-09 1.0000 1\n", + " 4 7.94369e-01 1.35846e-05 1.46894e-03 1.00000e-09 1.00000e-09 1.0000 1\n", + " 5 7.94137e-01 1.45173e-06 3.08133e-04 1.00000e-09 1.00000e-09 1.0000 1\n", + " 6 7.94073e-01 3.43830e-07 8.33311e-05 1.00000e-09 1.00000e-09 1.0000 1\n", + " 7 7.94053e-01 8.34184e-08 2.54417e-05 1.00000e-09 1.00000e-09 1.0000 1\n", + " 8 7.94046e-01 2.26953e-08 8.44421e-06 1.00000e-09 1.00000e-09 1.0000 1\n", + " 9 7.94044e-01 6.57880e-09 2.98715e-06 1.00000e-09 1.00000e-09 1.0000 1\n", + "iter \t cost \t stop \t grad \t xreg \t ureg \t step \t feas\n", + " 10 7.94043e-01 2.02090e-09 1.11154e-06 1.00000e-09 1.00000e-09 1.0000 1\n", + " 11 7.94042e-01 6.54583e-10 4.30544e-07 1.00000e-09 1.00000e-09 1.0000 1\n" + ] + }, + { + "data": { + "text/plain": [ + "([array([0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]),\n", + " array([ 0.00000000e+00, -1.01480409e-03, 1.19047887e-01, 8.52402554e-03,\n", + " 0.00000000e+00, 0.00000000e+00, 9.99963670e-01, 0.00000000e+00,\n", + " 0.00000000e+00, 2.38107307e+00, 3.40965151e-01, 0.00000000e+00,\n", + " 0.00000000e+00]),\n", + " array([ 0.00000000e+00, -2.05452635e-03, 2.40532823e-01, 1.32991567e-02,\n", + " 0.00000000e+00, 0.00000000e+00, 9.99911562e-01, 0.00000000e+00,\n", + " 3.22313817e-02, 2.42958316e+00, 1.91016801e-01, 0.00000000e+00,\n", + " 0.00000000e+00]),\n", + " array([ 6.20694709e-19, -3.17269406e-03, 3.47519141e-01, 1.69621642e-02,\n", + " 5.85347588e-18, 1.28108662e-17, 9.99856132e-01, 0.00000000e+00,\n", + " 4.23906229e-02, 2.13942809e+00, 1.46537158e-01, 2.40933816e-16,\n", + " 5.09276617e-16]),\n", + " array([ 7.39828124e-19, -4.47708649e-03, 4.39445718e-01, 1.97573253e-02,\n", + " 5.97249921e-18, 1.27958640e-17, 9.99804805e-01, -1.91653387e-17,\n", + " 4.14284192e-02, 1.83825224e+00, 1.11825327e-01, 3.32975393e-18,\n", + " 0.00000000e+00]),\n", + " array([ 2.82903512e-20, -6.11495486e-03, 5.18076058e-01, 2.16208694e-02,\n", + " -6.21631369e-18, 2.52777666e-17, 9.99766242e-01, -1.38615156e-17,\n", + " 3.23284242e-02, 1.57261657e+00, 7.45577350e-02, -4.78537878e-16,\n", + " 5.09276617e-16]),\n", + " array([ 1.22173209e-19, -8.22995470e-03, 5.85251623e-01, 2.24867613e-02,\n", + " -6.34412454e-18, 3.80147943e-17, 9.99747141e-01, 1.79565984e-17,\n", + " 1.69858459e-02, 1.34406989e+00, 3.46441018e-02, 5.02392430e-18,\n", + " 5.09276617e-16]),\n", + " array([ 7.46264988e-19, -1.09375178e-02, 6.42578223e-01, 2.23178458e-02,\n", + " 6.69723767e-18, 1.01791822e-19, 9.99750926e-01, 1.09908975e-17,\n", + " -2.73988432e-03, 1.14780682e+00, -6.75831681e-03, 4.87678772e-16,\n", + " -1.52782985e-15]),\n", + " array([ 1.50332253e-18, -1.43114155e-02, 6.91417153e-01, 2.10985944e-02,\n", + " 1.86134041e-17, 1.31110558e-17, 9.99777400e-01, -1.02217246e-17,\n", + " -2.50161000e-02, 9.78787186e-01, -4.87815526e-02, 4.88139478e-16,\n", + " 5.09276617e-16]),\n", + " array([ 1.38823642e-18, -1.83759631e-02, 7.32916721e-01, 1.88250001e-02,\n", + " -6.18127693e-18, 5.08349481e-17, 9.99822794e-01, -1.67636478e-17,\n", + " -4.80965517e-02, 8.32575408e-01, -9.09619180e-02, -9.58571878e-16,\n", + " 1.52782985e-15]),\n", + " array([ 2.11979091e-18, -2.31014793e-02, 7.68041906e-01, 1.54966236e-02,\n", + " -7.09542862e-18, 8.90025088e-17, 9.99879920e-01, 1.24648098e-17,\n", + " -7.03472371e-02, 7.05334513e-01, -1.33154727e-01, -1.03737825e-18,\n", + " 1.52782985e-15]),\n", + " array([ 3.37890076e-18, -2.84018226e-02, 7.97596119e-01, 1.11111793e-02,\n", + " 1.57599703e-17, 1.27531017e-16, 9.99938269e-01, -1.18534821e-18,\n", + " -9.02435306e-02, 5.93697289e-01, -1.75433442e-01, 9.53620889e-16,\n", + " 1.52782985e-15]),\n", + " array([ 4.48647299e-18, -3.41333794e-02, 8.22235124e-01, 5.66132259e-03,\n", + " 1.43714229e-17, 1.40339950e-16, 9.99983975e-01, -2.23178132e-17,\n", + " -1.06350643e-01, 4.94635820e-01, -2.18002203e-01, -2.20734625e-17,\n", + " 5.09276617e-16]),\n", + " array([ 6.06502138e-18, -4.00952370e-02, 8.42473940e-01, -8.66786731e-04,\n", + " 1.28513812e-17, 1.27695332e-16, 9.99999624e-01, -1.11612658e-17,\n", + " -1.17295896e-01, 4.05346237e-01, -2.61125587e-01, -2.70271119e-17,\n", + " -5.09276617e-16]),\n", + " array([ 7.62758000e-18, -4.60305688e-02, 8.58687428e-01, -8.49358986e-03,\n", + " -1.27764835e-17, 8.96156123e-17, 9.99963929e-01, 5.08908583e-18,\n", + " -1.21737892e-01, 3.23147560e-01, -3.05076206e-01, -9.84828837e-16,\n", + " -1.52782985e-15]),\n", + " array([ 9.03625127e-18, -5.16295149e-02, 8.71105059e-01, -1.72453830e-02,\n", + " -1.38921858e-17, 5.13065366e-17, 9.99851287e-01, 1.85144949e-17,\n", + " -1.18335213e-01, 2.45391464e-01, -3.50101838e-01, -2.96894800e-19,\n", + " -1.52782985e-15]),\n", + " array([ 9.99403875e-18, -5.65340697e-02, 8.79800445e-01, -2.71532989e-02,\n", + " -1.40303957e-17, 3.84263672e-17, 9.99631281e-01, 1.47997233e-17,\n", + " -1.05715608e-01, 1.69384992e-01, -3.96415952e-01, 2.35691263e-17,\n", + " -5.09276617e-16]),\n", + " array([ 1.02946252e-17, -6.03456269e-02, 8.84676850e-01, -3.82527161e-02,\n", + " -2.63727585e-18, -2.61904871e-19, 9.99268097e-01, 4.55686956e-18,\n", + " -8.24453890e-02, 9.23379978e-02, -4.44216581e-01, 5.14444491e-16,\n", + " -1.52782985e-15]),\n", + " array([ 1.05480478e-17, -6.26359361e-02, 8.85449365e-01, -5.05838756e-02,\n", + " -1.35881541e-17, -1.26160152e-17, 9.98719816e-01, 5.88475490e-18,\n", + " -4.69978433e-02, 1.13242950e-02, -4.93736837e-01, -4.19009063e-16,\n", + " -5.09276617e-16]),\n", + " array([ 1.03098078e-17, -6.29621406e-02, 8.81625850e-01, -6.41947662e-02,\n", + " -1.09213721e-17, -1.78543908e-19, 9.97937389e-01, -6.62020700e-18,\n", + " 2.28185125e-03, -7.67165557e-02, -5.45338670e-01, 7.40777180e-17,\n", + " 5.09276617e-16]),\n", + " array([ 9.60164119e-18, -6.08785820e-02, 8.72542778e-01, -7.91461825e-02,\n", + " -8.56126497e-18, 1.22639541e-17, 9.96863021e-01, -1.69809643e-17,\n", + " 6.72188490e-02, -1.73843590e-01, -5.99604301e-01, 6.16860243e-17,\n", + " 5.09276617e-16]),\n", + " array([ 8.49988271e-18, -5.58873700e-02, 8.57736870e-01, -9.55036145e-02,\n", + " 3.43695196e-18, -1.61817631e-18, 9.95429083e-01, -2.21531807e-17,\n", + " 1.49829560e-01, -2.74245740e-01, -6.56813907e-01, 5.29928889e-16,\n", + " -5.09276617e-16]),\n", + " array([ 7.26181196e-18, -4.68862013e-02, 8.39432447e-01, -1.13173011e-01,\n", + " 1.82394028e-17, 9.81537217e-18, 9.93575296e-01, -1.54972453e-17,\n", + " 2.52096781e-01, -3.20770779e-01, -7.10664350e-01, 5.44853627e-16,\n", + " 5.09276617e-16]),\n", + " array([ 7.59005172e-18, -2.77881062e-02, 8.38782240e-01, -1.30260589e-01,\n", + " 8.70322370e-18, 2.40081804e-17, 9.91479793e-01, 1.85283878e-17,\n", + " 3.73804235e-01, 7.96795268e-02, -6.88632007e-01, -4.35030016e-16,\n", + " 5.09276617e-16]),\n", + " array([ 1.13929007e-17, 1.82559252e-02, 1.00131745e+00, 2.00556445e-03,\n", + " -2.41405129e-17, -1.64687187e-16, 9.99997989e-01, 4.13130436e-17,\n", + " 4.97757618e-01, 3.35179262e+00, 5.30549475e+00, -4.50677754e-16,\n", + " -7.63914925e-15]),\n", + " array([ 2.84248969e-17, 8.74538207e-02, 1.00589868e+00, 9.53309136e-03,\n", + " 1.44924136e-17, -1.51689014e-16, 9.99954559e-01, -9.66380548e-17,\n", + " 1.38493607e+00, 7.56502988e-02, 3.01106799e-01, 1.59591733e-15,\n", + " 5.09276617e-16]),\n", + " array([ 4.58256445e-17, 1.56348753e-01, 1.00474137e+00, 1.85587387e-02,\n", + " 4.88393744e-18, -1.39159872e-16, 9.99827772e-01, -5.17738563e-17,\n", + " 1.37672348e+00, -6.18421268e-02, 3.61062739e-01, -3.24711174e-16,\n", + " 5.09276617e-16]),\n", + " array([ 6.34581031e-17, 2.24468053e-01, 1.00098617e+00, 2.82206369e-02,\n", + " -1.66530879e-17, -1.26841464e-16, 9.99601719e-01, -1.03973650e-17,\n", + " 1.35740404e+00, -1.38738972e-01, 3.86583193e-01, -7.98374402e-16,\n", + " 5.09276617e-16]),\n", + " array([ 8.36041668e-17, 2.91297280e-01, 9.95950811e-01, 3.77879072e-02,\n", + " -3.65201963e-17, -1.65413253e-16, 9.99285782e-01, 5.81042274e-18,\n", + " 1.32704892e+00, -1.88669588e-01, 3.82900880e-01, -7.89590099e-16,\n", + " -1.52782985e-15]),\n", + " array([ 9.76026301e-17, 3.56303351e-01, 9.90557863e-01, 4.67000689e-02,\n", + " 1.33747566e-17, -1.50397550e-16, 9.98908957e-01, -1.32682273e-16,\n", + " 1.28639337e+00, -2.17224529e-01, 3.56806166e-01, 2.07551380e-15,\n", + " 5.09276617e-16]),\n", + " array([ 1.12976580e-16, 4.18962776e-01, 9.85601101e-01, 5.45395391e-02,\n", + " -3.26349926e-17, -1.39848005e-16, 9.98511612e-01, -5.73866950e-17,\n", + " 1.23675523e+00, -2.25340136e-01, 3.13982146e-01, -1.77131957e-15,\n", + " 5.09276617e-16]),\n", + " array([ 1.27292195e-16, 4.78807971e-01, 9.81646719e-01, 6.10308109e-02,\n", + " -2.87731866e-17, -1.52123093e-16, 9.98135883e-01, -7.03365876e-17,\n", + " 1.17979394e+00, -2.16657184e-01, 2.60085930e-01, 1.63285551e-16,\n", + " -5.09276617e-16]),\n", + " array([ 1.39819406e-16, 5.35460287e-01, 9.79009684e-01, 6.60305765e-02,\n", + " -4.88792345e-17, -1.65915476e-16, 9.97817600e-01, -1.17675894e-16,\n", + " 1.11721685e+00, -1.95991835e-01, 2.00395658e-01, -8.06359629e-16,\n", + " -5.09276617e-16]),\n", + " array([ 1.46071366e-16, 5.88646403e-01, 9.77776523e-01, 6.95091215e-02,\n", + " -2.41265357e-17, -1.25788568e-16, 9.97581316e-01, -1.91125052e-16,\n", + " 1.05061842e+00, -1.68282366e-01, 1.39462498e-01, 1.11655732e-15,\n", + " 1.52782985e-15]),\n", + " array([ 1.52028909e-16, 6.38198872e-01, 9.77857485e-01, 7.15256925e-02,\n", + " 2.81773437e-18, -1.11081632e-16, 9.97438758e-01, -1.16505455e-16,\n", + " 9.81421447e-01, -1.37821536e-01, 8.08641605e-02, 1.12606431e-15,\n", + " 5.09276617e-16]),\n", + " array([ 1.58192185e-16, 6.84045501e-01, 9.79048734e-01, 7.22025672e-02,\n", + " -4.21379991e-17, -1.01537252e-16, 9.97389989e-01, -7.32035604e-17,\n", + " 9.10877216e-01, -1.07869502e-01, 2.71451732e-02, -1.76330401e-15,\n", + " 5.09276617e-16]),\n", + " array([ 1.63850939e-16, 7.26193067e-01, 9.81090695e-01, 7.17017312e-02,\n", + " -5.92508428e-17, -1.41096611e-16, 9.97426118e-01, -9.35570030e-17,\n", + " 8.40084960e-01, -8.05735538e-02, -2.00855017e-02, -7.98951926e-16,\n", + " -1.52782985e-15]),\n", + " array([ 1.64720669e-16, 7.64709813e-01, 9.83714776e-01, 7.02063533e-02,\n", + " -2.99518707e-17, -1.51859047e-16, 9.97532490e-01, -2.09001886e-16,\n", + " 7.70007525e-01, -5.70880962e-02, -5.99662584e-02, 1.12988781e-15,\n", + " -5.09276617e-16]),\n", + " array([ 1.61798362e-16, 7.99709392e-01, 9.86676044e-01, 6.79075619e-02,\n", + " -2.81059040e-17, -1.13532182e-16, 9.97691617e-01, -2.44235451e-16,\n", + " 7.01476203e-01, -3.77873875e-02, -9.21717177e-02, 1.67515152e-16,\n", + " 1.52782985e-15]),\n", + " array([ 1.58843857e-16, 8.31337345e-01, 9.89772885e-01, 6.49959262e-02,\n", + " -2.28884083e-17, -1.26042500e-16, 9.97885529e-01, -2.10277174e-16,\n", + " 6.35186810e-01, -2.24938043e-02, -1.16723471e-01, 1.61231917e-16,\n", + " -5.09276617e-16]),\n", + " array([ 1.53589551e-16, 8.59760117e-01, 9.92856254e-01, 6.16565873e-02,\n", + " -1.92056222e-17, -1.13147115e-16, 9.98097423e-01, -2.40639583e-16,\n", + " 5.71691905e-01, -1.06791433e-02, -1.33842256e-01, 1.63884217e-16,\n", + " 5.09276617e-16]),\n", + " array([ 1.46445049e-16, 8.85156168e-01, 9.95831519e-01, 5.80669475e-02,\n", + " -6.52351922e-17, -7.78155545e-17, 9.98312691e-01, -2.37955763e-16,\n", + " 5.11393336e-01, -1.62231847e-03, -1.43843629e-01, -1.76662760e-15,\n", + " 1.52782985e-15]),\n", + " array([ 1.37148563e-16, 9.07708513e-01, 9.98655546e-01, 5.43960109e-02,\n", + " -3.63871145e-17, -8.91470037e-17, 9.98519441e-01, -2.58488048e-16,\n", + " 4.54537444e-01, 5.47748665e-03, -1.47070247e-01, 1.11477255e-15,\n", + " -5.09276617e-16]),\n", + " array([ 1.25271107e-16, 9.27598152e-01, 1.00133094e+00, 5.08047264e-02,\n", + " -5.69627494e-17, -7.76648882e-17, 9.98708606e-01, -3.01253424e-16,\n", + " 4.01213685e-01, 1.14214889e-02, -1.43850600e-01, -8.09356116e-16,\n", + " 5.09276617e-16]),\n", + " array([ 1.10472452e-16, 9.44998037e-01, 1.00389775e+00, 4.74469232e-02,\n", + " -2.95130719e-17, -6.37245173e-17, 9.98873761e-01, -3.42512303e-16,\n", + " 3.51356461e-01, 1.69383621e-02, -1.34474557e-01, 1.11484571e-15,\n", + " 5.09276617e-16]),\n", + " array([ 9.40597891e-17, 9.60067271e-01, 1.00642311e+00, 4.44704547e-02,\n", + " -5.02961714e-17, -5.20621513e-17, 9.99010700e-01, -3.60463236e-16,\n", + " 3.04749562e-01, 2.26206476e-02, -1.19184722e-01, -8.15680480e-16,\n", + " 5.09276617e-16]),\n", + " array([ 7.54786195e-17, 9.72947595e-01, 1.00896289e+00, 4.20190623e-02,\n", + " -2.19024949e-17, -6.36716795e-17, 9.99116809e-01, -3.98801077e-16,\n", + " 2.61032403e-01, 2.83462133e-02, -9.81475344e-02, 1.10908182e-15,\n", + " -5.09276617e-16]),\n", + " array([ 5.55995550e-17, 9.83771923e-01, 1.01136885e+00, 4.02354425e-02,\n", + " -4.16397462e-17, -7.72886957e-17, 9.99190227e-01, -4.25862655e-16,\n", + " 2.19709003e-01, 3.01645042e-02, -7.14052182e-02, -8.16158507e-16,\n", + " -5.09276617e-16]),\n", + " array([ 3.41284949e-17, 9.92745206e-01, 1.01216431e+00, 3.92436001e-02,\n", + " -3.52746748e-17, -1.40787930e-16, 9.99229673e-01, -4.67991190e-16,\n", + " 1.80162301e-01, 1.60654784e-03, -3.97050602e-02, 1.49199294e-16,\n", + " -2.54638308e-15]),\n", + " array([ 9.70687943e-18, 1.00031923e+00, 9.99794061e-01, 1.11666474e-06,\n", + " -7.30987889e-18, -1.06046509e-18, 1.00000000e+00, -5.20099036e-16,\n", + " 1.41690796e-01, -2.53224277e-01, -1.57010253e+00, 1.11744564e-15,\n", + " 5.60204278e-15])],\n", + " [array([21.07778292, 21.33535135, 21.33535135, 21.07778292]),\n", + " array([4.03669933, 3.92342687, 3.92342687, 4.03669933]),\n", + " array([1.49733952, 1.46373916, 1.46373916, 1.49733952]),\n", + " array([1.41147897, 1.38525731, 1.38525731, 1.41147897]),\n", + " array([1.67358194, 1.64542963, 1.64542963, 1.67358194]),\n", + " array([1.94710421, 1.91695306, 1.91695306, 1.94710421]),\n", + " array([2.18513161, 2.15385582, 2.15385582, 2.18513161]),\n", + " array([2.38640324, 2.35465848, 2.35465848, 2.38640324]),\n", + " array([2.55572588, 2.52386242, 2.52386242, 2.55572588]),\n", + " array([2.697653 , 2.66578014, 2.66578014, 2.697653 ]),\n", + " array([2.81558949, 2.78365173, 2.78365173, 2.81558949]),\n", + " array([2.91180343, 2.87964657, 2.87964657, 2.91180343]),\n", + " array([2.98755559, 2.95497976, 2.95497976, 2.98755559]),\n", + " array([3.04320993, 3.0100092 , 3.0100092 , 3.04320993]),\n", + " array([3.07831119, 3.04429839, 3.04429839, 3.07831119]),\n", + " array([3.09167098, 3.05668484, 3.05668484, 3.09167098]),\n", + " array([3.08153775, 3.04542869, 3.04542869, 3.08153775]),\n", + " array([3.04568268, 3.0082746 , 3.0082746 , 3.04568268]),\n", + " array([2.98168219, 2.94270166, 2.94270166, 2.98168219]),\n", + " array([2.89524114, 2.85424835, 2.85424835, 2.89524114]),\n", + " array([2.8422169, 2.7990002, 2.7990002, 2.8422169]),\n", + " array([3.19667838, 3.15599922, 3.15599922, 3.19667838]),\n", + " array([6.41240199, 6.42904544, 6.42904544, 6.41240199]),\n", + " array([25.30491009, 29.83293241, 29.83293241, 25.30491009]),\n", + " array([-17.70668175, -21.48704563, -21.48704563, -17.70668175]),\n", + " array([2.73763918, 2.78293049, 2.78293049, 2.73763918]),\n", + " array([3.22587294, 3.24515134, 3.24515134, 3.22587294]),\n", + " array([3.44298982, 3.44020816, 3.44020816, 3.44298982]),\n", + " array([3.59860182, 3.57888962, 3.57888962, 3.59860182]),\n", + " array([3.73226688, 3.69991719, 3.69991719, 3.73226688]),\n", + " array([3.82866001, 3.78794628, 3.78794628, 3.82866001]),\n", + " array([3.88382025, 3.83872964, 3.83872964, 3.88382025]),\n", + " array([3.90107427, 3.85504476, 3.85504476, 3.90107427]),\n", + " array([3.88852899, 3.84426322, 3.84426322, 3.88852899]),\n", + " array([3.85606928, 3.81548943, 3.81548943, 3.85606928]),\n", + " array([3.81312432, 3.7774458 , 3.7774458 , 3.81312432]),\n", + " array([3.76736928, 3.73724297, 3.73724297, 3.76736928]),\n", + " array([3.72428391, 3.69995559, 3.69995559, 3.72428391]),\n", + " array([3.6872762 , 3.66872956, 3.66872956, 3.6872762 ]),\n", + " array([3.65807802, 3.64514632, 3.64514632, 3.65807802]),\n", + " array([3.63721007, 3.62965493, 3.62965493, 3.63721007]),\n", + " array([3.62440358, 3.62196616, 3.62196616, 3.62440358]),\n", + " array([3.61890242, 3.62133458, 3.62133458, 3.61890242]),\n", + " array([3.61953263, 3.62661538, 3.62661538, 3.61953263]),\n", + " array([3.62477531, 3.6363254 , 3.6363254 , 3.62477531]),\n", + " array([3.628941 , 3.6448327, 3.6448327, 3.628941 ]),\n", + " array([3.60341858, 3.62361999, 3.62361999, 3.60341858]),\n", + " array([3.3819474 , 3.40589401, 3.40589401, 3.3819474 ]),\n", + " array([2.30465688, 1.14857958, 1.14857958, 2.30465688])],\n", + " True)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "models = []\n", + "for i in range(0,len(target_pos)):\n", + " runningModel, terminalModel = uavPlacementModel(target_pos[i], target_quat[i], dt, 'base_link')\n", + " models += [runningModel]*(T-1) + [terminalModel]\n", + "\n", + "q0 = robot.q0\n", + "x0 = np.hstack([m2a(q0), np.zeros(robot.model.nv)])\n", + "\n", + "problem = ShootingProblem(x0, models[:-1], models[-1])\n", + "\n", + "# Creating the DDP solver for this OC problem, defining a logger\n", + "ddp = SolverFDDP(problem)\n", + "ddp.callback = [CallbackDDPVerbose()]\n", + "ddp.callback.append(CallbackDDPLogger())\n", + "\n", + "# Solving it with the DDP algorithm\n", + "ddp.solve(maxiter=150)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "displayTrajectory(robot, ddp.xs, dt)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 1080x720 with 4 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "distanceRotorCOG = 0.1525\n", + "cf = 6.6e-5\n", + "cm = 1e-6\n", + "pltUAM = PlotUAM(ddp.xs, ddp.us, np.size(ddp.us,0), dt, distanceRotorCOG, cf, cm)\n", + "\n", + "fig, axs = pltUAM.plotMotorForces()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'list' object has no attribute 'set_title'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-13-6afaa0e0f774>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0maxs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcontrol\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0maxs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Moments'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'list' object has no attribute 'set_title'" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t = np.arange(0, 2*T*dt-dt, dt)\n", + "control = np.vstack(ddp.us)\n", + "fig = plt.figure()\n", + "axs = plt.plot(t, control[:,1])\n", + "axs.set_title('Moments')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15+" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}