what is Ross that's a great question Roz stands for the robot operating system it's not really an operating system it's more like middleware so let's dig into that a little bit first of all a little bit of background about robots you're probably familiar with these two that are shown here yeah once just a toy one's an appliance you might buy it supermarket or at the store pretty common but they represent you know a history of robots which may not be exactly where we're at now we're actually transitioning to a really interesting new stage of robots where we have robots that are with people they operate with people closely nearby people and their industrial robots whereas before our industrial robots will be on their own separate network and behind a physical you know barrier to prevent protect people's safety now we see them wandering around supermarket shelves along with the rest of customers and supermarkets that aren't even familiar with robots and these robots are doing tasks like inventory shelves we also see robots doing tasks like delivering food to college students to folks inside cities and and and more urban areas and very common of course you're familiar with other headline robot uses for things like assisting in medical fields or self-driving cars and so on and so on all this speaks to robots moving into mainstream being connected to the same networks as other computers and being more accessible and a lot of that you'll see is driven by and supported by roz being the open source premier in a repository for a lot of general-purpose libraries so that these robots don't have to be built from scratch so the next thing I want to do is take a quick look at the history of bras just so you understand how we got to where we're at you'll find the roz open source community at bras org Ross comes out of an original project over a decade ago known as Willow Garage and now Roz is spearheaded by open robotics the open open robotics nonprofit organization actually is the leader for the Ross community on the Ross homepage you'll see how to download and install as well as a lot of the support for how to get started and how to install and how to work with Ross all the Rosco's as I mentioned is open source has the community to go with it very active community and you'll find the Ross projects all available on github there's a lot of documentation to go with it as well you'll find that anchored off of the Roz are quick e installations getting started and so on as I mentioned Roz has been around for over a decade and it started out as an academic exercise about three years ago the community recognized that Roz needed some fundamental changes in order to make it support where robotics was heading in order to support industrial mainstream commercial products running on the open source roz infrastructure so based on that a project was started kicked off to do the next generation of Roz Roz to all the documentation on how Roz Wan was migrated to Roz 2 and continues to be migrated is available through design rose to org so you can see how this is migrated the key thing for you to keep in mind is that generally Roz won and Roz to are not interoperable you can bridge them so that you can have one robot that uses Roz one and Roz two parts so you have to be very aware of whether you're working in Roz one or Roz to Roz two is is a viable product right now and there are robots working on it there are many more working ra's one but the Raza full-on community is definitely migrating to Ross - one of the key things that's different with Ross - is the networking infrastructure rods one had a hub-and-spoke single point of failure design whereas Roz - as a much more robust messaging pure infrastructure or protocol known as DDS for dynamic data services you can find more about how to install and work with Roz on index Roz org we're going to be working through the installation here and after word down here if you want to learn more about Roz I highly suggest walking through the tutorials they do everything from how to get started with Roz as well as doing some some very advanced development and both Python and C++ and everything else along the way okay so with that in mind let's take a look at the kind of basic basic structure of how robots put together what's our conceptual model it's based first of all on a computer the robots running a computer our robot is going to be running a Raspberry Pi there's an application that makes the robot run that runs on that computer usually it interfaces with technology through these general-purpose libraries they'll have a data bus typically a USB connection to a controller a controller will make a digital connection to a driver and then the driver translates that digital signal into an analog signal to actually make an effect in the real world in the case of an actuator or descent something from the real world in the case of a sensor so this allows the robot to interact with the real world and that's the big difference between a robot and most of the other computer systems you've dealt with other than that same concepts apply you have a computer that's running software and that software makes an effect if I look a little bit more and how Roz fits into the mix has middleware weave right Roz applications that take advantage of all the rich libraries that are provided with Roz Roz also gives us this communications ability so that I can spread my application across multiple computers if I want or I can take notes and move them into other places move them on the same computer or onto a different place other than that all of this remains the same I still need I Oh to control different parts of my robot and to read from sensors all this is done through one one set of standard constructs that Roz exposes and that's nodes parameters topics services and actions so let's look at take a look at those five things a node is essentially a low-level computational process so within my robot all of my things are pulled together into a node so that you can think of as a process then I have parameters parameters are just simply multivariate dictionary it's a dictionary that describes the robot so you can ask of certain variables or set certain variables and parameters within this parameter functions all built into the Ross construct gets more interesting when you think about topic services and actions these all belong to a node so within a node you can request to create a new topic a topic is a simple message infrastructure a messaging structure it's a publish and subscribe pub/sub messaging structure to way or receive or send messages so you can create a talker on a topic that sends a message out and you can create a subscriber that listens to messages on a topic so that's how communications and data happens back and forth exchange back and forth between notes within that we also have services so nodes can host services that ask a note to do something or ask a robot to do something your services are typically a synchronous request so the service will block until the request is complete actions within a robot or you can ask a robot to achieve a goal move to a certain place move to put yourself in a certain position or figure out how to do a thing that's an action as the robot takes time to do that action it'll feed back to us and tell us how well it's doing it'll tell us why it's achieved and it'll tell us if it's been blocked by that so between these three constructs available to nodes topic services and actions were able to put robots together so where Ross fits into this is it it exposes these in a very standard way to all the parts of the robot whether you're talking about the robot hardware or you're talking about how the robot communicates with its environment and with other parts of the robot or talks across different machines all of that is built into the lower level of Ross at the higher level of Ross you see the advanced application so if I use these standard interfaces of topic services and actions that are created by nodes now I can have something like a 3d object recognition application plugged right into Rus or a navigation application or a movement application that allows a jointed arm to move to a certain location all those things are standalone applications that actually have shims into roz they've been exposed to Raw's by the open source community so you can just plug those in and then you plug in different hardware and everything will work the last thing I mentioned is client libraries client libraries you'll find really helpful these are essentially the different programming languages that Ross exposes for you to use the primary ones or C++ and Python so within C++ code within Python code you can create nodes you can have nodes subscribe to topics and perform actions however there are a number of third-party client libraries as well no js' Java and so on so we can actually combine multiple programming languages into one robot they all talk through nodes and in these constructs so with that in mind let's get back to building out our robot