{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,29]],"date-time":"2026-01-29T21:28:15Z","timestamp":1769722095016,"version":"3.49.0"},"reference-count":34,"publisher":"Association for Computing Machinery (ACM)","issue":"FSE","funder":[{"name":"NSF","award":["SHF-1901242, SHF-1910300, Proto-OKN 2333736, SLES-2416835"],"award-info":[{"award-number":["SHF-1901242, SHF-1910300, Proto-OKN 2333736, SLES-2416835"]}]},{"DOI":"10.13039\/100000185","name":"DARPA","doi-asserted-by":"crossref","award":["VSPELLS - HR001120S0058"],"award-info":[{"award-number":["VSPELLS - HR001120S0058"]}],"id":[{"id":"10.13039\/100000185","id-type":"DOI","asserted-by":"crossref"}]},{"DOI":"10.13039\/100011039","name":"IARPA","doi-asserted-by":"crossref","award":["TrojAI W911NF-19-S0012"],"award-info":[{"award-number":["TrojAI W911NF-19-S0012"]}],"id":[{"id":"10.13039\/100011039","id-type":"DOI","asserted-by":"crossref"}]},{"name":"ONR","award":["N000141712947"],"award-info":[{"award-number":["N000141712947"]}]}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Proc. ACM Softw. Eng."],"published-print":{"date-parts":[[2025,6,19]]},"abstract":"<jats:p>Increasingly popular Robot Operating System (ROS) framework allows building robotic systems by integrating newly developed and\/or reused modules, where the modules can use different versions of the framework (e.g., ROS1 or ROS2) and programming language (e.g. C++ or Python). The majority of such robotic systems' work happens in callbacks. The framework provides various elements for initializing callbacks and for setting up the execution of callbacks. It is the responsibility of developers to compose callbacks and their execution setup elements, and hence can lead to inconsistencies related to the setup of callback execution due to developer's incomplete knowledge of the semantics of elements in various versions of the framework. Some of these inconsistencies do not throw errors at runtime, making their detection difficult for developers. We propose a static approach to detecting such inconsistencies by extracting a static view of the composition of robotic system's callbacks and their execution setup, and then checking it against the composition conventions based on the elements' semantics. We evaluate our ROSCallBaX prototype on the dataset created from the posts on developer forums and ROS projects that are publicly available. The evaluation results show that our approach can detect real inconsistencies.<\/jats:p>","DOI":"10.1145\/3715748","type":"journal-article","created":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T15:16:02Z","timestamp":1750346162000},"page":"668-689","source":"Crossref","is-referenced-by-count":2,"title":["ROSCallBaX: Statically Detecting Inconsistencies in Callback Function Setup of Robotic Systems"],"prefix":"10.1145","volume":"2","author":[{"ORCID":"https:\/\/orcid.org\/0009-0008-3239-4426","authenticated-orcid":false,"given":"Sayali","family":"Kate","sequence":"first","affiliation":[{"name":"Purdue University, West Lafayette, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-5421-4619","authenticated-orcid":false,"given":"Yifei","family":"Gao","sequence":"additional","affiliation":[{"name":"Purdue University, West Lafayette, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-6959-4327","authenticated-orcid":false,"given":"Shiwei","family":"Feng","sequence":"additional","affiliation":[{"name":"Purdue University, West Lafayette, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9544-2500","authenticated-orcid":false,"given":"Xiangyu","family":"Zhang","sequence":"additional","affiliation":[{"name":"Purdue University, West Lafayette, USA"}]}],"member":"320","published-online":{"date-parts":[[2025,6,19]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"No response from service, node won\u2019t close either. https:\/\/answers.ros.org\/question\/283677\/no-response-from-service-node-wont-close-either\/ New link after migration (accessed on","year":"2025","unstructured":"2018. No response from service, node won\u2019t close either. https:\/\/answers.ros.org\/question\/283677\/no-response-from-service-node-wont-close-either\/ New link after migration (accessed on Feb 7, 2025): https:\/\/robotics.stackexchange.com\/questions\/85527\/no-response-from-service-node-wont-close-either"},{"key":"e_1_2_1_2_1","unstructured":"2020. pyan3 - Offline call graph generator for Python 3. https:\/\/pypi.org\/project\/pyan3\/"},{"key":"e_1_2_1_3_1","volume-title":"Rate and sleep function in RCLPY library for ROS2. https:\/\/answers.ros.org\/question\/358343\/rate-and-sleep-function-in-rclpy-library-for-ros2\/ New link after migration (accessed on","year":"2025","unstructured":"2020. Rate and sleep function in RCLPY library for ROS2. https:\/\/answers.ros.org\/question\/358343\/rate-and-sleep-function-in-rclpy-library-for-ros2\/ New link after migration (accessed on Feb 7, 2025): https:\/\/robotics.stackexchange.com\/questions\/96684\/rate-and-sleep-function-in-rclpy-library-for-ros2"},{"key":"e_1_2_1_4_1","unstructured":"2021. Resetting simulation. https:\/\/answers.ros.org\/question\/379116\/resetting-simulation\/"},{"key":"e_1_2_1_5_1","unstructured":"2023. ROS Answers. https:\/\/answers.ros.org\/"},{"key":"e_1_2_1_6_1","unstructured":"2023. ROS2 (Python) Timer callback only calling once when I call spin_once() within it. https:\/\/stackoverflow.com\/questions\/75822409\/ros2-python-timer-callback-only-calling-once-when-i-call-spin-once-within-i"},{"key":"e_1_2_1_7_1","unstructured":"2024. ast \u2014 Abstract Syntax Trees. https:\/\/docs.python.org\/3\/library\/ast.html"},{"key":"e_1_2_1_8_1","unstructured":"2024. Questions tagged ros. https:\/\/stackoverflow.com\/questions\/tagged\/ros"},{"key":"e_1_2_1_9_1","unstructured":"2024. ROS Index. https:\/\/index.ros.org\/"},{"key":"e_1_2_1_10_1","unstructured":"2024. symtable \u2014 Access to the compiler\u2019s symbol tables. https:\/\/docs.python.org\/3\/library\/symtable.html"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/3489517.3530447"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/RTAS52030.2021.00029"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECRTS.2019.6"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1109\/RTAS52030.2021.00028"},{"key":"e_1_2_1_15_1","unstructured":"Albert Danial. 2019. cloc - Count Lines of Code (version 1.82). https:\/\/github.com\/AlDanial\/cloc"},{"key":"e_1_2_1_16_1","unstructured":"ROS 2 Documentation. 2024. Synchronous vs. asynchronous service clients. https:\/\/docs.ros.org\/en\/foxy\/How-To-Guides\/Sync-Vs-Async.html"},{"key":"e_1_2_1_17_1","unstructured":"ROS 2 Documentation. 2024. Using Callback Groups. https:\/\/docs.ros.org\/en\/foxy\/How-To-Guides\/Using-callback-groups.html"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-24622-0_17"},{"key":"e_1_2_1_19_1","unstructured":"Open Source Robotics Foundation. 2024. ROS Documentation. https:\/\/docs.ros.org\/"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/3468264.3468608"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","unstructured":"Sayali Kate Yifei Gao Shiwei Feng and Xiangyu Zhang. 2025. Artifact for \"ROSCallBaX: Statically Detecting Inconsistencies in Callback Function Setup of Robotic Systems\". https:\/\/doi.org\/10.5281\/zenodo.13882807 10.5281\/zenodo.13882807","DOI":"10.5281\/zenodo.13882807"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/3236024.3236035"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1126\/scirobotics.abm6074"},{"key":"e_1_2_1_24_1","unstructured":"Daniel Marjamaeki. 2019. Cppcheck - A tool for static C\/C++ code analysis. https:\/\/cppcheck.sourceforge.io\/"},{"key":"e_1_2_1_25_1","unstructured":"Open Source Robotics Foundation. 2021. ROS - Robot Operating System. https:\/\/www.ros.org\/"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3092703.3092722"},{"key":"e_1_2_1_27_1","volume-title":"IEEE International Conference on Robotics and Automation Workshop on Open Source Software.","author":"Quigley Morgan","year":"2009","unstructured":"Morgan Quigley, Brian Gerkey, Ken Conley, Josh Faust, Tully Foote, Jeremy Leibs, Eric Berger, Rob Wheeler, and Andrew Ng. 2009. ROS: an open-source Robot Operating System. In IEEE International Conference on Robotics and Automation Workshop on Open Source Software."},{"key":"e_1_2_1_28_1","unstructured":"ROS. 2020. rclcpp - ROS2 client library. https:\/\/github.com\/ros2\/rclcpp"},{"key":"e_1_2_1_29_1","unstructured":"ROS. 2020. rclpy - ROS2 client library. https:\/\/github.com\/ros2\/rclpy"},{"key":"e_1_2_1_30_1","unstructured":"ROS. 2020. roscpp and rospy - ROS1 client libraries. https:\/\/github.com\/ros\/ros_comm"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1109\/RTAS58335.2023.00016"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1109\/RTSS49844.2020.00030"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1109\/RTSS55097.2022.00015"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSA53651.2022.00019"}],"container-title":["Proceedings of the ACM on Software Engineering"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3715748","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T15:20:20Z","timestamp":1750346420000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3715748"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,19]]},"references-count":34,"journal-issue":{"issue":"FSE","published-print":{"date-parts":[[2025,6,19]]}},"alternative-id":["10.1145\/3715748"],"URL":"https:\/\/doi.org\/10.1145\/3715748","relation":{},"ISSN":["2994-970X"],"issn-type":[{"value":"2994-970X","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,19]]}}}