WEBVTT

00:00.000 --> 00:12.000
Okay, good afternoon, so today Nikoi and I would like to share a vision which is simple,

00:12.000 --> 00:18.480
safe and open robotics and today we're going to show you how to build your first hostile

00:18.480 --> 00:28.320
hover with rust and pixie, so we have a lot to, we have a lot to back into this experiment

00:28.480 --> 00:35.760
talk, so let's try it in, so the agenda is quite clear, first I will briefly introduce

00:35.760 --> 00:42.960
our background and the why behind this experiment and then Nikola will work you through the

00:42.960 --> 00:52.000
technical implementation and the hard one lessons learned along the way, so we are both from

00:52.000 --> 01:00.880
botronics and since 2023 we've focused on outdoor navigation, our first product displayed here

01:00.880 --> 01:10.320
is XE, it's autonomous and digital golf caddy, it's already roaming golf courses along the way

01:10.320 --> 01:20.640
as we speak now, sorry, and by moving from a prototype to hardware B2C product used by non-tech

01:20.640 --> 01:30.400
keys means that our standards for stability are incredibly high, in robotics we often fight

01:30.400 --> 01:38.080
two monsters, so first it's the dependency hell and the other one is memory and safety, that's

01:38.080 --> 01:45.120
why before considering integrating new tools or new technologies inside our technical stack,

01:45.120 --> 01:54.640
we battle test them in isolated proof of concepts, for this project we put three technologies

01:55.200 --> 02:01.040
under the microscope, so the first one is pixie, so it's a modern package manager for robotics,

02:01.040 --> 02:09.600
RCLRS, it's the official rust bindings for rust to paired with blue R, just to have a complete

02:10.560 --> 02:21.920
pure rust logic flow, we didn't just want to have an internet prototype, so with first them

02:21.920 --> 02:29.360
approaching we wanted to lower the barrier to entry for memory safe robotics, the mission was quite

02:29.360 --> 02:37.600
simple, we wanted to create a jetbot like rover with an easy to source hardware and an affordable

02:37.680 --> 02:44.320
bomb, so the idea was also to create a full open source GitHub repository with an easy to follow

02:44.320 --> 02:52.480
a wiki and all of that we want on top of that we wanted to include a simulation on gazebo,

02:52.480 --> 03:00.800
so you can code even before even the parts even arrived, sorry, I'll end it over to Nico now,

03:00.800 --> 03:08.640
so you can explain how he glued rust to when rust together without losing his mind, or at least mostly,

03:11.280 --> 03:19.280
so the goal was clear, so the goal was to put the rust to binding for rust trade spaces

03:19.280 --> 03:24.000
for that we had to use all the tools that made a good rust to client, a good rust to client,

03:24.000 --> 03:29.360
so what we did is we implemented an action server which allowed the rover to spin on its

03:29.360 --> 03:36.480
own, then a service which allowed you to take snapshots using the onboard camera and a

03:36.480 --> 03:41.600
publisher subscriber which is used to try the projects but mostly for today operation,

03:42.320 --> 03:49.120
to see how we could integrate hardware using rust and use blue r, we made a small

03:49.120 --> 03:55.840
Bluetooth low energy server which takes all the command from the remote controller and we used

03:55.840 --> 04:07.600
pixie to work spaces so one to install and build epsilon rs and a second to for our project

04:08.720 --> 04:17.200
it allowed us also to install kilted alongside our own jazzy install for our other projects

04:17.920 --> 04:23.040
so this is the structure of our project so on the left you have the remote controller you

04:23.040 --> 04:29.840
are using a rotatouille and on the right you have the main project structure, so everything goes

04:29.840 --> 04:34.800
through a Bluetooth server which interprets the commands and sends them to a command dispatcher

04:35.840 --> 04:43.760
so it can be either a goal through the spinner action server which gives feedback and the results

04:44.320 --> 04:49.200
a publisher subscriber for teleportation so it's just a command well going through rust to control

04:49.680 --> 04:54.320
and a camera node implementing the service that is called and send the response

04:55.360 --> 04:59.120
all the rest is not rust to rust so I don't think it's really interesting

05:00.160 --> 05:06.960
our wiki explains everything so I would do did it so I think it's more interesting to give our

05:06.960 --> 05:13.920
takeaways so for pixie it's really easiest the installation of rust and rust packages

05:14.000 --> 05:22.320
it is your entire workflow for the new dependencies it's completely this for agnostic so you can

05:22.960 --> 05:30.880
install kilted on open to 22 without any problem and it gives you a uniform tool for managing

05:30.880 --> 05:38.800
your dependencies to create your own make files and it really doesn't have any overhead to go

05:38.960 --> 05:47.680
from your host Ubuntu to for instance for us the Raspberry Pi the concept is that for now

05:48.400 --> 05:56.320
the robust stack repository isn't fooled for all the rust distro so for kilted we didn't have the

05:58.160 --> 06:07.200
web server to to cast images and there is not yet any rolling robust stack repository

06:07.760 --> 06:14.960
it is not possible yet to install a pity dependencies using pixie so you still have to

06:14.960 --> 06:22.640
have another tool to install other dependencies and you can have some sometimes conflicts with native

06:22.640 --> 06:31.120
development installation we are the case with the open cv for a rust to rust so a big disclaimer

06:31.120 --> 06:38.720
none of the us engineer are experts in rust so take it with the grain of salt but rust to rust gives

06:38.720 --> 06:46.000
you all the advantages you want from rust so it's with the threading made easy it is safe by design

06:46.000 --> 06:52.080
and it gives you all the advantages of cargo so it's easy to depend for your dependency management

06:52.080 --> 06:58.880
and it's performance but for now as said before the documentation of rust to rust is not

06:59.040 --> 07:05.360
perfect and there is a lack of established good practices especially for beginners

07:06.960 --> 07:12.160
but the project is still in development so we can hope that it's going to be better

07:13.120 --> 07:18.160
in the next stages we still have to build it from source and there are some small missing features

07:18.160 --> 07:25.120
like for other action servers there is no wait for action so sometimes your projects just keep

07:25.200 --> 07:31.840
going on and you don't have your gold scent and at least for beginners it's hard to build

07:32.560 --> 07:38.960
complete nodes and complex nodes with a clear structure so sometimes it can get a bit hard

07:40.160 --> 07:48.400
so in the clear this is our journey with rust to rust so it's great but as a junior you just

07:48.400 --> 07:57.280
have a hard time compiling your code so this is it thank you so all the code the weekie and

07:57.280 --> 08:03.680
the bum are already live on GitHub so we would love for you to just focus try to break it and

08:03.680 --> 08:11.680
help us improving it and we do not have a lot of time for career and I guess so just come and

08:11.680 --> 08:18.240
find us we would love to chat about rust to rust pixie or just rubber ticks in general thank you

08:18.400 --> 08:21.520
you

