Przejdź do treści

Rozproszone Systemy Sterowania: L4

Komunikacja w sytemach rozproszonych – ZeroMQ

Zadanie (0-10 punktów)

Cel

Utwórz system, w którym dwie aplikacje komunikują się ze sobą z użyciem biblioteki ZeroMQ. Pierwsza aplikacja powinna wysyłać złożoną strukturę danych do drugiej aplikacji z wykorzystaniem serializacji. Druga aplikacja powinna deserializować dane i wyświetlać otrzymaną strukturę.

Uwagi

  • Do serializacji/deserializacji struktury danych użyj biblioteki Google Protocol Buffers.
  • Struktura danych do wysłania (bazuje na ROS Pose).

    Point position
    Quaternion orientation

    gdzie Point zawiera współrzędne x, y, z i Quaternion zawiera elementy: x, y, z, w.

  • ZeroMQ in C++: #include <zmq.hpp>, linker option: -lzmq
Example of protobuf usage in Python
  • Install protobuf compiler (if necessary)

    apt install protobuf-compiler
  • Message schema definition (person_msg.proto file)

    syntax = "proto2";
    
    package tutorial;
    
    message Person {
      required string name = 1;
      optional int32 id = 2;
    }
  • Generate code from schema

    protoc -I=. --python_out=. ./person.proto
  • Serialize message and write it to the file

    import person.person_pb2 as person_pb2
    
    person_msg = person_pb2.Person()
    person_msg.name = "John"
    person_msg.id = 5
    
    # Write message to binary file
    with open("person.bin", "wb") as f:
        data = person_msg.SerializeToString()
        f.write(data)
  • Read a message from file and deserialize it

    import person.person_pb2 as person_pb2
    
    # Read message from binary file
    with open("person.bin", "rb") as f:
        msg = person_pb2.Person().FromString(f.read())

Zasoby: