 I know some of you are still setting up and all, but sorry about that. I promise I did try to do this workshop over Kola, which is the online version of Jupyter Notebook. But I still didn't manage, because it makes a lot of use of them in my chat with Johan yesterday. Maybe I'll do it next time, hopefully. I know we don't have much time, so I'm going to introduce very quickly. A bit of Ross, talk a bit about Gazebo, not too much, because we don't have time. And hopefully what you can get out of here today is mostly an idea of how Ross looks like. Okay, you want to use the victim machine in the middle, or we can have a look later? Okay guys, back to the introduction, I'm sorry for the problems, if you have extra problems you can come talk to me, I can help you out, I'm happy to get everyone on board with Ross. And hopefully today what you can get out of this workshop, it's an idea of how we work in the robotics world, because it's a bit different of like normal, so for engineering I would say, or not the same as all the softwares, and a bit of what you can do with Ross, and how would you use it? We're not going to build any autonomous cars or like killing robots, but we're going to get an idea of how to like thinker in with this software. So to give you a bit of background for those of you that didn't, for those of you that didn't go on, saw the presentation on the first day, we, in the open robotics foundation owns a few projects, and these are the main projects that they're working on, right? There's a bunch of people working on this from many different backgrounds, the problem in robotics is huge, right, like we don't have people that knows everything in robotics, so everyone picks like a very tiny part of the robotics problem, and they just work on it. And that's why I did my presentation on the first day, where I was trying to explain that this is a really important, having open source taking over robotics is a very important point that made robotics move forward, because no one can really make the entire thing on robotics, like the problem is too big for not only a single person, but not even companies can make, that can solve the entire problem by themselves, right? So because we have open source, that is what is allowing us to overcome these boundaries. So the main software that the foundation owns is ROS, and it started back more than 10 years ago, and at that time the robotics field was mainly focused on research. So the main focus of this software was for researchers, right, it was very easy to set up, it had something that they could work on, and there were no extra things that you had to worry about. But then there was a slight change in the robotics world, where a bunch of startups started coming up, and they all started taking over this work, and then companies started also using robotics and all that, and a new set of requirements came on, so people wanted more stability, people wanted more security, so there was a rewrite of the software, and it's what we call now ROS2, right? So that's why I'm trying to get everyone on board with ROS2, so we can learn the latest software. ROS1 is still running, and I think I have a slide with the releases so you guys can get an idea. So there's the latest release of ROS1 based noidekneed gemmies, so we always use startups for names, and that will be supported until 2025, but it's already the last release that is going to be done on ROS. There's some community work for continuing ROS1, but that is out of the foundation, and it's not going to be supported from an official standing point, right? Then we have Gazevo, which is the simulation environment that the OSRS offers, and it doesn't have to be used with ROS, but of course it has a lot of packages that make it, makes it very easy to use with ROS. There's Ignition, which was a rewrite of ROS in a similar way of what happened with ROS2, so there was a few requirements that people wanted to meet, and then Ignition was a coupled version of Gazevo, but then there was a name conflict, so now it's a bit complicated, that's why I wanted to put the name here. So if you see Ignition these days, it's basically Gazevo. You won't see it around because it was renamed after a while. It's basically Ignition is now named Gazevo, and Gazevo is now the classic. It's known the old Gazevo, right? So just in case you see this name around, you can't ignore it and think about it as Gazevo. So there's two versions. There's one that is called Classic, which is the old one, and there's one that is called Gazevo, which is what they initially was called Ignition. A bit complicated, but yeah, I have to label it. And then we have OpenRMF, which is the software that we are developing here in Singapore, and it is in collaboration with many local institutes and companies. And it's mainly using, of course we use Gazevo for simulation and ROS for the communication part, but it's mainly for infrastructures to try to allow vendors to communicate robots between each other and also communicate with the infrastructure. It has task management, traffic allocation, and all these capabilities. Okay, so a bit about ROS. There's a video here in the interest of time. I'm going to skip it. There's a very nice video if you guys have time. The Red Hat guys made about this story about robotics. I think it's called Robotics Revolution. And it's got four parts, I think each part is about 10 to 15 minutes. So it's a very nice, much nicer than the introduction that I can give you guys here. So if you guys have time, you can have a look at it. Let me skip it. Yeah, so what is ROS? This is what we always present ROS to people. So basically you got four key features on ROS. One of them is the plumbing. So this is the basic thing that ROS gives you. Because in robotics, we use this component-oriented programming. So you basically have different components talk to each other. So if you have a camera, you would have your camera capturing images. And then that will be one component. And then this component will communicate with another one. And then these images will be processed in this other component to, I don't know, detect a person or detect a hand or do some processing of this image. And there will be different parts of components that we'll be talking to each other. So this is the plumbing that we're talking about. And this is mostly what we're going to try out today. So we're going to try out this plumbing and see how these components can communicate with each other. Mostly through the seminal. We're probably not going to be writing any code. And then we're going to maybe play around a bit with the tools. So there are certain tools that you can use on top of this that have been created by a lot of people, the community and the OSRAS itself. Like R2D or any others that allows you to introspect what is happening here. And it also allows you to visualize frames. You can see an entire kinematics tree depending on what is going on. So in the products there's a lot of debugging and a lot of problem solving. And you really need these tools to really introspect what's going on. Then you've got the capabilities. So as I said, there's a lot of people that is doing different things in robotics. So you get the guys that are doing navigation. So that's an app to stack. So it's an entire group of people that is doing this thing. And it's got to be not related to the guys that are doing control. Or the guys that are doing, for example, the stack for moving arms, kinematics, right? They're moving too, which is the guys from Pygmy, for example. It's an entire company that is doing this part, right? At least in charts, there's always a community behind. So these are the capabilities that we have. And then, of course, the ecosystem that the DIA open source community is offering. So you've got this course, you've got the conferences. Because this entire ecosystem where you can just reach people and say, hey, I have this problem. I'm trying to install this. It's not working on my computer. And I use this thing. There's the working groups that you can join. So it's also complementing the entire set of capabilities that you can get with ROS, right? So a little bit of the ROS 1, ROS 2 comparison here. So I think one of the main things that everyone sees when it was using ROS and now it's using ROS 2. So these communications between components that I was talking about. In ROS 1, there used to be a process called the ROS Core. And you would have to set it up all the time. And it was the guy in charge of telling which components are where and how to communicate between each other, right? So you say, hey, a camera gave me the image. So you need someone to tell you where the camera is, right? Like what is the process that it runs the camera? And it's like, I can call this function, get image. And then I can get it, right? So that ROS Core was what had to be always running. That was a single point of failure. And everyone was complaining, right? Like they were like, oh, if this ROS Core goes down, my entire robot goes down. So it's a system that is not very robust. So one of the biggest changes in ROS 2 is that we use DDS for these communication channels. So now DDS has a distributed way of discovery. So with this distributed discovery, you don't need a ROS Core. You don't have a single point of failure. It's not perfect. And it also gives some problems when you cannot broadcast and all those tasks. But it's way more robust. And the thing that the new design comes with is that the DDS implementation, it is agnostic to the DDS implementation. So there's different vendors for DDS that they provide this DDS layer. And there's basically a ROS middleware layer that gives an abstract. So you can basically use ROS 2 with different DDS vendors. So you can see here that we can use these stop words for communication. There are different implementations. Of course, a DDS is one implementation of DDS, and Cyclone is another one. So sometimes, depending on how the vendor implements DDS, they might have better or worse capabilities for your application. And some people decide to go with one. Some people decide to go with the other one, right? On metrics or whatever, whatever capabilities they need from the vendor. Sometimes they don't even have a security plugin implemented. So maybe you need the security plugin. Then you might go with RDS. I believe Cyclone doesn't have it. Or I think they added it later. So that is one good example that you can run. And then just focusing a bit more on ROS 2. Basically, you have your hardware. You run your operating system. So one thing that always people get very confused. ROS stands for Robotics Operating System. No, it's not an operating system. It basically runs on top of a real operating system. I know you have to careful when you make things, right? Yeah, so it basically runs on top of an operating system. And it's basically a framework that you can use for robotics. Then you have the DDS layer, which is the one talking to making the talking to each other possible. You have the abstraction layer that we have to be able to change this. And then we have different languages libraries. So you've got RCLCBP, RCL5. And basically, these libraries allow you to write different components on different languages. So you can have components in one component in Python that is talking to another node that is doing C++, right? So you can have all these entire ecosystem that is totally heterogeneous, right? This is one of the things that actually allows ROS to be so distributed, right? So you have the guys doing navigation. And they have their own components with whatever design they have and whatever languages they decided. And then you have your other guys doing control with a new different design and with a different thing. And then you can integrate this thanks to this model, right? Thanks to the component-oriented model. So again, a little bit about the releases that I mentioned before. ROS1 has the melodic, which has one moment of support. And then you will die. And then this is the latest ROS1 release, and it's the last one. So this one is actually supported by five years. So after this, there will be more support for ROS1. OK, these are the releases for ROS2. So we've got Foxy here. You can see the Ubuntu versions. So as I mentioned before, when we were doing the setup, they usually match Ubuntu version. So you can always install it from source, right? But the compiled binaries are created for a certain Ubuntu version, which is usually the latest that is around when we are creating the release. I believe that the lives of these releases matches the lives of the Ubuntu version, right? So if the Ubuntu lasts this long, then the release will last this long. And now we have this rolling release, right? So the rolling release is basically where we push the latest changes. And then every time we're going to have a stable release, we just branch out of rolling, right? So we have all these packages that are the latest. And then when the library comes, then we create a branch. And then we can just grab images all the time. And it's publishing them on a topic, right? So basically, topics come in the name of something like slash and a name. And then you can use this to say, hey, I want the message that is being sent on slash and this name, right? So for example, a typical topic would be slash camera. So we have slash camera and then that would be the topic where the images are being published. So from the note that is subscribing, I can say, hey, subscribe to dash camera and then get the information here. And then I will get the data in my data structure, right? Whatever data structure we're using, we will be getting all these images that the camera is getting. That is the public subscribe. And then it doesn't have to be like one to one. So you can have one guy. The camera can be publishing these images. But then you can have different notes doing different things, right? So you might have one note that is detecting humans. And then you might have one note that is detecting tables. So you can distribute this as much as you want. You just need to subscribe here to the camera topic and here to the camera topic, right? Then we have services, which is basically like, for those of you that use RPCs, it's just basically like calling a function that is in the other note, right? So you can, in example of a camera, you can use a service and you can say, instead of having the camera publishing the image all the time, you just say, hey, give me an image now. And then you get a response, right? It's a different way of communication. And then at the same time, you can also have different notes requesting for the same thing, right? And the service provider will be answering in the same way. And then we have something that is a bit in between that is called actions. So basically, actions involve a client, of course, a client and an action client and an action server. But you can see it as a mix of the other two, right? So basically, you do a request for an action, which is, this is meant for long-term goals, right? So let's say I have a robot and I want the robot to get to the table, then I say, go to table, right? And then I make this request and then I get a response of that request, right? Like this service that we called before, I do like a service request happens and then the robot says, okay, go into the table, right? That is the response that I get. So I know the robot started going to the table. But then there's a feedback topic, right? So you can say like, slash that status, right? So maybe in these status, the robot is like moving, right? Can have different or stop, right? Like then you can have different, maybe someone has in the middle and then the robot says, okay, stop, right? And it's still going to the table, but it's in status, the status change, right? So these feedback topic will allow you to keep getting the information of what is going on, right? And then at the end, there will be a response of the, there will be like another request and it will basically say, hey, I finished the dieting and the action is finished, right? So this is meant for like long-term processes, like a bit more of just, like instead of like just one piece of information, right? So yeah, let's get a bit into the raw thing. I'm gonna run the, let me check if I have it. So I don't want to take how much time. Okay, so what also use that got virtual box? You should have something like this, right? So if you go to the feedback page, which is the one that we're gonna follow, there's a few tags installed, you can get the install instructions also there. There's a click, there's a link to the install instructions. And then one thing that we usually do because in ROS is very common to have many versions of ROS info. We don't recommend to use them at the same time. So we don't recommend to have a robot talking humble and then, or some parts of the robot in humble and then some other parts in Foxy. We don't recommend that at all because it's not guaranteed to have compatibility. You can try it, but usually you mess around with several versions, right? So because this happens, there's usually they're all installed in OPT ROS and you will have the number, the code name of the release over there. So what we do is that before starting, you have to show us this set of bash which will set up your terminal environment basically to access all the binaries that ROS is offering and all that. So that is the first thing that you have to do. If you know that you're gonna be using a certain bistro for a very long time, then you can put it on your BISRC and then it's always there, right? But personally, I mess around with a lot of them. So basically I just mostly, most of the time I just make an alias for the source and I say like humble is my alias and then I just run it, right? So like if we do this on the virtual machine, that's it, yeah, go in. So we open a terminal. So if I open a terminal and I try to write something like ROS, there's nothing there, right? So the first thing that we have to do all the time is to source OPT, ROS, humble and then we have this bash file there, right? Set up, there's a bunch of set up files. So once you do this, you already have ROS, the environment ready, right? So now you can see that there's a ROS2 binary there and if you run it, you can see the options that you can get, right? So you can do actions, you can do backs. So backs are basically a way to record what is happening on this communications channel. So one thing that you can do is that you can, one thing, I said that we do a lot of testing in robotics, right? So one thing that you can do is to record all these topics going on and then once you record all these topics, then you can replay them. Because you can replay them, you can basically have, let's say you're walking in the lab during the day and then they close up too and then you have to go home. Well, you don't have access to the robot anymore but you have a recording of all these topics so you can actually rerun all the topics and it's basically like working with the robot again, right? And then it also allows you to reproduce the exact same thing that happened. That is very important in robotics because problems are very, you cannot, they're very stochastic, right? You can't really reproduce what happened at that time because maybe someone passed by, the light was not the same, a lot of things can happen. So if you have a ROSVAC that allows you to reproduce the exact same moment and you can see what is the error that actually costs whatever breaking thing that happened in that moment, right? So corner cases are very, very important in robotics. There's this demon thing, block doors. The most important one are the ROSVNOTE one which allows you to mess around with nodes, run. Basically, it lets you run stuff, binaries which are these ROSVNOTES. Launch allows you, so there's launch files that they will, launch relics are XML, you can do them in Python now, so there's a new option to do them in Python, but originally they started in XML and basically they are, they are a way to set up an entire bunch of ROSVNOTES that you want to run with all the parameters, right? Because usually you end up having very complex setups. Like let's say you have a big robot, right? So this guy can run like maybe 20, 30 ROSVNOTES with all these parameters. So you don't wanna keep typing all this all the time. So basically what you have is you have these launch files which are basically descriptions of I want to run this ROSVNOTE with these parameters and I want to run this all the way. So all these descriptions, you can just do ROSVNOTE and you pass it a launch file and then it will set up the entire thing in one time, right? So that is a very important one. And then you have topics and services and you have actions over there. So you can basically see, so like if you do ROSVNOTE to topic, for example, which is a very typical one, then you can see that you can list the topics, right? You can also publish and subscribe directly from the terminal and you can echo whatever is happening on a certain topic, right? So we don't have much time but I want to show you how to run a node. So if you go to the first one, ROSVNOTE 2, so there's a package called Tartlesing which is the one that you will find if you go to the ROSVNOTE tutorials. So this package is basically, it's a very simple example that you can play around with. So if you guys set it up and run, you can see that, so one thing that you will also notice is that we use a lot of terminals when running ROSVNOTE. So every time you run a node, you might have to open another terminal and all that, right? Unless you use launch files but you will see a lot of these robotics guys running a bunch of terminals, yeah, right? And then I have to source again, remember? And then I can do list, right? So if I do ROSVNOTE 2 topic list, you can see that I have some starter topics here, right? So these starter topics will actually allow me to move these start up around. So if you guys, if you guys start playing around with these topics, you can send different messages that will make this starter move. And this also, it offers services. So you can also play around with the services. That's another option. And I believe it also often, it also offers an action. So you can also play with it, right? So this one will do a rotation and we'll keep giving you feedback until it's done. I think we don't have much more time. So I'll leave it there. Again, sorry for the delay but it takes a long time to start running this. That's why I wanted to have this GitHub page. So whoever has the ROSVNOTE 2 running can go around and play around with the turtle. That'll be a very good way to start. And then I wanna also mention at the bottom, there is a small part where you can play around with code. So you can create your own workspace and then you can start, you can start working with your own workspace. So yeah, basically hopefully you got an idea of how the communication works. And then it's just a matter of you guys playing around with the rest of the commands that you have here. If you have troubles installing running the Victor machine or anything related to ROSVNOTE, let me know, I'm gonna be here in the robotics track until it ends and I'm gonna be in post Asia until the end too. We also, I think we're going to have a space later work after the conference, but feel free to chat with me in the coffee breaks or anything, I'll be happy to help. Thank you guys.