{"id":1599,"date":"2025-01-30T12:52:03","date_gmt":"2025-01-30T12:52:03","guid":{"rendered":"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/"},"modified":"2025-01-30T12:52:03","modified_gmt":"2025-01-30T12:52:03","slug":"integrating-flutter-apps-with-ros-a-2025-development-guide","status":"publish","type":"post","link":"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/","title":{"rendered":"Integrating Flutter Apps with ROS: A 2025 Development Guide"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p><span data-contrast=\"none\">Robot Operating System (ROS) is a widely used open-source framework for building robotic applications, offering tools for\u00a0navigation, manipulation, and sensor integration. <\/span><\/p>\n<p><span data-contrast=\"none\">Integrating ROS with mobile platforms like Flutter enables real-time monitoring, control, and data visualization, enhancing the flexibility of robotics in applications such as industrial automation and research. <\/span><\/p>\n<p><span data-contrast=\"none\">However, existing <strong>Flutter packages<\/strong> for ROS face challenges, including outdated SDK compatibility, incomplete features, poor documentation, and limited maintenance, hindering their reliability and scalability. <\/span><\/p>\n<p><span data-contrast=\"none\">Addressing these issues through modern approaches like WebSocket-based communication can unlock the full potential of ROS in mobile app development<\/span><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Turinys:<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Available_Flutter_Packages_for_ROS\" >Available Flutter Packages for ROS\u00a0<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#dartros\" >dartros<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Overview\" >Overview:\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Features\" >Features\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Advantages\" >Advantages\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Limitations\" >Limitations\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Implementation\" >Implementation\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Explanation\" >Explanation\u00a0<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#ros_nodes\" >ros_nodes<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Overview-2\" >Overview:\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Features-2\" >Features:\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Limitations-2\" >Limitations\u00a0\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Implementation-2\" >Implementation\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Code_Snippet\" >Code Snippet\u00a0<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#roslib\" >roslib<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Overview-3\" >Overview\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Features-3\" >Features\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Missing_Features\" >Missing Features:\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Limitations-3\" >Limitations\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Implementation-3\" >Implementation\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Explanation-2\" >Explanation\u00a0<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Comparative_Analysis\" >Comparative Analysis\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#The_Solution_WebSocket_and_Rosbridge\" >The Solution: WebSocket and Rosbridge\u00a0<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Advantages_of_WebSocket_and_rosbridge\" >Advantages of WebSocket and rosbridge\u00a0<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#1_Modern_DartFlutter_Compatibility\" >1. Modern Dart\/Flutter Compatibility<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#2_Scalability_and_Flexibility\" >2. Scalability and Flexibility<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#3_Eliminates_Outdated_Dependencies\" >3. Eliminates Outdated Dependencies<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Step-by-Step_Guide_to_Using_WebSocket_and_rosbridge\" >Step-by-Step Guide to Using WebSocket and rosbridge\u00a0<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Setting_Up_rosbridge\" >Setting Up rosbridge<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Establishing_WebSocket_Communication\" >Establishing WebSocket Communication<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Publishing_and_Subscribing_to_Topics\" >Publishing and Subscribing to Topics<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Handling_Custom_Messages\" >Handling Custom Messages<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Testing_Communication\" >Testing Communication<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/sekmesreceptai.lt\/index.php\/2025\/01\/30\/integrating-flutter-apps-with-ros-a-2025-development-guide\/#Conclusion\" >Conclusion\u00a0<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Available_Flutter_Packages_for_ROS\"><\/span><span id=\"Available_Flutter_Packages_for_ROS\"><b><span data-contrast=\"none\">Available Flutter Packages for ROS<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<h3><span class=\"ez-toc-section\" id=\"dartros\"><\/span><span id=\"dartros\"><b><span data-contrast=\"none\"> dartros<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"Overview\"><\/span><span id=\"Overview\"><b><span data-contrast=\"none\">Overview<\/span><\/b><span data-contrast=\"none\">:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span data-contrast=\"none\">The Dartros package is a Dart-based ROS client library inspired by C++ and <strong>Node.js<\/strong> implementations. It enables ROS operations like connecting to a ROS master, publishing\/subscribing to topics, and generating custom message types for inter-node communication.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:360,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Features\"><\/span><span id=\"Features\"><b><span data-contrast=\"none\">Features<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Publish\/Subscribe (TCP)<\/span><\/b><span data-contrast=\"none\">: Reliable topic communication with standard messages (<\/span><span data-contrast=\"none\">std_msgs<\/span><span data-contrast=\"none\">, <\/span><span data-contrast=\"none\">sensor_msgs<\/span><span data-contrast=\"none\">).<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Services<\/span><\/b><span data-contrast=\"none\">: Handles client-server interactions between nodes.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Message Generation<\/span><\/b><span data-contrast=\"none\">: Supports custom ROS message creation via the <\/span><span data-contrast=\"none\">gendart<\/span><span data-contrast=\"none\"> package.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"none\">ROS Master Connection<\/span><\/b><span data-contrast=\"none\">: Compatible with both local and remote masters.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Advantages\"><\/span><span id=\"Advantages\"><b><span data-contrast=\"none\">Advantages<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Simplifies ROS integration in Dart\/Flutter apps.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Pre-published message libraries for easy dependency management.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"none\">Supports TCP-based communication for reliability.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Limitations\"><\/span><span id=\"Limitations\"><b><span data-contrast=\"none\">Limitations<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><b><span data-contrast=\"none\">SDK Compatibility<\/span><\/b><span data-contrast=\"none\">: Limited to <strong>Dart<\/strong> SDK versions 2.12.0\u20133.4.0, incompatible with the latest versions.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Documentation Gaps<\/span><\/b><span data-contrast=\"none\">: Minimal API docs, requiring reliance on examples.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Platform and Maintenance<\/span><\/b><span data-contrast=\"none\">: Lacks platform support testing and is no longer actively maintained.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Setup Complexity<\/span><\/b><span data-contrast=\"none\">: Custom message generation depends on external setup with the <\/span><span data-contrast=\"none\">gendart<\/span><span data-contrast=\"none\"> package.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"Implementation\"><\/span><span id=\"Implementation\"><b><span data-contrast=\"none\">Implementation<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><b><span data-contrast=\"none\">1. Add Dependency<\/span><\/b><br \/><span data-contrast=\"none\">Include <\/span><span data-contrast=\"none\">dartros<\/span><span data-contrast=\"none\"> in your <\/span><span data-contrast=\"none\">pubspec.yaml<\/span><span data-contrast=\"none\"> file.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">dependencies<\/span><span data-contrast=\"none\">:<\/span><br \/><em>\u00a0 dartros: ^0.2.1\u00a0<\/em><\/p>\n<p><b><span data-contrast=\"none\">2. Code Snippet<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><em>\/\/ Connect to ROS and initialize publisher and subscriber<\/em><br \/><em>Future&lt;void&gt; _connectToROS() async {<\/em><br \/><em>\u00a0 \/\/ Connect to ROS master<\/em><br \/><em>\u00a0 _ros = await Ros.create();<\/em><br \/><em>\u00a0 await _ros.connect(\u2018ws:\/\/localhost:9090\u2019); \/\/ Replace with your ROS master URI<\/em><\/p>\n<p><em>\u00a0 \/\/ Create a publisher for a topic<\/em><br \/><em>\u00a0 _publisher = await _ros.advertise(\u2018\/chatter\u2019, \u2018std_msgs\/String\u2019);<\/em><br \/><em>\u00a0 \/\/ Create a subscriber for a topic<\/em><br \/><em>\u00a0 _subscriber = await _ros.subscribe(\u2018\/chatter\u2019, \u2018std_msgs\/String\u2019, _messageCallback);<\/em><br \/><em>}<\/em><\/p>\n<p><em>\/\/ Callback for handling incoming messages<\/em><br \/><em>void _messageCallback(Message message) {<\/em><br \/><em>\u00a0 print(\u2018Received message: ${message.data}\u2019);<\/em><br \/><em>}<\/em><\/p>\n<p><em>\/\/ Function to publish messages<\/em><br \/><em>Future&lt;void&gt; _publishMessage() async {<\/em><br \/><em>\u00a0 String message = \u2018Hello, ROS!\u2019;<\/em><br \/><em>\u00a0 await _publisher.publish(StringMessage(data: message));<\/em><br \/><em>\u00a0 print(\u2018Message published: $message\u2019);<\/em><br \/><em>}\u00a0<\/em><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Explanation\"><\/span><span id=\"Explanation\"><b><span data-contrast=\"none\">Explanation<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><b><span data-contrast=\"none\">Connect to ROS Master<\/span><\/b><br \/><span data-contrast=\"none\">Establish a WebSocket connection to the ROS master using its IP address <em>(e.g.,<\/em> <em>ws:\/\/&lt;ROS_MASTER_IP&gt;:9090)<\/em>.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Create a ROS Node<\/span><\/b><br \/><span data-contrast=\"none\">Initialize a ROS node instance to manage communication with the ROS master.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Define Topics<\/span><\/b><br \/><span data-contrast=\"none\">Specify the topic names and their message types <em>(e.g., \/chatter with std_msgs\/String)<\/em>.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Publish Messages<\/span><\/b><br \/><span data-contrast=\"none\">Use a Publisher instance to send messages to a specified topic.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Times New Roman\" data-listid=\"5\" data-list-defn-props=\"{&quot;134224900&quot;:false,&quot;335551671&quot;:1,&quot;335552541&quot;:0,&quot;335559683&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Times New Roman&quot;,&quot;469769242&quot;:(65533,0),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Subscribe to Messages<\/span><\/b><br \/><span data-contrast=\"none\">Use a Subscriber instance to listen for messages on a topic and handle them via a callback function.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<h3><span class=\"ez-toc-section\" id=\"ros_nodes\"><\/span><span id=\"ros_nodes\"><b><span data-contrast=\"none\"> ros_nodes<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"Overview-2\"><\/span><span id=\"Overview1\"><b><span data-contrast=\"none\">Overview<\/span><\/b><span data-contrast=\"none\">:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">ros_nodes<\/span><span data-contrast=\"none\"> is a Dart package designed for direct ROS node implementation.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">It supports creating ROS nodes in Dart, enabling topic publishing and subscription.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Features-2\"><\/span><span id=\"Features1\"><b><span data-contrast=\"none\">Features<\/span><\/b><span data-contrast=\"none\">:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Direct node creation and connection to ROS master.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Supports publishing and subscribing to topics.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Limitations-2\"><\/span><span id=\"Limitations1\"><b><span data-contrast=\"none\">Limitations\u00a0<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Limited support for complex message types and services.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">No native WebSocket or ROSBridge integration, restricting its usage in environments where direct TCP communication is not feasible.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"none\">Less mature compared to other ROS libraries, with limited community support.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"none\">No Documentation available eventualy increasing development time and difficulty for developer<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Works only with very old Flutter SDK versions (upto 3.7.1) making it incompatible with our application\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Implementation-2\"><\/span><span id=\"Implementation1\"><b><span data-contrast=\"none\">Implementation<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span data-contrast=\"none\">The following code is used to connect to the ros with your flutter app\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">After installation of ROS in your linux just follow these steps for same execution<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 1:<\/span><\/b><span data-contrast=\"none\"> Get the IP address of you VM (Virtual Machine) using <\/span><span data-contrast=\"none\">ifconfig<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 2:<\/span><\/b><span data-contrast=\"none\"> Add dependecy in <\/span><span data-contrast=\"none\">pubspec.yaml<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">dependencies<\/span><span data-contrast=\"none\">:<\/span><br \/><span data-contrast=\"none\">ros_nodes<\/span><span data-contrast=\"none\">:<\/span><br \/><span data-contrast=\"none\">\u00a0 <\/span><span data-contrast=\"none\">git<\/span><span data-contrast=\"none\">:<\/span><br \/><span data-contrast=\"none\">\u00a0\u00a0\u00a0 <\/span><span data-contrast=\"none\">url<\/span><span data-contrast=\"none\">: <\/span><span data-contrast=\"none\">https:\/\/github.com\/Sashiri\/ros_nodes.git<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:2236190,&quot;335559685&quot;:720,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;469777462&quot;:(916,1832,2748,3664,4580,5496,6412,7328,8244,9160,10076,10992,11908,12824,13740,14656),&quot;469777927&quot;:(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),&quot;469777928&quot;:(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 3:<\/span><\/b><span data-contrast=\"none\"> In RosConfig function update your (Local Machine) IP address\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 4: <\/span><\/b><span data-contrast=\"none\">Run the app and enter the IP address of VM in the textbox. A topic will be created<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Code_Snippet\"><\/span><span id=\"Code_Snippet\"><b><span data-contrast=\"none\">Code Snippet<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><em>void _connect() async {<\/em><br \/><em>\u00a0 final ipAddress = _ipController.text.trim();<\/em><br \/><em>\u00a0 if (ipAddress.isEmpty) {<\/em><br \/><em>\u00a0\u00a0\u00a0 _showMessage(\u2018Please enter a valid IP address.\u2019);<\/em><br \/><em>\u00a0\u00a0\u00a0 return;<\/em><br \/><em>\u00a0 }<\/em><\/p>\n<p><em>\u00a0 try {<\/em><br \/><em>\u00a0\u00a0\u00a0 final config = RosConfig(<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 \u201cmain\u201d,<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 \u2018http:\/\/$ipAddress:11311\/\u2018,<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 \u201c192.168.0.106\u201d,<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 60527,<\/em><br \/><em>\u00a0\u00a0\u00a0 );<\/em><br \/><em>\u00a0\u00a0\u00a0 final client = RosClient(config);<\/em><br \/><em>\u00a0\u00a0\u00a0 setState(() {<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 _rosClient = client;<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 _isConnected = true;<\/em><br \/><em>\u00a0\u00a0\u00a0 });<\/em><br \/><em>\u00a0\u00a0\u00a0 _showMessage(\u2018Connected to ROS Master at $ipAddress\u2019);<\/em><br \/><em>\u00a0\u00a0\u00a0 StdMsgsString message = StdMsgsString();<\/em><br \/><em>\u00a0\u00a0\u00a0 message.data = \u201ctext\u201d;<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0 _topic = RosTopic(\u2018\/feedbackq\u2019, message);<\/em><br \/><em>\u00a0\u00a0\u00a0 await client.unregister(_topic!);<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0 _publisher = await client.register(<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 _topic!,<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 publishInterval: const Duration(milliseconds: 1000),<\/em><br \/><em>\u00a0\u00a0\u00a0 );<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0 \/\/ Auto-incrementing counter<\/em><br \/><em>\u00a0\u00a0\u00a0 int counter = 0;<\/em><br \/><em>\u00a0\u00a0\u00a0 Timer.periodic(<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 const Duration(milliseconds: 500),<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (_) {<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!_isConnected || _topic == null || _publisher == null) return;<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 counter += 1;<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _topic!.msg.data = \u2018Counter: $counter\u2019;<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _publisher!.publishData();<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/em><br \/><em>\u00a0\u00a0\u00a0 );<\/em><br \/><em>\u00a0 } catch (e) {<\/em><br \/><em>\u00a0\u00a0\u00a0 _showMessage(\u2018Failed to connect: $e\u2019);<\/em><br \/><em>\u00a0 }<\/em><br \/><em>}\u00a0<\/em><\/p>\n<ol start=\"3\">\n<li>\n<h3><span class=\"ez-toc-section\" id=\"roslib\"><\/span><span id=\"roslib\"><b><span data-contrast=\"none\"> roslib<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"Overview-3\"><\/span><span id=\"Overview2\"><b><span data-contrast=\"none\">Overview<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><b><span data-contrast=\"none\">roslib<\/span><\/b><span data-contrast=\"none\"> is a Dart library for communicating with ROS nodes over WebSockets using the rosbridge protocol. Inspired by <\/span><span data-contrast=\"none\">roslibjs<\/span><span data-contrast=\"none\">, it implements a subset of features required for ROS communication, including topics, services, and parameters. <\/span><\/p>\n<p><span data-contrast=\"none\">However, it is an <\/span><b><span data-contrast=\"none\">incomplete library<\/span><\/b><span data-contrast=\"none\">, lacking advanced features and compatibility with modern Dart versions.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Features-3\"><\/span><span id=\"Features2\"><b><span data-contrast=\"none\">Features<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><b><span data-contrast=\"none\">Core Components<\/span><\/b><span data-contrast=\"none\">:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(9675),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"2\"><b><span data-contrast=\"none\">ROS Connection<\/span><\/b><span data-contrast=\"none\">: Manages WebSocket communication with ROS.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(9675),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"2\"><b><span data-contrast=\"none\">Topic Object<\/span><\/b><span data-contrast=\"none\">: Supports subscribing, unsubscribing, publishing, advertising, and unadvertising topics.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(9675),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"2\"><b><span data-contrast=\"none\">Service Object<\/span><\/b><span data-contrast=\"none\">: Facilitates service calls, advertisement, and unadvertisement.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(9675),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"2\"><b><span data-contrast=\"none\">Request Object<\/span><\/b><span data-contrast=\"none\">: Provides structured naming and typing for ROS requests.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(9675),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"2\"><b><span data-contrast=\"none\">Param Object<\/span><\/b><span data-contrast=\"none\">: Enables getting, setting, and deleting ROS parameters.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Missing_Features\"><\/span><span id=\"Missing_Features\"><b><span data-contrast=\"none\">Missing Features:<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Actionlib<\/span><\/b><span data-contrast=\"none\">: Components like <\/span><span data-contrast=\"none\">ActionClient<\/span><span data-contrast=\"none\">, <\/span><span data-contrast=\"none\">ActionListener<\/span><span data-contrast=\"none\">, <\/span><span data-contrast=\"none\">Goal<\/span><span data-contrast=\"none\">, and <\/span><span data-contrast=\"none\">SimpleActionServer<\/span><span data-contrast=\"none\"> are not implemented.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"none\">TFClient<\/span><\/b><span data-contrast=\"none\">: No support for TF data from <\/span><span data-contrast=\"none\">tf2_web_republisher<\/span><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"none\">URDF Support<\/span><\/b><span data-contrast=\"none\">: Lacks functionality for handling URDF elements like models, joints, and materials.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"10\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"none\">TCP Connections<\/span><\/b><span data-contrast=\"none\">: No support for ROS communication over TCP.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Limitations-3\"><\/span><span id=\"Limitations2\"><b><span data-contrast=\"none\">Limitations<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><b><span data-contrast=\"none\">Incomplete Implementation<\/span><\/b><span data-contrast=\"none\">: Several critical features such as Actionlib and TFClient remain unimplemented.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Dart SDK Incompatibility<\/span><\/b><span data-contrast=\"none\">:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><span data-contrast=\"none\">Supports Dart <\/span><span data-contrast=\"none\">&lt;3.0.0<\/span><span data-contrast=\"none\">, making it incompatible with modern Dart SDK versions (e.g., 3.6.0) and null safety.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Static Analysis Issues<\/span><\/b><span data-contrast=\"none\">: Fails due to outdated dependencies and unresolved constraints.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Platform Support<\/span><\/b><span data-contrast=\"none\">: Unable to detect supported platforms due to dependency resolution issues.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<p><span data-contrast=\"none\">roslib<\/span><span data-contrast=\"none\"> is suitable for basic ROS-WebSocket communication but requires further development to be viable for <strong>modern applications<\/strong>.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Implementation-3\"><\/span><span id=\"Implementation2\"><b><span data-contrast=\"none\">Implementation<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><b><span data-contrast=\"none\">1. Add Dependency<\/span><\/b><br \/><span data-contrast=\"none\">Include <\/span><span data-contrast=\"none\">dartros<\/span><span data-contrast=\"none\"> in your <\/span><span data-contrast=\"none\">pubspec.yaml<\/span><span data-contrast=\"none\"> file.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">dependencies<\/span><span data-contrast=\"none\">:<\/span><br \/><span data-contrast=\"none\">\u00a0 <\/span><span data-contrast=\"none\">flutter<\/span><span data-contrast=\"none\">:<\/span><br \/><span data-contrast=\"none\">\u00a0\u00a0\u00a0 <\/span><span data-contrast=\"none\">sdk<\/span><span data-contrast=\"none\">: flutter<\/span><br \/><span data-contrast=\"none\">\u00a0 <\/span><span data-contrast=\"none\">roslib<\/span><span data-contrast=\"none\">: ^0.2.0<\/span><\/p>\n<p><b><span data-contrast=\"none\">2. Code Snippet<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><em>\/\/ Initialize ROS connection<\/em><br \/><em>void _initializeRos() {<\/em><br \/><em>\u00a0 ros = Ros(url: \u2018ws:\/\/localhost:9090\u2019);\u00a0 \/\/ ROS WebSocket URL<\/em><br \/><em>\u00a0 ros.onOpen = () {<\/em><br \/><em>\u00a0\u00a0\u00a0 print(\u2018ROS WebSocket connection established\u2019);<\/em><br \/><em>\u00a0\u00a0\u00a0 _subscribeToChatter();<\/em><br \/><em>\u00a0\u00a0\u00a0 _publishMessage();<\/em><br \/><em>\u00a0 };<\/em><br \/><em>\u00a0 ros.onClose = () {<\/em><br \/><em>\u00a0\u00a0\u00a0 print(\u2018ROS WebSocket connection closed\u2019);<\/em><br \/><em>\u00a0 };<\/em><br \/><em>\u00a0 ros.connect();<\/em><br \/><em>}<\/em><\/p>\n<p><em>\/\/ Subscribe to the chatter topic<\/em><br \/><em>void _subscribeToChatter() {<\/em><br \/><em>\u00a0 chatterTopic = Topic(ros, \u2018\/chatter\u2019, \u2018std_msgs\/String\u2019);<\/em><br \/><em>\u00a0 chatterTopic.subscribe((message) {<\/em><br \/><em>\u00a0\u00a0\u00a0 setState(() {<\/em><br \/><em>\u00a0\u00a0\u00a0\u00a0\u00a0 receivedMessage = message(\u2018data\u2019) ?? \u2018No data\u2019;<\/em><br \/><em>\u00a0\u00a0\u00a0 });<\/em><br \/><em>\u00a0 });<\/em><br \/><em>}<\/em><\/p>\n<p><em>\/\/ Publish a message to the chatter topic<\/em><br \/><em>void _publishMessage() {<\/em><br \/><em>\u00a0 Future.delayed(Duration(seconds: 1), () {<\/em><br \/><em>\u00a0\u00a0\u00a0 chatterTopic.publish({\u2018data\u2019: \u2018Hello from Flutter!\u2019});<\/em><br \/><em>\u00a0\u00a0\u00a0 print(\u2018Published message: Hello from Flutter!\u2019);<\/em><br \/><em>\u00a0 }); <\/em><\/p>\n<p><em>}<\/em><\/p>\n<p><em>}\u00a0<\/em><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Explanation-2\"><\/span><span id=\"Explanation1\"><b><span data-contrast=\"none\">Explanation<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><b><span data-contrast=\"none\">Install ROS<\/span><\/b><span data-contrast=\"none\">: Ensure ROS is installed and run <\/span><span data-contrast=\"none\">roscore<\/span><span data-contrast=\"none\"> in a terminal.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Publish Test Message<\/span><\/b><span data-contrast=\"none\">: Use <\/span><span data-contrast=\"none\">rostopic pub<\/span><span data-contrast=\"none\"> to send a message to the <\/span><span data-contrast=\"none\">\/chatter<\/span><span data-contrast=\"none\"> topic.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Set Up Flutter Project<\/span><\/b><span data-contrast=\"none\">: Create a new Flutter project and add <\/span><span data-contrast=\"none\">roslib<\/span><span data-contrast=\"none\"> as a dependency.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Write Code<\/span><\/b><span data-contrast=\"none\">: Replace <\/span><span data-contrast=\"none\">lib\/main.dart<\/span><span data-contrast=\"none\"> with the provided code.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Run Flutter App<\/span><\/b><span data-contrast=\"none\">: Connect to the ROS WebSocket and run the app.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Test Communication<\/span><\/b><span data-contrast=\"none\">: The app should display the message received from ROS, and you can check the <\/span><span data-contrast=\"none\">\/chatter<\/span><span data-contrast=\"none\"> topic using <\/span><span data-contrast=\"none\">rostopic echo<\/span><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">Expected Output<\/span><\/b><span data-contrast=\"none\">: The Flutter app will show the published message, and ROS should display the same message.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Comparative_Analysis\"><\/span><span id=\"Comparative_Analysis\"><b><span data-contrast=\"none\">Comparative Analysis<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table data-tablestyle=\"MsoNormalTable\" data-tablelook=\"1184\">\n<tbody>\n<tr>\n<td data-celllook=\"69905\"><b><span data-contrast=\"auto\">Feature<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"auto\">dartros<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"auto\">ros_nodes<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"auto\">roslib<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Communication Protocol<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">WebSocket (ROSBridge)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Direct TCP<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">WebSocket (ROSBridge)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Topic Publishing\/Subscribing<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Service Calls<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">ROS Node Creation<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Custom Message Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Limited<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Limited<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Actionlib Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">URDF Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">TFClient Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">WebSocket Integration<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u274c<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">\u2705<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Community Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Moderate<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Low<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Moderate<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Platform Support<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Incomplete<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Very Limited<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Failed Detection<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Dart SDK Compatibility<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">2.12.0\u20133.4.0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">&lt; 2.19.1<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">&lt; 3.0.0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Documentation Quality<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Minimal<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">None<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Minimal<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Maintenance Status<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">No Active Maintenance<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">No Active Maintenance<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">No Active Maintenance<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"The_Solution_WebSocket_and_Rosbridge\"><\/span><span id=\"The_Solution_WebSocket_and_Rosbridge\"><b><span data-contrast=\"none\">The Solution: WebSocket and Rosbridge<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"none\">WebSocket is a communication protocol that enables full-duplex interaction between clients and servers, making it ideal for real-time applications. <\/span><\/p>\n<p><span data-contrast=\"none\">Rosbridge, a middleware layer for ROS, provides a JSON API that allows non-ROS systems to interact with ROS nodes seamlessly. Together, they offer a streamlined solution for connecting ROS to modern mobile applications.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Advantages_of_WebSocket_and_rosbridge\"><\/span><span id=\"Advantages_of_WebSocket_and_rosbridge\"><b><span data-contrast=\"none\">Advantages of WebSocket and rosbridge<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_Modern_DartFlutter_Compatibility\"><\/span><span id=\"1_Modern_DartFlutter_Compatibility\"><b><span data-contrast=\"none\">1. Modern Dart\/Flutter Compatibility<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><b\/><span data-contrast=\"none\">Unlike traditional ROS integration methods, WebSocket and rosbridge are compatible with contemporary Dart and <strong>Flutter frameworks<\/strong>. This eliminates the need to rely on outdated or unsupported libraries, ensuring smooth development and deployment.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"2_Scalability_and_Flexibility\"><\/span><span id=\"2_Scalability_and_Flexibility\"><b><span data-contrast=\"none\">2. Scalability and Flexibility<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span data-contrast=\"none\">This approach supports many robotics applications, from small-scale automation to complex systems, without compromising performance. The flexible JSON-based communication makes it easy to adapt to various use cases and system requirements.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"3_Eliminates_Outdated_Dependencies\"><\/span><span id=\"3_Eliminates_Outdated_Dependencies\"><b><span data-contrast=\"none\">3. Eliminates Outdated Dependencies<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span data-contrast=\"none\">By leveraging WebSocket and rosbridge, developers can bypass older, deprecated packages and instead use a modern, lightweight solution. This results in cleaner, more maintainable code and a future-proof application architecture.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Step-by-Step_Guide_to_Using_WebSocket_and_rosbridge\"><\/span><span id=\"Step-by-Step_Guide_to_Using_WebSocket_and_rosbridge\"><b><span data-contrast=\"none\">Step-by-Step Guide to Using WebSocket and rosbridge<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<h3><span class=\"ez-toc-section\" id=\"Setting_Up_rosbridge\"><\/span><span id=\"Setting_Up_rosbridge\"><b><span data-contrast=\"none\"> Setting Up rosbridge<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"15\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Install and configure <\/span><span data-contrast=\"none\">rosbridge_suite<\/span><span data-contrast=\"none\"> on your ROS system.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"15\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Launch the WebSocket server using <\/span><span data-contrast=\"none\">roslaunch rosbridge_server rosbridge_websocket.launch<\/span><span data-contrast=\"none\">.<\/span><br \/><span data-contrast=\"none\">This allows <strong>external applications<\/strong>, including Flutter, to communicate with ROS nodes via WebSocket.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ol start=\"2\">\n<li>\n<h3><span class=\"ez-toc-section\" id=\"Establishing_WebSocket_Communication\"><\/span><span id=\"Establishing_WebSocket_Communication\"><b><span data-contrast=\"none\"> Establishing WebSocket Communication<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Use the <\/span><span data-contrast=\"none\">web_socket_channel<\/span><span data-contrast=\"none\"> package in Flutter to initiate a WebSocket connection.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Connect to the <\/span><span data-contrast=\"none\">ws:\/\/&lt;ROS-IP&gt;:9090<\/span><span data-contrast=\"none\"> endpoint and handle errors and disconnections to ensure stability.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ol start=\"3\">\n<li>\n<h3><span class=\"ez-toc-section\" id=\"Publishing_and_Subscribing_to_Topics\"><\/span><span id=\"Publishing_and_Subscribing_to_Topics\"><b><span data-contrast=\"none\"> Publishing and Subscribing to Topics<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"17\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Send a JSON message to advertise and publish to ROS topics.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"17\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Similarly, subscribe to topics by sending a JSON subscription message.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"17\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">This enables seamless data exchange between your <strong>Flutter app development<\/strong> and ROS.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ol start=\"4\">\n<li>\n<h3><span class=\"ez-toc-section\" id=\"Handling_Custom_Messages\"><\/span><span id=\"Handling_Custom_Messages\"><b><span data-contrast=\"none\"> Handling Custom Messages<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/li>\n<\/ol>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"18\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Define custom ROS message types in your ROS environment and ensure your Flutter app\u2019s JSON structure matches these types.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"18\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Use appropriate topic names and data formats to avoid communication errors.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ol start=\"5\">\n<li>\n<h4><span class=\"ez-toc-section\" id=\"Testing_Communication\"><\/span><span id=\"Testing_Communication\"><b><span data-contrast=\"none\"> Testing Communication<\/span><\/b><\/span><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<\/li>\n<\/ol>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Use ROS tools like <\/span><span data-contrast=\"none\">rostopic echo<\/span><span data-contrast=\"none\"> to monitor message flow.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:1080,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:(8226),&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Verify publishing with <\/span><span data-contrast=\"none\">rostopic pub<\/span><span data-contrast=\"none\"> to ensure correct message formats and topic handling.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><span id=\"Conclusion\"><b><span data-contrast=\"none\">Conclusion<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"none\">Integrating Flutter with ROS using WebSocket and rosbridge offers a modern, flexible, and scalable approach to building robotics applications. <\/span><\/p>\n<p><span data-contrast=\"none\">Developers can achieve real-time data exchange and robust functionality by bypassing outdated dependencies and leveraging direct WebSocket communication. <\/span><\/p>\n<p><span data-contrast=\"none\">This method empowers mobile applications to interface seamlessly with ROS, unlocking new possibilities in robotics and automation while maintaining compatibility with modern Flutter standards.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">If you need further help with Flutter app development, you can contact us at <\/span><strong><span class=\"__cf_email__\" data-cfemail=\"5b32353d341b233a2d342975383436\">(email\u00a0protected)<\/span><\/strong><span data-contrast=\"none\">. We will schedule a free consultation session to explore how Xavor can assist you.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:279}\">\u00a0<\/span><\/p>\n<\/p><\/div>\n<p><script>\n!function(f,b,e,v,n,t,s)\n{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};\nif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\nn.queue=();t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)(0);\ns.parentNode.insertBefore(t,s)}(window, document,'script',\n'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\nfbq('init', '688143682758843');\nfbq('track', 'PageView');\n<\/script><br \/>\n<br \/><br \/>\n<br \/><a href=\"https:\/\/www.xavor.com\/blog\/connecting-flutter-apps-with-ros\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Robot Operating System (ROS) is a widely used open-source framework for building robotic applications, offering&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1600,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[105,3045,104,3011,3043,3044],"class_list":["post-1599","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologijos","tag-apps","tag-development","tag-flutter","tag-guide","tag-integrating","tag-ros"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/posts\/1599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/comments?post=1599"}],"version-history":[{"count":0,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/posts\/1599\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/media\/1600"}],"wp:attachment":[{"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/media?parent=1599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/categories?post=1599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sekmesreceptai.lt\/index.php\/wp-json\/wp\/v2\/tags?post=1599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}