ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Interfacing ROS with DSRC

asked 2018-01-23 09:21:15 -0500

RohitM gravatar image

Hi,

I am trying to use DSRC for V2I communication. Does anyone have any tips or resources on how I can begin interfacing ROS with DSRC, I am currently unable to find any resources to help me get started with this. Any help will be much appreciated.

Thanks, Rohit.

edit retag flag offensive close merge delete

Comments

DSRC == Dedicated Short Range Communications?

As far as I understand that is a communications standard, not a specific piece of software. Do you have access to any concrete implementations? "interfacing ROS with DSRC" would not make sense without a stack implementing it.

gvdhoorn gravatar image gvdhoorn  ( 2018-01-23 09:36:52 -0500 )edit

Sorry I should have been clearer. I meant interfacing ROS with a device that follows DSRC as its communication protocol. For example this device

RohitM gravatar image RohitM  ( 2018-01-23 09:45:23 -0500 )edit

What sort of integration are you looking for? Using the devices features (ie: GPS, security features, etc) or using it as a physical transport layer over which you want ROS traffic to flow?

gvdhoorn gravatar image gvdhoorn  ( 2018-01-23 09:57:54 -0500 )edit

Yes, I essentially want to use it as a transport layer to communicate between infrastructure and my autonomous vehicle.

RohitM gravatar image RohitM  ( 2018-01-23 10:34:36 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2018-01-23 11:25:18 -0500

gvdhoorn gravatar image

updated 2018-01-26 03:10:30 -0500

Yes, I essentially want to use it as a transport layer to communicate between infrastructure and my autonomous vehicle.

In that case I don't believe you'd "integrate" anything with ROS: ROS is transport-layer agnostic, so as long as you have an IP network available, everything 'should just work'.

Note: I have no experience with DSRC, but if packet loss and transport delays are common events, ROS 1 will probably not work very well, due to it using standard TCP by default. There is a UDP transport, but it's not universally supported and has some unresolved issues (no automatic fragmentation+reassembly fi).

I'd look at ROS2, or directly at technologies such as DDS. Those will be much more reliable.

If you're not looking to route IP over the radios in the device you link to, then things become rather different.


Edit:

Thanks so much for that info! We would definitely try to have an IP network available but it will be a little difficult.

Without IP in the mix, you're probably going to have to implement an application-level gateway that subscribes to the relevant msgs, encapsulates them properly for Wave, sends them off (using the Wave transceiver) and another gateway on the receiving side that does the opposite (ie: publish).

You could take a look at one of the many multi-master implementations for this and see how they implement such gateways.

Unfortunately we might not be able to use ROS2 because we won't be able to port our python code in ROS1 to ROS2 yet. We're also using a Velodyne which doesn't have new drivers yet

using the ros1_bridge ROS2 pkg you can connect 'islands' of ROS1 together with ROS2 comm infra. Like so: [ROS1 <-> ROS2] <-wireless-> [ROS2 <-> ROS1] ([] is one PC / ros nodegraph).

Technically this should let you use all your ROS1 nodes and benefit from the improved ROS2 networking capabilities.


Edit2:

Thanks so much for your suggestions. I'm not very knowledgeable in communication theory so please tell me if I'm understanding this right: If I make available an IP network using a router, my publisher node will contact the subscriber (through the Master) and decide the protocol (say TCP). After that the message is sent from the computer to the radio device (perhaps via ethernet) and published using radio as the communcation media. On the receiver side the radio device transmits the message to the computer (again via ethernet) and finally reaches the subscriber. Does this sound right?

Network stacks are layered. At some layer (IP), what you describe is correct. But at the application layer (ie: where ROS messages 'live'), depending on the exact configuration and setup, the router is transparent in the sense that ROS nodes on one side of it can receive traffic from the other side without realising that there is a router in between (in the same way that your web browser does not realise there are 10 routers between you and Google ... (more)

edit flag offensive delete link more

Comments

Thanks so much for that info! We would definitely try to have an IP network available but it will be a little difficult. Unfortunately we might not be able to use ROS2 because we won't be able to port our python code in ROS1 to ROS2 yet. We're also using a Velodyne which doesn't have new drivers yet

RohitM gravatar image RohitM  ( 2018-01-23 21:39:03 -0500 )edit

Note that what I describe above is a fairly simple approach that does not use any of the advanced capabilities that DSRC seems to possess. For that you'll want to extend the gateway much more and see whether you can do clever things with redundancy, mesh networking, discovery, etc.

gvdhoorn gravatar image gvdhoorn  ( 2018-01-24 02:58:59 -0500 )edit

an IP network [..] will be a little difficult.

Any reason you say that? The device you link to explicitly states that it can support IP networks (both IPv4 and IPv6).

gvdhoorn gravatar image gvdhoorn  ( 2018-01-24 03:01:58 -0500 )edit

Thanks so much for your suggestions. I'm not very knowledgeable in communication theory so please tell me if I'm understanding this right: If I make available an IP network using a router, my publisher node will contact the subscriber (through the Master) and decide the protocol (say TCP). (1/2)

RohitM gravatar image RohitM  ( 2018-01-25 17:20:39 -0500 )edit

After that the message is sent from the computer to the radio device (perhaps via ethernet) and published using radio as the communcation media. On the receiver side the radio device transmits the message to the computer (again via ethernet) and finally reaches the subscriber. Does this sound right?

RohitM gravatar image RohitM  ( 2018-01-25 17:21:14 -0500 )edit

The reason ROS2 will be difficult is that our publishers are written in python and the ros1_bridge works for C++ messages. We could write a C++ wrapper or port it into C++ if the communication advantages are that high. Thanks again for your help!

RohitM gravatar image RohitM  ( 2018-01-25 17:23:46 -0500 )edit

our publishers are written in python and the ros1_bridge works for C++ messages

just to be clear: there is no such thing as "C++ messages". ROS messages are language-agnostic.

The bridge will work for all ROS messages that have ROS1 and ROS2 equivalents.

You don't have to use ROS 2, ..

gvdhoorn gravatar image gvdhoorn  ( 2018-01-26 03:00:14 -0500 )edit

.. it was just a suggestion, based on the description of your use-case (highly dynamic network, participants leaving / joining / potentially going out of range then coming back, etc). ROS1 was made for 'perfect networks', so can't deal with those kind of circumstances very well.

gvdhoorn gravatar image gvdhoorn  ( 2018-01-26 03:01:27 -0500 )edit

Question Tools

1 follower

Stats

Asked: 2018-01-23 09:21:15 -0500

Seen: 537 times

Last updated: Jan 26 '18