{"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/event-triggered-safe-bayesian-optimization-on","title":"Event-Triggered Safe Bayesian Optimization on Quadcopters","arxiv_id":"2312.08058","date":"2023-12-13","proceeding":null,"authors":["Antonia Holzapfel","Paul Brunzema","Sebastian Trimpe"],"abstract":"Bayesian optimization (BO) has proven to be a powerful tool for automatically tuning control parameters without requiring knowledge of the underlying system dynamics. Safe BO methods, in addition, guarantee safety during the optimization process, assuming that the underlying objective function does not change. However, in real-world scenarios, time-variations frequently occur, for example, due to wear in the system or changes in operation. Utilizing standard safe BO strategies that do not address time-variations can result in failure as previous safe decisions may become unsafe over time, which we demonstrate herein. To address this, we introduce a new algorithm, Event-Triggered SafeOpt (ETSO), which adapts to changes online solely relying on the observed costs. At its core, ETSO uses an event trigger to detect significant deviations between observations and the current surrogate of the objective function. When such change is detected, the algorithm reverts to a safe backup controller, and exploration is restarted. In this way, safety is recovered and maintained across changes. We evaluate ETSO on quadcopter controller tuning, both in simulation and hardware experiments. ETSO outperforms state-of-the-art safe BO, achieving superior control performance over time while maintaining safety.","url_abs":"https://arxiv.org/abs/2312.08058v1","url_pdf":"https://arxiv.org/pdf/2312.08058v1.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":"event-triggered-safe-bayesian-optimization-on","repo_url":"https://github.com/antoholz/etso","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}}],"tasks":[{"task_slug":"bayesian-optimization","task_name":"Bayesian Optimization"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2312.08058","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.08058"}},"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/antoholz/etso","reach":{"status":"ok"}}],"summary":{"ran":7},"by_repo_kind":{"official":{"samples":7,"ran":7,"repositories":1}},"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":7,"samples":[{"code_sha256_prefix":"45aea5bcd193b660","entry":"beta_bog","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_simulation/utils.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_simulation/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"45aea5bcd193b660"}},{"code_sha256_prefix":"0e59ea235ccff3d0","entry":"beta_const","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_simulation/utils.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_simulation/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0e59ea235ccff3d0"}},{"code_sha256_prefix":"95e79cfbb3158449","entry":"deg2rad","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_hardware/ETSO_experiments.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_hardware/ETSO_experiments.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"95e79cfbb3158449"}},{"code_sha256_prefix":"15e1c4bfc5046ca4","entry":"get_postion","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_hardware/figure-8.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_hardware/figure-8.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"15e1c4bfc5046ca4"}},{"code_sha256_prefix":"4f99f8c70315ceed","entry":"get_trajectory_bernoulli","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_hardware/ETSO_experiments.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_hardware/ETSO_experiments.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4f99f8c70315ceed"}},{"code_sha256_prefix":"c0299794e864df02","entry":"get_trajectory_gerono","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_hardware/ETSO_experiments.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_hardware/ETSO_experiments.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c0299794e864df02"}},{"code_sha256_prefix":"1b9b2469c466c569","entry":"get_trajectory_xy","repo":"antoholz/etso","repo_kind":"official","path":"ETSO_simulation/utils.py","file_url":"https://github.com/antoholz/etso/blob/HEAD/ETSO_simulation/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1b9b2469c466c569"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}