4 ms·
ROS is really great for getting started with robotics, but from my experience (and from others who I've talked to) tends to buckle under its own weight in large
by a_t48 7y ago
ROS is really great for getting started with robotics, but from my experience (and from others who I've talked to) tends to buckle under its own weight in larger projects. This isn't to say you shouldn't use it, just be careful with it. It has some really questionable design decisions and implementation details that can bite you later.
- Abishek_Muthian 7y agoIsn't this the case with any Python development in general? Once you start building at scale you'll be forced to use Cython extensions and other non-native python code.
- TeMPOraL 7y agoIsn't this the case with most of Python? It did a great job of pretending to be an efficient language by having libraries pawn off the heavy lifting to companion C implementations. I wonder what's so special about Python that it does this much more often than any of the other languages I know.
- fnord123 7y ago>I wonder what's so special about Python that it does this much more often than any of the other languages I know. You answered it: > It did a great job of pretending to be an efficient language by having libraries pawn off the heavy lifting to companion C implementations. That's a feature.
- a_t48 7y agoThe C++ side of ROS is better but still not amazing.
- stinos 7y agoIsn't this the case with any Python development in general? No this isn't generally true for Python, and I'm not sure why you'd be forced to use Cython for things at scale. Unless you have some particular type of software in mind perhaps?
- Abishek_Muthian 7y ago>Unless you have some particular type of software in mind perhaps? Webservices. May be its fine for couple of hundred users, but when there are thousands of concurrent users with heavy I/O I've been forced to replace asyncio with uvloop, replacing coroutine with gevent, implementing pre-fork worker models etc. to get decent performance. I've since then moved any webservices development to Golang and has been perfect. I understand there are large scale companies like Instagram which supposedly use Python and I don't detest it. It's just there are better tools for job now, especially for a lean startup and of-course Python has it's advantages like being a good first programming language and large library ecosystem.
- moksly 7y agoWe’ve build a few enterprise sized applications in python and has a much better time of it than we ever did with the C#(that still powers most of our software). Dynamic types aren’t exactly great, but Python is generally really good at getting things done. I probably wouldn’t use it if you had millions of concurrent users instead of the thousands we do, but for most projects it will work just fine even when the projects grow in size.
- stult 7y agoThe comment above is true of ROS, full stop. Even in C++ without involving Python. Especially if you have any real time requirements. It uses sockets for interprocess communication, which adds massive amounts of overhead. Replacing ROS and using straight function calls sped up a simulation of a system I was running from 10x real time to 1000x, for example. That's fine for certain applications but just didn't work for my particular use case.
- snagglegaggle 7y agoExamples of poor decisions? I am just interested.
- j-pb 7y ago- Fundamental bug in the way they compute message schema checksums used for compatibility checks, causes buffer overflows and undefined robot behavior when changing array lengths. Is marked as wontfix because they don't want to recompile existing packages. - custom build tooling based on cmake is super cumbersome and buggy, and it means that you simply cannot communicate with ROS based stuff, without yourself becoming a ROS module that uses that custom build tooling - there is no QOS, messages are retained somewhat due to the topic semantic, but you can't tune retention parameters or resends
- protontypes 7y agoWith roslibpy you can communicate with ROS stuff without being a ROS Node: https://github.com/gramaziokohler/roslibpy https://github.com/gramaziokohler/roslibpy "Unlike the rospy library, this does not require a local ROS environment, allowing usage from platforms other than Linux." Please also consider, that this is related mostly to ROS1.
- rmattes 7y agocatkin packages are just CMake projects, and you can use find_package to discover them without making your module into a catkin package. I've written a few drivers this way without any problems (using existing message definitions.) For example: https://bitbucket.org/richmattes/si7021-sensor/src/master/CMakeLists.txt https://bitbucket.org/richmattes/si7021-sensor/src/master/CM... Lack of QOS (and many other things) are definitely a drawback of ROS. ROS 2 is built on top of DDS, which replaces ROS 1's bespoke messaging/transport and has a robust set of tune-able QOS parameters.
- protontypes 7y agoThe experience went into ROS2 that is much better designed for larger projects.
- mottosso 7y agoReplace ROS and robotics with <Product> and <Field>, and this is some solid advice.