bluenviron / goroslib

ROS client library for the Go programming language
MIT License
321 stars 59 forks source link

ROS2 Support #36

Open zaidsasa opened 3 years ago

zaidsasa commented 3 years ago

Does this library support ROS2? if not then any plans to support ROS2.

Thanks in advance

aler9 commented 3 years ago

Absolutely YES but first i need to implement the missing features.

Also, my idea was to rewrite the ROS master in Go, but probably the ROS2 support has a wider audience, so i'm sticking to the latter.

bartekpacia commented 3 years ago

I'd love to see this awesome library getting support for ROS2 as well!

aler9 commented 3 years ago

The main problem of ROS2 is that it's based on another, more generic, protocol, that is DDS, that is relatively newer. There isn't a Go implementation, and it must be build from scratch. This is long and expensive, but i hope it will be done at some point. After this step, a pure-Go ROS2 implementation can be developed.

https://en.wikipedia.org/wiki/Data_Distribution_Service https://www.omg.org/spec/DDS/About-DDS/ https://design.ros2.org/articles/ros_on_dds.html

pvandervelde commented 3 years ago

Any progress on getting ROS2 support? I'd love to use Golang instead of Python

pvandervelde commented 2 years ago

The main problem of ROS2 is that it's based on another, more generic, protocol, that is DDS, that is relatively newer. There isn't a Go implementation, and it must be build from scratch. This is long and expensive, but i hope it will be done at some point. After this step, a pure-Go ROS2 implementation can be developed.

https://en.wikipedia.org/wiki/Data_Distribution_Service https://www.omg.org/spec/DDS/About-DDS/ https://design.ros2.org/articles/ros_on_dds.html

Is this library useful for handling the DDS part: https://github.com/rticommunity/rticonnextdds-connector-go?

l1va commented 2 years ago

Still too young, but can be better than nothing.

erichuiyliu commented 1 year ago

Hey, any updates to support ROS2? Looking forward to it~~

LarryDCJ commented 1 year ago

Is anyone working on this feature? I'd be happy to help out where I can.

LarryDCJ commented 1 year ago

Is anyone working on this feature? I'd be happy to help out where I can.

I’m going to start working on the DDS implementation. @aler9 I’d love to confer with you during the course of development.

aler9 commented 1 year ago

@LarryDCJ hello,

First of all, this library is practically in maintenance mode, since all ROS1 features have been implemented a while ago. Recent commits have been about updating dependencies or bug fixing.

The reason why a Golang ROS2 implementation was not developed yet is because there are not enough reasons to do it. Personally i can't use ROS in my job since its role as middleware is already taken by Kafka, AMQP or SQS, all of which can be horizontally scaled and have a better handling of undelivered messages, while its role as message encoder is already taken by gRPC. The time i can spend on OSS is currently focused on some other protocols which are way more popular.

Furthermore, this porting was never recognized by the official organization (although it's one of the most popular ones), so until now no one showed up offering concrete help.

If someone is willing to start a DDS implementation, i'm willing to review the work, but i can't do more than that at the moment.

LarryDCJ commented 1 year ago

@aler9 Thanks for the insight!

I'm currently writing a driver for the YDLidar G2 and wanted to implement Ros2 written in Go when it's all done.

This is all super new to me as I'm just learning to work with serial data.

ppbrown commented 1 year ago

Did you ever look at https://github.com/yangchenxing/go-dds ? It's quite old, so I would expect you found it before, but... figured I'd ask.

jbcpollak commented 1 year ago

For anyone who's wants to give a Golang ROS2 interface a shot, rather than native golang all the way to the DDS layer, interfacing Go to ROS2's rcl and rmw libraries via C might be a better path. This is how the Python and JavaScript implementions work, and allows the language interface to be independent of the actual middleware that is used, which is good because while DDS is the default, there are other middleware implementations.

The nodejs implementation may be useful as a starting point:

https://github.com/RobotWebTools/rclnodejs

bchoineubility commented 9 months ago

Hi,

Does this library support ros2-galactic ? do you have plan for ros2-humble as well?

BR, Mark

mari-muthu-k commented 4 months ago

Hi, Does this library support ros2-humble ?