{"id":20088245,"url":"https://github.com/alexistm/multimaster_udp","last_synced_at":"2026-06-13T14:01:47.773Z","repository":{"id":150829573,"uuid":"94898418","full_name":"AlexisTM/multimaster_udp","owner":"AlexisTM","description":"UDP broadcast transport layer, with view of reimplementing the multimaster with UDP to run over WiFi","archived":false,"fork":false,"pushed_at":"2017-08-07T07:09:41.000Z","size":33,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-02T14:48:43.858Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexisTM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-20T14:10:00.000Z","updated_at":"2017-07-17T12:23:39.000Z","dependencies_parsed_at":"2023-04-14T12:53:25.818Z","dependency_job_id":null,"html_url":"https://github.com/AlexisTM/multimaster_udp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlexisTM/multimaster_udp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexisTM%2Fmultimaster_udp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexisTM%2Fmultimaster_udp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexisTM%2Fmultimaster_udp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexisTM%2Fmultimaster_udp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexisTM","download_url":"https://codeload.github.com/AlexisTM/multimaster_udp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexisTM%2Fmultimaster_udp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34286976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T16:12:56.614Z","updated_at":"2026-06-13T14:01:47.756Z","avatar_url":"https://github.com/AlexisTM.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# multimaster_udp\n\nMultimaster is a originally fork of the original repo on bitbucket (multimaster) from daenny. Now it focuses on getting UDP broadcast then UDP multicast message passing.\n\n# UDP broadcast\n\n### Architecture\n\n* One port for each topic/data_type\n* Ports chosen are the default port (11411) +1 for each pair (topic/data_type) \n* Robots (Subscribers/Publishers) calls the service `organizer/topic` with a `multimaster_udp/AdvertiseUDP` message to get the port number\n* The `multimaster_udp/AdvertiseUDP` message consist of a `multimaster_udp/TopicInfo` message you have to fill in, omitting the port, the answer from the `organizer.py` will be the `multimaster_udp/TopicInfo` message with the port filled in.\n\n### USAGE\n\n***Smallest UDP subscriber***\n\n```python\n#!/usr/bin/env python\nimport rospy\n\nfrom multimaster_udp.transport import UDPSubscriber\nfrom std_msgs.msg import String\n\ndef callback(data, topic):\n    global counter\n    counter += 1\n    print data, \"\\n received\",counter, \"UDP messages from \\n\", topic\n\ndef main():\n    global counter\n    counter = 0\n    rospy.init_node(\"smallest_subscriber_udp\")\n    # if the callback is not defined (None), it will publish locally \n    # to the equivalent topic.\n    sub = UDPSubscriber(\"hello\", String, callback=None)\n    rospy.spin()\n\nif __name__ == '__main__':\n    main()\n```\n\n***Smallest UDP broadcast publisher***\n\n```python\n#!/usr/bin/env python\nimport rospy\n\nfrom multimaster_udp.transport import UDPPublisher\nfrom std_msgs.msg import String\n\ndef main():\n    rospy.init_node(\"smallest_broadcast_publisher_udp\")\n\n    msg = String(\"World\")\n    pub = UDPPublisher(\"hello\", String)\n\n    rate = rospy.Rate(100)\n    while not rospy.is_shutdown():\n        pub.publish(msg)\n        rate.sleep()\n\nif __name__ == '__main__':\n    main()\n```\n\n### Test the current status\n\nBuild the repo, then execute:\n\n```\nroscore \u0026\nrosrun multimaster_udp organizer.py\n\n# in another terminal\nrosrun multimaster_udp smallest_subscriber_udp.py\n# in another terminal\nrosrun multimaster_udp smallest_publisher_udp.py\n```\n\n# master_sync \nOriginal library \n\n### Usage\n\nYaml configuration file\n\n```\nlocal_pubs: [local_topics_to_register_at_foreign_master]\nforeign_pubs: [foreign_topics_to_register_at_local_master]\nlocal_services: [local_services_to_register_at_foreigner]\nforeign_services: [foreign_services_to_register_at_local]\n```\n\n### Example\n\nThe local master is running a turtle which publish its position and state while using a service to set the destination to travel to.\n  \n* topics : \n    * /turtle0/position\n    * /turtle0/state\n* services:\n    * /turtle0/setGoal\n\nThe foreign master is managing the turtle(s), publishing the map. It wants to call the turtle0 service.\n\n* /master/map\n\nThe master_sync.py node will be ran onto the turtle computer and the configuration for this example is:\n\n```\nlocal_pubs: [\"/turtle0/position\", \"/turtle0/state\"]\nforeign_pubs: [\"/master/map\"]\nlocal_services: [\"/turtle0/setGoal\"]\nforeign_services: []\n```\n\n# Credits\n\n- Alexis Paques (@AlexisTM)\n- daenny (https://bitbucket.org/daenny/multimaster)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexistm%2Fmultimaster_udp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexistm%2Fmultimaster_udp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexistm%2Fmultimaster_udp/lists"}