How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.
This page is a placeholder. Its content will be published in December 2026.
Inverse dynamics determines the joint torques that make a robot arm follow a desired motion. You will develop the recursive Newton-Euler algorithm by following sections 8.3 and 8.4 of Lynch and Park (book pages 289 and 293) (Kevin M. Lynch, 2017). Its forward pass carries twists and their rates from the base to the tip, using the adjoint to change frames. The backward pass carries wrenches from the tip to the base. Combining these passes gives the closed form τ=M(θ)θ¨+c(θ,θ˙)+g(θ). The derivation uses the single-body equations from rigid-body dynamics and the adjoint from calculus on Lie groups.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"aegean.ai","description":"Engineering AI Agents - Comprehensive courses on deep learning, computer vision, robotics, and AI systems","colors":{"primary":"#2196C8","light":"#5CADD8","dark":"#1565B0"},"logo":{"light":"https://mintcdn.com/aegeanaiinc/ai8d4zdsUnwq_5J6/logo.png?fit=max\u0026auto=format\u0026n=ai8d4zdsUnwq_5J6\u0026q=85\u0026s=fe5e281c1569f8468ff85157bd7d9dc3","dark":"https://mintcdn.com/aegeanaiinc/ai8d4zdsUnwq_5J6/logo-dark.png?fit=max\u0026auto=format\u0026n=ai8d4zdsUnwq_5J6\u0026q=85\u0026s=6a455ae676293280c72ec43f2ac544b4","href":"/"},"favicon":"https://mintcdn.com/aegeanaiinc/0dr6ajwzGFHGACv0/favicon.png?fit=max\u0026auto=format\u0026n=0dr6ajwzGFHGACv0\u0026q=85\u0026s=c0348644679947ce971abb8037adb632","appearance":{"default":"system","strict":false},"navbar":{"links":[{"href":"https://github.com/aegean-ai","label":"GitHub"},{"href":"https://www.linkedin.com/company/aegean-ai/","label":"LinkedIn"}]},"footer":{"socials":{"github":"https://github.com/aegean-ai","linkedin":"https://www.linkedin.com/company/aegean-ai","x":"https://x.com/aegeanai"},"links":[{"header":"Products","items":[{"label":"Auraison","href":"https://n8n.aegeanai.com"}]},{"header":"Courses","items":[{"label":"AI Foundations","href":"/courses/ai/index"},{"label":"Computer Vision","href":"/courses/cv/index"},{"label":"Robotics","href":"/courses/robotics/index"}]},{"header":"Resources","items":[{"label":"Use These Docs","href":"/use-these-docs"},{"label":"GitHub","href":"https://github.com/aegean-ai"},{"label":"Blog","href":"/blog"},{"label":"RSS Feed","href":"/rss.xml"}]},{"header":"Company","items":[{"label":"About","href":"/about"},{"label":"Careers","href":"/careers/virtual-internships/index"},{"label":"Contact","href":"https://forms.gle/W3z4NTC883mNY5Kr8"},{"label":"Privacy Policy","href":"/privacy"}]}]},"styling":{"eyebrows":"section","latex":true},"integrations":{"ga4":{"measurementId":"G-EHRC22H65X"},"posthog":{"apiKey":"phc_J5w6esvspb1vh8O3MegWoaUYiq1zzWYuv7GTfjgui6F","sessionRecording":true}},"contextual":{"options":["claude","perplexity","mcp","cursor","vscode",{"title":"Report an issue","description":"Tell us about an error on this page","icon":"bug","href":{"base":"https://github.com/aegean-ai/eaia-feedback/issues/new","query":[{"key":"template","value":"page-issue.yml"},{"key":"page","value":"$path"}]}}],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"aegeanaiinc","hasAudioNarration":false,"actualSubdomain":"aegeanaiinc","customDomains":["aegean.ai"],"gitSource":{"type":"github","owner":"aegean-ai","repo":"eaia","deployBranch":"prod","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae46dc1d9167d81040e3d16","collectionId":"b2515e43-3b60-48cb-866b-a61907f6fe53","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae46dc1d9167d81040e3d16"},"feedback":{"agentFeedback":true},"entitlements":{},"buildId":"6ae46dc1d9167d81040e3d16","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Book","count":266},{"language":"default","tag":"Courses","count":59},{"language":"default","tag":"Perception","count":55},{"language":"default","tag":"Products","count":51},{"language":"default","tag":"Applications","count":39},{"language":"default","tag":"Robotics Systems","count":29},{"language":"default","tag":"Manufacturing QC","count":27},{"language":"default","tag":"LLM","count":24},{"language":"default","tag":"Foundations","count":22},{"language":"default","tag":"Physical AI","count":21}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"[class*=Header],[class*=Navbar],[class*=header],[class*=navbar],header,nav{padding-top:1.5rem!important;padding-bottom:1.5rem!important}[class*=Brand] img,[class*=Logo] img,[class*=brand] img,[class*=logo] img,a[href=\"/\"] img:first-child,a[href=\"/\"]>img,header img[alt*=logo i],header img[src*=logo i],nav img[alt*=logo i],nav img[src*=logo i]{height:40px!important;max-height:40px!important;width:auto!important}#navbar #sidebar-title,[class*=SiteName],[class*=site-name],[class*=siteName],a[href=\"/\"]>span,header #sidebar-title,header [class*=Logo] span,header [class*=brand] span,header [class*=logo] span,nav [class*=Logo] span,nav [class*=logo] span{font-size:1.35rem!important;font-weight:600!important}a code,a[href] code{color:inherit!important;text-decoration:none!important;padding:0!important}.callout a,.callout b,.callout em,.callout i,.callout p,.callout strong,[class*=callout] a,[class*=callout] b,[class*=callout] em,[class*=callout] i,[class*=callout] p,[class*=callout] strong{font-size:inherit!important;color:inherit!important}.callout li,.callout ol,.callout ul,[class*=callout] li,[class*=callout] ol,[class*=callout] ul{font-size:inherit!important;color:inherit!important;line-height:inherit!important}.mermaid{text-align:center;display:flex;justify-content:center}.mermaid .labelBkg{background-color:#fff!important;border:1px solid #2f6868!important;border-radius:4px!important;padding:0 4px!important}.mermaid .labelBkg:not(:has(p)){display:none!important}.mermaid .edgeLabel{color:#1c3c3c!important}.dark .mermaid .labelBkg{background-color:#1c3c3c!important;border-color:#84c4c0!important}.dark .mermaid .edgeLabel{color:#84c4c0!important}.mermaid .node circle,.mermaid .node polygon,.mermaid .node rect{fill:none!important;stroke:#9ca3af!important;stroke-width:2px!important;rx:12px;ry:12px;transition:stroke .2s ease,filter .2s ease,stroke-width .2s ease}.mermaid .node .nodeLabel,.mermaid .node .nodeLabel p{font-family:inherit!important}.mermaid .node .nodeLabel p{color:#fff!important}.mermaid .node:hover circle,.mermaid .node:hover polygon,.mermaid .node:hover rect,.mermaid a:hover .node circle,.mermaid a:hover .node polygon,.mermaid a:hover .node rect{stroke:#2196c8!important;stroke-width:3px!important;filter:drop-shadow(0 0 8px rgba(33,150,200,.5));cursor:pointer}.mermaid .cluster rect{rx:12px!important;ry:12px!important}.content table td,.content table th,.markdown table td,.markdown table th,.prose table td,.prose table th,[class*=prose] table td,[class*=prose] table th,article table td,article table th{vertical-align:middle!important;line-height:1.5!important}#pagination{display:none}#banner a{color:inherit!important;text-decoration:none!important}.compact-first-col [data-table-wrapper]{overflow-x:visible!important}.compact-first-col table{table-layout:auto!important;width:100%!important}.compact-first-col table td,.compact-first-col table th{min-width:0!important}.compact-first-col table td:first-child,.compact-first-col table th:first-child{width:1%!important;white-space:nowrap!important}.home-page~:is(.callout, [data-callout-type]){display:none!important}#sidebar .sidebar-group-header,#sidebar button[class*=group],#sidebar-content .sidebar-group-header,#sidebar-content button,.sidebar-group-header,[class*=SidebarGroupHeader],[class*=sidebar-group-header],[class^=sidebar_group]>button,[class^=sidebar_group]>div:first-child,aside button{font-size:14px!important;font-weight:400!important;letter-spacing:normal!important;line-height:1.4!important;padding-top:.5rem!important;padding-bottom:.25rem!important;margin:0!important;text-transform:none!important}.sidebar-group:first-child .sidebar-group-header{padding-top:0!important}.sidebar-nav-group-divider{display:none!important}.sidebar-group{margin:0!important;padding:0!important}#sidebar-content{gap:0!important}#sidebar svg,.sidebar-group svg{width:18px!important;height:18px!important;min-width:18px!important;min-height:18px!important}.sidebar-group-header svg,.sidebar-group-icon svg{width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important}.dark .prose img,.dark [class*=Frame] img,.dark article img,.dark figure img{background-color:#f8f9fa!important;border-radius:8px!important;padding:12px!important}.dark .prose img.no-dark-bg,.dark article img.no-dark-bg,.dark img.no-dark-bg{background-color:transparent!important;border-radius:0!important;padding:0!important}.preview-card{display:flex;flex-direction:column;background:rgba(255,255,255,.03);border-radius:16px;overflow:hidden;transition:background .2s ease,box-shadow .2s ease;text-decoration:none!important;color:inherit!important}.preview-card:hover{background:rgba(255,255,255,.06);box-shadow:0 4px 20px rgba(0,0,0,.3)}.preview-card iframe{width:100%;border:0;border-radius:8px 8px 0 0;display:block}.preview-card-caption{padding:14px 18px 16px}.preview-card-caption h3{font-size:17px!important;font-weight:600!important;margin:0 0 6px!important;line-height:1.4!important}.preview-card-caption p{font-size:13px!important;opacity:.6;margin:0!important;line-height:1.5!important}.preview-card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.preview-card-tag{background:rgba(255,255,255,.05);border:0;border-radius:16px;padding:2px 10px;font-size:11px;cursor:default}.preview-card{border:1px solid rgba(0,0,0,.08)}.dark .preview-card{border:1px solid rgba(255,255,255,.06)}.dark .preview-card img{background-color:transparent!important;padding:0!important}.preview-card-tag{color:rgba(0,0,0,.4);background:rgba(0,0,0,.05)}.dark .preview-card-tag{color:rgba(255,255,255,.5);background:rgba(255,255,255,.05)}.katex,.katex *{line-height:normal}.katex .delimsizing.size1{font-size:1em}.katex .delimsizing.size2{font-size:1.2em}.katex .delimsizing.size3{font-size:1.8em}.katex .delimsizing.size4{font-size:2.4em}.katex-display>.katex{overflow-y:hidden}.page-authors{display:flex;flex-wrap:wrap;gap:2px 18px;margin:-4px 0 28px;font-size:14px;line-height:1.5;opacity:.6}.page-author-affiliation::before{content:\" · \"}"}],"page":{"pagePath":"aiml-common/lectures/dynamics/inverse-dynamics","slug":"/aiml-common/lectures/dynamics/inverse-dynamics","pageMetadata":{"title":"Newton-Euler inverse dynamics","sidebarTitle":"Inverse dynamics","description":"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/inverse-dynamics/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,annotation:`annotation`,em:`em`,hr:`hr`,li:`li`,math:`math`,mi:`mi`,mo:`mo`,mover:`mover`,mrow:`mrow`,p:`p`,semantics:`semantics`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{Callout,Heading,Note}=_components;if(!Callout)_missingMdxReference(`Callout`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsx(_components.p,{children:`This page is a placeholder. Its content will be published in December 2026.`})}),`\n`,_jsxs(_components.p,{children:[`Inverse dynamics determines the joint torques that make a robot arm follow a desired motion. You will develop the recursive Newton-Euler algorithm by following sections 8.3 and 8.4 of Lynch and Park (book pages 289 and 293) (Kevin M. Lynch, 2017). Its forward pass carries twists and their rates from the base to the tip, using the adjoint to change frames. The backward pass carries wrenches from the tip to the base. Combining these passes gives the closed form `,_jsxs(_components.span,{className:`katex`,children:[_jsx(_components.span,{className:`katex-mathml`,children:_jsx(_components.math,{xmlns:`http://www.w3.org/1998/Math/MathML`,children:_jsxs(_components.semantics,{children:[_jsxs(_components.mrow,{children:[_jsx(_components.mi,{children:`τ`}),_jsx(_components.mo,{children:`=`}),_jsx(_components.mi,{children:`M`}),_jsx(_components.mo,{stretchy:`false`,children:`(`}),_jsx(_components.mi,{children:`θ`}),_jsx(_components.mo,{stretchy:`false`,children:`)`}),_jsxs(_components.mover,{accent:`true`,children:[_jsx(_components.mi,{children:`θ`}),_jsx(_components.mo,{children:`¨`})]}),_jsx(_components.mo,{children:`+`}),_jsx(_components.mi,{children:`c`}),_jsx(_components.mo,{stretchy:`false`,children:`(`}),_jsx(_components.mi,{children:`θ`}),_jsx(_components.mo,{separator:`true`,children:`,`}),_jsxs(_components.mover,{accent:`true`,children:[_jsx(_components.mi,{children:`θ`}),_jsx(_components.mo,{children:`˙`})]}),_jsx(_components.mo,{stretchy:`false`,children:`)`}),_jsx(_components.mo,{children:`+`}),_jsx(_components.mi,{children:`g`}),_jsx(_components.mo,{stretchy:`false`,children:`(`}),_jsx(_components.mi,{children:`θ`}),_jsx(_components.mo,{stretchy:`false`,children:`)`})]}),_jsx(_components.annotation,{encoding:`application/x-tex`,children:`\\\\tau = M(\\\\theta)\\\\ddot\\\\theta + c(\\\\theta, \\\\dot\\\\theta) + g(\\\\theta)`})]})})}),_jsxs(_components.span,{className:`katex-html`,\"aria-hidden\":`true`,children:[_jsxs(_components.span,{className:`base`,children:[_jsx(_components.span,{className:`strut`,style:{height:`0.4306em`}}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.1132em`},children:`τ`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2778em`}}),_jsx(_components.span,{className:`mrel`,children:`=`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2778em`}})]}),_jsxs(_components.span,{className:`base`,children:[_jsx(_components.span,{className:`strut`,style:{height:`1.1813em`,verticalAlign:`-0.25em`}}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.109em`},children:`M`}),_jsx(_components.span,{className:`mopen`,children:`(`}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`θ`}),_jsx(_components.span,{className:`mclose`,children:`)`}),_jsx(_components.span,{className:`mord accent`,children:_jsx(_components.span,{className:`vlist-t`,children:_jsx(_components.span,{className:`vlist-r`,children:_jsxs(_components.span,{className:`vlist`,style:{height:`0.9313em`},children:[_jsxs(_components.span,{style:{top:`-3em`},children:[_jsx(_components.span,{className:`pstrut`,style:{height:`3em`}}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`θ`})]}),_jsxs(_components.span,{style:{top:`-3.2634em`},children:[_jsx(_components.span,{className:`pstrut`,style:{height:`3em`}}),_jsx(_components.span,{className:`accent-body`,style:{left:`-0.1667em`},children:_jsx(_components.span,{className:`mord`,children:`¨`})})]})]})})})}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2222em`}}),_jsx(_components.span,{className:`mbin`,children:`+`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2222em`}})]}),_jsxs(_components.span,{className:`base`,children:[_jsx(_components.span,{className:`strut`,style:{height:`1.1813em`,verticalAlign:`-0.25em`}}),_jsx(_components.span,{className:`mord mathnormal`,children:`c`}),_jsx(_components.span,{className:`mopen`,children:`(`}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`θ`}),_jsx(_components.span,{className:`mpunct`,children:`,`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.1667em`}}),_jsx(_components.span,{className:`mord accent`,children:_jsx(_components.span,{className:`vlist-t`,children:_jsx(_components.span,{className:`vlist-r`,children:_jsxs(_components.span,{className:`vlist`,style:{height:`0.9313em`},children:[_jsxs(_components.span,{style:{top:`-3em`},children:[_jsx(_components.span,{className:`pstrut`,style:{height:`3em`}}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`θ`})]}),_jsxs(_components.span,{style:{top:`-3.2634em`},children:[_jsx(_components.span,{className:`pstrut`,style:{height:`3em`}}),_jsx(_components.span,{className:`accent-body`,style:{left:`-0.0556em`},children:_jsx(_components.span,{className:`mord`,children:`˙`})})]})]})})})}),_jsx(_components.span,{className:`mclose`,children:`)`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2222em`}}),_jsx(_components.span,{className:`mbin`,children:`+`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.2222em`}})]}),_jsxs(_components.span,{className:`base`,children:[_jsx(_components.span,{className:`strut`,style:{height:`1em`,verticalAlign:`-0.25em`}}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0359em`},children:`g`}),_jsx(_components.span,{className:`mopen`,children:`(`}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`θ`}),_jsx(_components.span,{className:`mclose`,children:`)`})]})]})]}),`. The derivation uses the single-body equations from `,_jsx(_components.a,{href:`/aiml-common/lectures/dynamics/rigid-body-dynamics/index`,children:`rigid-body dynamics`}),` and the adjoint from `,_jsx(_components.a,{href:`/aiml-common/lectures/motion-algebras/lie-calculus/index`,children:`calculus on Lie groups`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`references`,children:`References`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Kevin M. Lynch, F. (2017). `,_jsx(_components.em,{children:`Modern Robotics`}),`.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Callout,{icon:`bug`,iconType:`regular`,children:_jsxs(_components.p,{children:[`Found an error on this page? `,_jsx(_components.a,{href:`https://github.com/aegean-ai/eaia-feedback/issues/new?template=page-issue.yml\u0026page=/aiml-common/lectures/dynamics/inverse-dynamics`,children:`Report an issue`}),`.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Newton-Euler inverse dynamics","sidebarTitle":"Inverse dynamics","description":"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/inverse-dynamics/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"References","slug":"references","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/aegeanaiinc/d160583580826147/aiml-common/lectures/planning/task-planning/pddl/blocksworld/blocksWorldViz.js","/_mintlify/custom/aegeanaiinc/0663393b76c10385/osano.js"],"subdomain":"aegeanaiinc","siteName":"aegean.ai","title":"Newton-Euler inverse dynamics - aegean.ai","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-12T21:47:57.228Z","originalFileLocation":"aiml-common/lectures/dynamics/inverse-dynamics/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\">\u003cmeta data-mint-head name=\"application-name\" content=\"aegean.ai\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Newton-Euler inverse dynamics - aegean.ai\">\u003cmeta data-mint-head property=\"og:description\" content=\"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"aegean.ai\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://aegeanaiinc.mintlify.app/_mintlify/api/og/v2?division=Dynamics\u0026amp;title=Newton-Euler+inverse+dynamics\u0026amp;description=How+a+forward+pass+of+twists+and+a+backward+pass+of+wrenches+compute+the+joint+torques+for+a+desired+robot-arm+motion.\u0026amp;theme=fe60a9d9d85e19ab420a9d7e\u0026amp;signature=4359ab843e03113ef96ea4d2255dd56bc87970e07db26bdaa2d32a53fa3b4fa8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Newton-Euler inverse dynamics - aegean.ai\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://aegeanaiinc.mintlify.app/_mintlify/api/og/v2?division=Dynamics\u0026amp;title=Newton-Euler+inverse+dynamics\u0026amp;description=How+a+forward+pass+of+twists+and+a+backward+pass+of+wrenches+compute+the+joint+torques+for+a+desired+robot-arm+motion.\u0026amp;theme=fe60a9d9d85e19ab420a9d7e\u0026amp;signature=4359ab843e03113ef96ea4d2255dd56bc87970e07db26bdaa2d32a53fa3b4fa8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/aegeanaiinc/6M9Gi5GgxBzndhcq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"aegean.ai\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2196C8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/aiml-common/lectures/dynamics/inverse-dynamics.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://aegean.ai/#organization\",\"name\":\"aegean.ai\",\"url\":\"https://aegean.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/aegeanaiinc/ai8d4zdsUnwq_5J6/logo.png?fit=max\u0026auto=format\u0026n=ai8d4zdsUnwq_5J6\u0026q=85\u0026s=fe5e281c1569f8468ff85157bd7d9dc3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://aegean.ai#website\",\"name\":\"aegean.ai\",\"url\":\"https://aegean.ai\",\"publisher\":{\"@id\":\"https://aegean.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics#webpage\",\"url\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics\",\"name\":\"Newton-Euler inverse dynamics\",\"description\":\"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\",\"dateModified\":\"2026-10-12T21:47:57.228Z\",\"isPartOf\":{\"@id\":\"https://aegean.ai#website\"},\"breadcrumb\":{\"@id\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dynamics\",\"item\":\"https://aegean.ai/book/dynamics/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Newton-Euler inverse dynamics\",\"item\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics#article\",\"headline\":\"Newton-Euler inverse dynamics\",\"name\":\"Newton-Euler inverse dynamics\",\"description\":\"How a forward pass of twists and a backward pass of wrenches compute the joint torques for a desired robot-arm motion.\",\"url\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics\",\"mainEntityOfPage\":{\"@id\":\"https://aegean.ai/aiml-common/lectures/dynamics/inverse-dynamics#webpage\"},\"dateModified\":\"2026-10-12T21:47:57.228Z\",\"publisher\":{\"@id\":\"https://aegean.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://aegean.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"aegean.ai\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"aegean.ai","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Products","icon":"box","menu":[{"item":"Overview","icon":"box","pages":[{"title":"Overview","href":"/products"}]},{"item":"Platforms","icon":"server","pages":[{"title":"Platforms","href":"/products/platforms"}]},{"item":"Applications","icon":"grid-2","pages":[{"title":"Applications","href":"/products/applications"}]},{"item":"Tech Demonstrations","icon":"flask","pages":[{"title":"Tech Demonstrations","href":"/products/tech-demonstrators"}]}],"pages":[{"title":"Products","href":"/products"}]},{"tab":"Book","icon":"book","menu":[{"item":"Introduction","pages":[{"title":"Introduction","href":"/book/introduction"}]},{"item":"Foundations","pages":[{"title":"Foundations","href":"/book/foundations"}]},{"item":"Neural Networks","pages":[{"title":"Neural Networks","href":"/book/training-dnns"}]},{"item":"Perception","icon":"eye","pages":[{"title":"Perception","href":"/book/perception"}]},{"item":"State Estimation \u0026 Mapping","icon":"compass","pages":[{"title":"State Estimation \u0026 Mapping","href":"/book/state-estimation-mapping"}]},{"item":"LLM","icon":"omega","pages":[{"title":"LLM","href":"/book/llms"}]},{"item":"VLM","icon":"image","pages":[{"title":"VLM","href":"/aiml-common/lectures/vlm"}]},{"item":"ALM","icon":"microphone","pages":[{"title":"ALM","href":"/aiml-common/lectures/speech/text-to-speech-and-voice-cloning"}]},{"item":"Logic","icon":"sitemap","pages":[{"title":"Logic","href":"/book/logic"}]},{"item":"Planning","icon":"route","pages":[{"title":"Planning","href":"/book/task-planning"}]},{"item":"MDPs","icon":"arrows-rotate","pages":[{"title":"MDPs","href":"/book/mdps"}]},{"item":"RL","icon":"arrows-rotate","pages":[{"title":"RL","href":"/book/reinforcement-learning"}]},{"item":"Reasoning","icon":"brain","pages":[{"title":"Reasoning","href":"/aiml-common/lectures/reasoning"}]},{"item":"Latent Transport Models","icon":"wand-magic-sparkles","pages":[{"title":"Latent Transport Models","href":"/book/latent-transport-models"}]},{"item":"Robotics Systems","icon":"robot","groups":[{"group":"Robotics Systems","icon":"robot","pages":[{"title":"How robots move","sidebarTitle":"Overview","href":"/book/robotics-systems"}]},{"group":"Motion Algebras","icon":"shapes","pages":[{"title":"Representing rigid motion","sidebarTitle":"Overview","href":"/book/motion-algebras/index"},{"title":"Configuration space and its topology","sidebarTitle":"Configuration space","href":"/aiml-common/lectures/motion-algebras/configuration-space/index"},{"title":"Lie groups and tangent spaces","sidebarTitle":"Lie I: groups","href":"/aiml-common/lectures/motion-algebras/lie-theory/index"},{"title":"Rotation representations","sidebarTitle":"Rotation representations","href":"/aiml-common/lectures/motion-algebras/rotation-representations/index"},{"title":"Angular velocity","sidebarTitle":"Angular velocity","href":"/aiml-common/lectures/motion-algebras/angular-velocity/index"},{"title":"Exponential coordinates of a rotation","sidebarTitle":"Exponential coordinates","href":"/aiml-common/lectures/motion-algebras/exponential-coordinates/index"},{"title":"The rotation group SO(2) as a circle","sidebarTitle":"SO(2) as a manifold","href":"/aiml-common/lectures/motion-algebras/so2-manifold/index"},{"title":"Motion representations","sidebarTitle":"Motion representations","href":"/aiml-common/lectures/motion-algebras/motion-representations/index"},{"title":"Homogeneous Coordinates","sidebarTitle":"Homogeneous Coordinates","href":"/aiml-common/lectures/motion-algebras/homogeneous-coordinates/index"},{"title":"Quaternions from complex numbers","sidebarTitle":"Quaternions","href":"/aiml-common/lectures/motion-algebras/quaternions/index"},{"title":"Calculus on Lie groups","sidebarTitle":"Lie II: calculus","href":"/aiml-common/lectures/motion-algebras/lie-calculus/index"},{"title":"Lie cheatsheet","sidebarTitle":"Lie cheatsheet","href":"/aiml-common/lectures/motion-algebras/lie-cheatsheet/index"}]},{"group":"Kinematics","icon":"gears","pages":[{"title":"Motion without forces","sidebarTitle":"Overview","href":"/book/kinematics/index"},{"title":"Lie theory in practice","sidebarTitle":"Lie III: applications","tag":"DRAFT","href":"/aiml-common/lectures/kinematics/lie-applications/index"},{"title":"Wheeled Mobile Robots","sidebarTitle":"Wheeled Robots","tag":"DRAFT","href":"/aiml-common/lectures/kinematics/wheeled-robots/index"},{"title":"AR4 Robot Arm Kinematics","sidebarTitle":"AR4 Arm Kinematics","href":"/aiml-common/lectures/kinematics/ar4-forward-inverse-kinematics/index"},{"title":"Lab: The AR4 from Its URDF","sidebarTitle":"AR4 Kinematics Lab","href":"/aiml-common/lectures/kinematics/ar4-kinematics-lab/index"}]},{"group":"Dynamics","icon":"weight-hanging","pages":[{"title":"Why robots move","sidebarTitle":"Overview","href":"/book/dynamics/index"},{"title":"Rigid-body dynamics","sidebarTitle":"Rigid-body dynamics","description":"Equations of motion for a rigid body and robot arm, expressed with twists, wrenches, and the adjoint.","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/rigid-body-dynamics/index"},{"title":"Newton-Euler inverse dynamics","sidebarTitle":"Inverse dynamics","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/inverse-dynamics/index"},{"title":"Simulating a robot arm","sidebarTitle":"Forward dynamics","description":"How to compute a robot arm's motion from applied joint torques and integrate that motion in a simulator.","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/forward-dynamics/index"},{"title":"Dynamics under constraints","sidebarTitle":"Constrained dynamics","tag":"DRAFT","href":"/aiml-common/lectures/dynamics/constrained-dynamics/index"}]},{"group":"Systems Integration","icon":"cubes","pages":[{"title":"Robot Simulation with Gazebo","sidebarTitle":"Simulation","href":"/aiml-common/lectures/simulation/index"},{"title":"Gazebo worlds and the SDF/Xacro format","sidebarTitle":"Gazebo worlds","href":"/aiml-common/lectures/simulation/gazebo-worlds"},{"title":"LLM-driven world and model authoring","sidebarTitle":"Authoring Worlds with LLMs","href":"/aiml-common/lectures/simulation/llm-world-authoring"},{"title":"Object Detection with Keyframe Gating and Vector Storage","sidebarTitle":"Object Detection","href":"/aiml-common/lectures/simulation/object-detection"},{"title":"Semantic Graphs and Re-Localization","sidebarTitle":"Semantic Graphs","href":"/aiml-common/lectures/simulation/semantic-graphs"}]}]},{"item":"Physical AI","icon":"microchip","pages":[{"title":"Physical AI","href":"/book/physical-ai"}]},{"item":"Prerequisites","pages":[{"title":"Prerequisites","href":"/book/prerequisites"}]}]},{"tab":"Courses","icon":"graduation-cap","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/courses"}]},{"item":"Introduction to AI","pages":[{"title":"Introduction to AI","href":"/courses/ai"}]},{"item":"DL for Computer Vision","pages":[{"title":"DL for Computer Vision","href":"/courses/cv"}]},{"item":"AI for Robotics","pages":[{"title":"AI for Robotics","href":"/courses/robotics"}]},{"item":"Resources","pages":[{"title":"Resources","href":"/courses/njit-calendar"}]}],"pages":[{"title":"Courses","href":"/courses"}]},{"tab":"Media","icon":"video","pages":[{"title":"Media","href":"/media"}]},{"tab":"AI Industry","icon":"flask","pages":[{"title":"AI Industry","href":"/research"}]},{"tab":"Blog","icon":"pen-nib","pages":[{"title":"Blog","href":"/blog"}]},{"tab":"Careers","icon":"briefcase","menu":[{"item":"Internships","pages":[{"title":"Internships","href":"/careers/virtual-internships"}]}],"pages":[{"title":"Careers","href":"/careers/virtual-internships"}]},{"tab":"About","icon":"user","pages":[{"title":"About","href":"/about"}]}]},"basePath":"","title":"Newton-Euler inverse dynamics - aegean.ai","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}