cyclonedds-python icon indicating copy to clipboard operation
cyclonedds-python copied to clipboard

does dds support vehicles to interaction on different devices?

Open CuteSmartTiger opened this issue 3 years ago • 4 comments
trafficstars

I run two different cars on the same device, configured with the same domain, and the batches can send and receive information interactively; however, if the two processes are not on the same device, or on different network segments, what should I do the configuration for interaction, is there an example?

CuteSmartTiger avatar Nov 14 '22 02:11 CuteSmartTiger

i write a xml config file,it comes error. it will be better if can give python example and xml config

CuteSmartTiger avatar Nov 14 '22 04:11 CuteSmartTiger

Hi @CuteSmartTiger,

Most of the time, if you have two devices in the same LAN, CycloneDDS "should just work". If your network setup gets more complicated, you can configure network interfaces via the CycloneDDS XML config file, which you mentioned you did. If it is not working, can you share your XML configuration, your network setup and any errors you run into?

thijsmie avatar Nov 15 '22 09:11 thijsmie

xml as follow

<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
    <Domain Id="any">
        <General>
            <Interfaces>
                <NetworkInterface name="inter" address="192.168.158.128" priority="default" multicast="default" />
            </Interfaces>
            <AllowMulticast>default</AllowMulticast>
            <MaxMessageSize>65500B</MaxMessageSize>
        </General>
        <Discovery>
            <EnableTopicDiscoveryEndpoints>true</EnableTopicDiscoveryEndpoints>
        </Discovery>
        <Internal>
            <Watermarks>
                <WhcHigh>500kB</WhcHigh>
            </Watermarks>
        </Internal>
        <Tracing>
            <Verbosity>config</Verbosity>
            <OutputFile>cdds.log.${CYCLONEDDS_PID}</OutputFile>
        </Tracing>
    </Domain>
</CycloneDDS>

python code as follow

from os import environ
environ['CYCLONEDDS_URI'] = '/home/xiaoyao/selfproject/selftool/etc/cyclonedds.xml'

from dataclasses import dataclass
from cyclonedds.domain import DomainParticipant,Domain
from cyclonedds.core import Qos, Policy
from cyclonedds.pub import DataWriter
from cyclonedds.sub import DataReader
from cyclonedds.topic import Topic
from cyclonedds.idl import IdlStruct
from cyclonedds.idl.annotations import key
from time import sleep
import numpy as np

try:
    from names import get_full_name

    name = get_full_name()
except:
    import os

    name = f"{os.getpid()}"


@dataclass
class Chatter(IdlStruct, typename="Chatter"):
    name: str
    key("name")
    message: str
    count: int



rng = np.random.default_rng()
dp = DomainParticipant()
tp = Topic(dp, "Hello", Chatter, qos=Qos(Policy.Reliability.Reliable(0)))
dw = DataWriter(dp, tp)
dr = DataReader(dp, tp)
count = 0

if __name__ == '__main__':
    while True:
        sample = Chatter(name=name, message="Hello, World!", count=count)
        count = count + 1
        print("Writing ", sample)
        dw.write(sample)
        for sample in dr.take(10):
            print("Read ", sample)
        sleep(rng.exponential())

CuteSmartTiger avatar Nov 16 '22 10:11 CuteSmartTiger

@CuteSmartTiger what error are you getting? Your config seems valid to me

eboasson avatar Nov 25 '22 11:11 eboasson