[HN Gopher] $100 robot kit running ROS2 and Navigation2 ___________________________________________________________________ $100 robot kit running ROS2 and Navigation2 Author : jackp510 Score : 83 points Date : 2020-12-11 18:56 UTC (4 hours ago) (HTM) web link (blog.hadabot.com) (TXT) w3m dump (blog.hadabot.com) | blt wrote: | Re: the "what is ROS?" question asked by many on this thread: | | Like others have said, ROS includes a serialization protocol with | codegen, a pub/sub and RPC messaging system with discovery, a | build system, a configuration file system, logging system, and a | repository of packages using them. | | You might ask: why is it popular? One reason: it was started | before the current ubiquitous solutions for those things were | ubiquitous. | | But I think the main reason is: in robotics, we use a lot of | semantically complex data like high-dimensional sensor readings, | probabilistic models of the world, representations of rotation | and angular velocities, etc., and we need to do a lot of things | with that data. For example, suppose we use a vision system to | identify objects from a camera. We don't just display that | information to a user -- it becomes the input to the high level | planner, which is its own complex system. | | If your object recognition library and your planning library are | both pure C++ libraries, then they probably each define their own | classes for the datatype "list of (bounding box, object name) | pairs". You need to write glue code to use the libraries | together. | | However, if those libraries are both ROS packages, the idiomatic | thing is to publish a package containing only message definitions | (like vision_msgs [1]) and have both libraries produce / consume | that. This makes it easier to put together complex systems that | pass around highly structured data, because you don't have to | constantly write glue code to get your libraries to work | together. | | TL;DR: ROS is popular because it's like a big collection of | .proto or .thrift files for complex robotics datatypes that | everyone agrees to use in their libraries. | | [1] https://index.ros.org/p/vision_msgs | lxe wrote: | I'm trying to figure out what ROS2 is -- judging by the docs and | tutorials it seems like a very low level and abstract piece of | complex software but I'm struggling to understand its | practicality. | | Can someone provide an ELI5 or like a few sentences of a "pitch" | style overview? | richmattes wrote: | ROS isn't really one thing. Per the "about"[1] it's really made | up of several pieces: | | Plumbing: | | ROS is centered around a publish/subscribe messaging framework, | with a central broker that ROS processes (called nodes) | register with to advertise their publications and request | subscriptions. Message definitions that are passed on the | pub/sub "topics" are specified in language agnostic Interface | Definition Language (IDL) files. There's an RPC service layer | built on top of the messaging infrastructure, and the central | broker also hosts a 'parameter server' database that nodes can | use to query or update named values. ROS client libraries that | provide APIs for topics/services/parameters are provided for | several languages, primarily C++ and Python. A set of commonly | used message definitions and conventions, which form de-facto | standard interfaces, are used to establish interoperability and | substitutability between ROS nodes. | | Tools: | | ROS provides build tools for individual software packages based | on CMake and custom metadata embedded in an xml file. Packages | can be grouped into workspaces, built with ROS tools, and | workspaces can be layered on top of one another. Other ROS | tools exist for process management (the launch system), | introspection of running ROS processes, interaction with | topics/services, and visualization of message data published | with well-known message types. This list is by no means | comprehensive | | Capabilities: | | Building on the concepts of publication/subscription with | shared interface descriptions, and the package abstraction, | various packages are publicly available that use ROS interfaces | to accomplish various functions. These could include reading | data from a sensor and converting the data to a ROS message, | implementing robotic navigation algorithms, providing a | visualization or UI, or controlling the behavior of a | simulation. It's possible to build on and modify a lot of | existing capabilities to build a system, which arguably speeds | up the | | Ecosystem: | | ROS is widely used across industry and academia, and there's | lots of people familiar with its workings. These people work | together to advance the state of the art of the ROS framework | and the capabilities implemented with it, the | standards/conventions for interoperating with various | components, and | | ROS 2 is an evolution of ROS. It keeps a lot of the same | concepts, but replaces the bespoke pub/sub messaging protocol | with an abstraction to plug in lower-level messaging libraries | (DDS is used by default). The reasons and motivations for | starting over with ROS 2 are outlined here[2], but may require | some familiarity with ROS 1 to get all of the nuance. | | [1] https://www.ros.org/about-ros/ [2] | https://design.ros2.org/articles/why_ros2.html | stefan_ wrote: | ROS itself is basically a glorified message bus, and the | ecosystem around it allows you to quickly cobble together a | robot from disparate parts (use one thing to publish frames | from your specific camera model, feed it into some other module | that does SLAM). | | Very popular in research, so in practice little of it really | works together, much is abandoned and most stuff barely | compiles. Lately there have been "smart" people thinking they | can just install ROS and presto robot AI startup. These people | are in for a harsh lesson. | a_t48 wrote: | > Lately there have been "smart" people thinking they can | just install ROS and presto robot AI startup. These people | are in for a harsh lesson. | | Oh, but they can. The "presto AI" part is easy. Making a | working product after ROS collapses under its own weight is | the tough bit. | ethbr0 wrote: | ROS is a helper framework, for people who would otherwise be | implementing low-level embedded interfaces to arbitrary | hardware, so that they can share more of their work. | | It's like Rails, if instead of targeting the web your | deployment platform were an unmanned autonomous submarine | vehicle. | | And you needed to support a donated Russian sonar, some second- | hand one-off logic boards, some sensors you soldered together | in your lab, and implement a navigation algorithm you only have | in research paper form. | ska wrote: | Basically ROS is a collection of libraries, mostly for and by | researchers for interfacing with and controlling robots. | | Libraries exist at different levels of abstraction, but it is | for the most part not exactly plug-and-play. | | It's super useful if you are for example building robots in an | academic lab, say, or re purposing existing hardware & | software. The further you get from that environment, the less | obvious the fit will be. But if you are playing around with | robotics, ROS can help you avoid reinventing a whole bunch of | wheels just to get started. | jackp510 wrote: | The short elevator pitch in my "unofficial" over-simplified own | words - "ROS is framework to program complex robotics | applications that encourages modularity and shareability of | modules. ROS is to robotics development what Django/Rails is to | web development." | | ROS2 is version 2 of the original ROS framework. | | As a results of the ROS framework, a number of modules | (packages in ROS-talk) for complex robotics algorithms, | functionality has been implemented by companies / the community | and shared among each other. | | For instance, Hadabot reuses the Navigation package (along with | many others) that has been pre-impremented which allows me to | employ many robotics functionalities without having to re- | invent the wheel. | ducktective wrote: | I'm really struggling in learning ROS in a _systematic_ way. The | tutorials are all over the place and somehow unorganized IMO. | When trying to replicate stuff on my machine, all kinds of weird | errors pop up. | | Honestly, I don't even __get __what ROS is about? Like it seems | it is an "amalgamation" of tools and scripts to create a general | API with some ideas of robotics application in mind. Also the | naming of its stack seems weird to me: tf2, MoveIt!, the over- | loading of terms like joint controller, robot controller, etc... | | If anyone can point me to a free, coherent and hands-on study | plan or guide with exercises that actually build and run fine | that would be awesome. | qchris wrote: | I have this exact same problem. I'm not exactly sure why, but | finding _useful_ examples has been a serious pain point for me. | It seems like there 's a serious dearth of material between the | "here's the absolute smallest thing you can do" and "now we're | going to built the F-35, but with ROS!". Like, I want to | subscribe to and manipulate the value in a topic. Fine. But how | about _two_ topics in the same program? All of a sudden my code | won 't compile and the tutorials aren't helpful. | | Especially with the release of ROS2 (which, frustratingly, | seems to be rarely stand-alone, in that the learning process | often references or links to ROS(1) code through things like | rosbridge), it's just been a frustrating experience. If someone | were to release a paid textbook walk-through that actually | explains it in a systematic, stand-alone, way with linked | repositories, I'd buy it tomorrow. | | Which, I suppose, is sort of exactly where this kit is aimed! | jackp510 wrote: | This is exactly what I'm trying to address with Hadabot. A | systematic / opinionated way to learn ROS (specifically ROS 2), | understand its significance, in a hands-on manner, with a real | robot. The next milestone for Hadabot is a very simple | introductory ROS robotics curriculum / syllabus that is not as | intimidating as a MOOC, requires low mental load to get started | and reach various milestones. Lots of hard work ahead to get | this right! Don't hesitate to reach out w thoughts and opinions | - jack AT hadabot DOT com - Jack | ethbr0 wrote: | I can't offer any modern links, but some background and framing | that might help a bit. | | Disclaimer: Everything to follow circa-2010. Modern ROS* may be | substantially different. | | First, and most importantly, "Why ROS?" To which one might | reply "To run robots," but that's not _really_ why. | | Historically, ROS' purpose is so that researchers can avoid | rewriting boilerplate linking / low-level code, and reuse high- | level components developed elsewhere. | | To that end, ROS provides two main functional components: a | standardized message bus, and a somewhat-structured framework | into which one can plug arbitrary modules. So yes, closer to an | API/spec than an OS. | | So the easiest way to think about ROS (the base framework) is | as a no-batteries-, no-motor-, no-X-included kit. Bring your | own everything. And for values of everything, where there is | likely some component out there that does X... but that | component isn't ROS. | | So you (as it sounds like) essentially end up with the | JavaScript ecosystem problem, except moreso. Do I use X or Y | for this purpose? Does X integrate cleanly with A? Does Y? | | When you look at ROS as something useful to a PhD student | pursuing their robotics dissertation on SLAM, but who doesn't | want to write all the other bits, it makes a bit more sense. | mikepurvis wrote: | I've been doing ROS professionally for ten years and have | presented twice at ROSCon. I would argue that part of the | difficulty with this is that ROS is many different things to | different people. I'm a low level platform/OS/firmware guy, so | I tend to care most about the build system, dependency | management, the relationship with the host OS, the standardized | sensor messages, and the approach to logging (rosbag). | | People in the perception space may care more about all the | standard camera drivers, the publicly available SLAM datasets, | and the zero copy nodelet system for passing image date through | a pipeline. | | People in controls care about the simulator integration, and | the flexibility of move_base and its successors through a rich | plugin system. | | Then there are people doing stuff with manipulators, people | doing realtime industrial stuff, people doing quadcopters, | people doing academic research, people trying to build a | product, people doing web frontends. | | It's a lot of use-cases, so it's hard to recommend any one | "getting started" path because it depends a lot what your | interests are and your expected end goal. But generally | speaking a safe option is to get a robot like Turtlebot up in | the simulator, get it map-making and navigating autonomously, | and then start mutating that-- add more sensors to it, or write | your own planner, or make an rviz plugin that does something | interesting, etc. Maybe swap out gmapping for cartographer, or | set it up to explore on its own. | | These kinds of tasks will familiarize you with a lot of the | tools that _almost every_ ROS person uses, so that you 'll have | more of a sense of what the potential next steps are. | DoctorDabadedoo wrote: | > Honestly, I don't even get what ROS is about? | | You can think ROS as a framework aimed at developing robotic | applications (similar to what a REST framework would be for | developing a web API). With it you get access to a lot of open | source packages and tools out of the box (simulation via | Gazebo, native process communication using pub/subs, autonomous | navigation, joint transformation, etc.). There is a lot of | dependence handling to make a robot work (component drivers, | real time comm, planners, SLAM, the list goes on), if you are | able to abstract something of the pipeline, it's worth it. | | The whole thing might not seem very concise, but looking back, | it was released aiming to facilitate research development, all | these packages are maintained indepently. ROS2 is an attempt to | tackle some architecture and scope issues brought up by the | industry. ___________________________________________________________________ (page generated 2020-12-11 23:00 UTC)