{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/neural-mpc-deep-learning-model-predictive","title":"Real-time Neural-MPC: Deep Learning Model Predictive Control for Quadrotors and Agile Robotic Platforms","arxiv_id":"2203.07747","date":"2022-03-15","proceeding":null,"authors":["Tim Salzmann","Elia Kaufmann","Jon Arrizabalaga","Marco Pavone","Davide Scaramuzza","Markus Ryll"],"abstract":"Model Predictive Control (MPC) has become a popular framework in embedded control for high-performance autonomous systems. However, to achieve good control performance using MPC, an accurate dynamics model is key. To maintain real-time operation, the dynamics models used on embedded systems have been limited to simple first-principle models, which substantially limits their representative power. In contrast to such simple models, machine learning approaches, specifically neural networks, have been shown to accurately model even complex dynamic effects, but their large computational complexity hindered combination with fast real-time iteration loops. With this work, we present Real-time Neural MPC, a framework to efficiently integrate large, complex neural network architectures as dynamics models within a model-predictive control pipeline. Our experiments, performed in simulation and the real world onboard a highly agile quadrotor platform, demonstrate the capabilities of the described system to run learned models with, previously infeasible, large modeling capacity using gradient-based online optimization MPC. Compared to prior implementations of neural networks in online optimization MPC we can leverage models of over 4000 times larger parametric capacity in a 50Hz real-time window on an embedded platform. Further, we show the feasibility of our framework on real-world problems by reducing the positional tracking error by up to 82% when compared to state-of-the-art MPC approaches without neural network dynamics.","url_abs":"https://arxiv.org/abs/2203.07747v5","url_pdf":"https://arxiv.org/pdf/2203.07747v5.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"neural-mpc-deep-learning-model-predictive","repo_url":"https://github.com/tum-aas/neural-mpc","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":null},{"paper_slug":"neural-mpc-deep-learning-model-predictive","repo_url":"https://github.com/Tim-Salzmann/l4casadi","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"model-predictive-control","task_name":"Model Predictive Control"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2203.07747","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2203.07747"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/tum-aas/neural-mpc","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Tim-Salzmann/l4casadi","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"unverified":5},"by_repo_kind":{"official":{"samples":6,"ran":1,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":2,"samples":[{"code_sha256_prefix":"51fd2069aa8fb840","entry":"make_record_dict","repo":"tum-aas/neural-mpc","repo_kind":"official","path":"ros_dd_mpc/src/experiments/point_tracking_and_record.py","file_url":"https://github.com/tum-aas/neural-mpc/blob/HEAD/ros_dd_mpc/src/experiments/point_tracking_and_record.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"51fd2069aa8fb840"}},{"code_sha256_prefix":"b8b4829e6a6bba0e","entry":"aux_function","repo":"Tim-Salzmann/l4casadi","repo_kind":"official","path":"l4casadi/realtime/sensitivities.py","file_url":"https://github.com/Tim-Salzmann/l4casadi/blob/HEAD/l4casadi/realtime/sensitivities.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b8b4829e6a6bba0e"}},{"code_sha256_prefix":"d792571d6dce29b4","entry":"batched_hessian","repo":"Tim-Salzmann/l4casadi","repo_kind":"official","path":"l4casadi/realtime/sensitivities.py","file_url":"https://github.com/Tim-Salzmann/l4casadi/blob/HEAD/l4casadi/realtime/sensitivities.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d792571d6dce29b4"}},{"code_sha256_prefix":"a95b183489db77d5","entry":"batched_jacobian","repo":"Tim-Salzmann/l4casadi","repo_kind":"official","path":"l4casadi/realtime/sensitivities.py","file_url":"https://github.com/Tim-Salzmann/l4casadi/blob/HEAD/l4casadi/realtime/sensitivities.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a95b183489db77d5"}},{"code_sha256_prefix":"2e123ab48be7b4d4","entry":"check_out_data","repo":"tum-aas/neural-mpc","repo_kind":"official","path":"ros_dd_mpc/src/experiments/point_tracking_and_record.py","file_url":"https://github.com/tum-aas/neural-mpc/blob/HEAD/ros_dd_mpc/src/experiments/point_tracking_and_record.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"2e123ab48be7b4d4"}},{"code_sha256_prefix":"943736503235411c","entry":"ts_compile","repo":"Tim-Salzmann/l4casadi","repo_kind":"official","path":"l4casadi/ts_compiler.py","file_url":"https://github.com/Tim-Salzmann/l4casadi/blob/HEAD/l4casadi/ts_compiler.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"943736503235411c"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}