https://github.com/alexistm/multimaster_udp
UDP broadcast transport layer, with view of reimplementing the multimaster with UDP to run over WiFi
https://github.com/alexistm/multimaster_udp
Last synced: 20 days ago
JSON representation
UDP broadcast transport layer, with view of reimplementing the multimaster with UDP to run over WiFi
- Host: GitHub
- URL: https://github.com/alexistm/multimaster_udp
- Owner: AlexisTM
- License: mit
- Created: 2017-06-20T14:10:00.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-08-07T07:09:41.000Z (almost 9 years ago)
- Last Synced: 2025-03-02T14:48:43.858Z (over 1 year ago)
- Language: Python
- Homepage:
- Size: 32.2 KB
- Stars: 2
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# multimaster_udp
Multimaster 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.
# UDP broadcast
### Architecture
* One port for each topic/data_type
* Ports chosen are the default port (11411) +1 for each pair (topic/data_type)
* Robots (Subscribers/Publishers) calls the service `organizer/topic` with a `multimaster_udp/AdvertiseUDP` message to get the port number
* 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.
### USAGE
***Smallest UDP subscriber***
```python
#!/usr/bin/env python
import rospy
from multimaster_udp.transport import UDPSubscriber
from std_msgs.msg import String
def callback(data, topic):
global counter
counter += 1
print data, "\n received",counter, "UDP messages from \n", topic
def main():
global counter
counter = 0
rospy.init_node("smallest_subscriber_udp")
# if the callback is not defined (None), it will publish locally
# to the equivalent topic.
sub = UDPSubscriber("hello", String, callback=None)
rospy.spin()
if __name__ == '__main__':
main()
```
***Smallest UDP broadcast publisher***
```python
#!/usr/bin/env python
import rospy
from multimaster_udp.transport import UDPPublisher
from std_msgs.msg import String
def main():
rospy.init_node("smallest_broadcast_publisher_udp")
msg = String("World")
pub = UDPPublisher("hello", String)
rate = rospy.Rate(100)
while not rospy.is_shutdown():
pub.publish(msg)
rate.sleep()
if __name__ == '__main__':
main()
```
### Test the current status
Build the repo, then execute:
```
roscore &
rosrun multimaster_udp organizer.py
# in another terminal
rosrun multimaster_udp smallest_subscriber_udp.py
# in another terminal
rosrun multimaster_udp smallest_publisher_udp.py
```
# master_sync
Original library
### Usage
Yaml configuration file
```
local_pubs: [local_topics_to_register_at_foreign_master]
foreign_pubs: [foreign_topics_to_register_at_local_master]
local_services: [local_services_to_register_at_foreigner]
foreign_services: [foreign_services_to_register_at_local]
```
### Example
The local master is running a turtle which publish its position and state while using a service to set the destination to travel to.
* topics :
* /turtle0/position
* /turtle0/state
* services:
* /turtle0/setGoal
The foreign master is managing the turtle(s), publishing the map. It wants to call the turtle0 service.
* /master/map
The master_sync.py node will be ran onto the turtle computer and the configuration for this example is:
```
local_pubs: ["/turtle0/position", "/turtle0/state"]
foreign_pubs: ["/master/map"]
local_services: ["/turtle0/setGoal"]
foreign_services: []
```
# Credits
- Alexis Paques (@AlexisTM)
- daenny (https://bitbucket.org/daenny/multimaster)