1
00:00:00,450 --> 00:00:05,550
So what features does the Ross suit framework have that helps with robotic software development?

2
00:00:05,940 --> 00:00:09,600
Well, first let's look at an example robot to use as a reference.

3
00:00:11,330 --> 00:00:14,090
This is a simple mobile based robot.

4
00:00:14,450 --> 00:00:16,700
This robot has four wheels.

5
00:00:16,700 --> 00:00:21,770
One motor controls both wheels on the left side of the robot, and another motor controls both wheels

6
00:00:21,770 --> 00:00:23,060
on the right side of the robot.

7
00:00:23,090 --> 00:00:29,120
This robot also has a vertically mounted camera, which also has a motorized base so the camera can

8
00:00:29,120 --> 00:00:29,690
turn.

9
00:00:30,340 --> 00:00:34,660
There are also sensors on board to give us information about our robot's position.

10
00:00:35,020 --> 00:00:39,850
Here, the robot has a GPS sensor to give the robot's current latitude and longitude coordinates.

11
00:00:39,850 --> 00:00:45,190
And here is an IMU sensor, which gives the robot's orientation and acceleration.

12
00:00:45,990 --> 00:00:50,490
So what features does Ross do have to help us program the test robot I have here?

13
00:00:50,670 --> 00:00:57,540
Well, the first feature is a data distribution service, also known as DDS, which is a communication

14
00:00:57,540 --> 00:01:03,630
pipeline which can interface with all of our code executed code files which utilize Ross functionality

15
00:01:03,630 --> 00:01:05,350
are called nodes.

16
00:01:05,370 --> 00:01:13,800
Here I have two C++ files which get compiled into executable ROSS nodes which utilize the Ross two RDS

17
00:01:13,800 --> 00:01:15,960
to send information between them when they're run.

18
00:01:16,470 --> 00:01:21,930
The DDS Communication pipeline also allows for security configurations so that you can secure the data

19
00:01:21,930 --> 00:01:23,550
you send between nodes.

20
00:01:24,310 --> 00:01:28,870
Nodes have three primary ways which they can communicate with each other over deeds.

21
00:01:28,900 --> 00:01:32,260
The first is through a publisher or subscriber method.

22
00:01:32,530 --> 00:01:35,050
Let's say we have two nodes for our robot.

23
00:01:35,440 --> 00:01:40,000
This arrow represents the data flow direction for our Ross communication.

24
00:01:40,670 --> 00:01:46,520
The camera node wants to make available images from our robot's camera, so it publishes these images

25
00:01:46,520 --> 00:01:51,080
to anyone who wants to listen in or subscribe to this particular data.

26
00:01:51,560 --> 00:01:55,790
These individual communication pipelines are referred to as topics.

27
00:01:55,820 --> 00:01:59,600
In this case, we can have a topic name of front camera.

28
00:02:00,050 --> 00:02:03,920
This node publishes information which is referred to as messages.

29
00:02:04,190 --> 00:02:06,830
In this case, the message type is an image.

30
00:02:07,250 --> 00:02:13,640
This architecture is very scalable, such that one publisher can send messages to multiple subscribers.

31
00:02:14,650 --> 00:02:20,500
A way to think of this is the way common video streaming websites are organized, such that subscribers

32
00:02:20,500 --> 00:02:26,470
are sent new videos when they are published and the channel name is like a Ross topic name.

33
00:02:27,500 --> 00:02:30,650
Another way to communicate between nodes is through services.

34
00:02:30,830 --> 00:02:36,680
For this example, we have a survey node, which is a service client that sends a request to turn the

35
00:02:36,680 --> 00:02:38,870
robot camera 45 degrees.

36
00:02:39,080 --> 00:02:45,350
This request is received by the camera mover node, which is a service server which, after completing

37
00:02:45,350 --> 00:02:48,110
the request, will send back a response.

38
00:02:48,500 --> 00:02:54,800
In this example, our response is an image the camera took after turning the camera to the desired angle.

39
00:02:55,720 --> 00:02:59,260
The third way for nodes to communicate with each other are through actions.

40
00:02:59,500 --> 00:03:04,900
In this example, we have a node which wants to command our robot to travel to a certain latitude and

41
00:03:04,900 --> 00:03:07,150
longitude, coordinate to take a picture.

42
00:03:07,180 --> 00:03:12,760
This node acts as an action client, which sends a goal which in this case is our latitude and longitude

43
00:03:12,760 --> 00:03:16,420
coordinates we want to travel to and it sends it to the action server.

44
00:03:17,020 --> 00:03:21,730
The action server will then process the goal and send progress updates to the client.

45
00:03:22,270 --> 00:03:26,410
In this case, we will send back data on how far away the robot is from the goal.

46
00:03:26,920 --> 00:03:30,190
These progress updates are referred to as feedback.

47
00:03:30,730 --> 00:03:35,230
Our action server will continue sending feedback to the client until the goal is reached.

48
00:03:37,740 --> 00:03:43,080
In this example, once the goal is reached, our action server will send a picture which the robot took

49
00:03:43,080 --> 00:03:44,340
at the goal location.

50
00:03:44,460 --> 00:03:46,920
This is called the result of our action.

51
00:03:48,600 --> 00:03:51,390
Ross nodes also have a parameter feature.

52
00:03:51,480 --> 00:03:53,520
Here we have our mobile robot.

53
00:03:53,700 --> 00:03:57,780
But let's say we have another version of it where the wheel size is increased.

54
00:03:57,810 --> 00:04:03,510
We may need to take this change into account in our code rather than having to edit the code and recompile

55
00:04:03,510 --> 00:04:04,290
our project.

56
00:04:04,320 --> 00:04:10,410
We could instead utilize a node parameter which allows for configurations for specific variable values

57
00:04:10,410 --> 00:04:11,490
within our node.

58
00:04:11,760 --> 00:04:16,320
This parameter can be modified by a user or other nodes when needed.

59
00:04:16,620 --> 00:04:22,290
In this case, we could set a node parameter called wheel radius for our code to reference.

60
00:04:23,480 --> 00:04:28,130
There are going to be times when you want to collect data from your robot in which you will probably

61
00:04:28,130 --> 00:04:29,480
want to create a bag file.

62
00:04:29,900 --> 00:04:34,340
A bag file can subscribe to multiple topics and record the data as it comes in.

63
00:04:37,420 --> 00:04:42,520
After you are done recording this data, you can play it back and have those recorded messages get published

64
00:04:42,520 --> 00:04:45,160
over the same corresponding topic names.

65
00:04:46,850 --> 00:04:50,570
It is worth noting that Ross code is organized as packages.

66
00:04:50,840 --> 00:04:54,980
These packages will contain all the code for particular robot functionality.

67
00:04:55,430 --> 00:05:00,620
These packages can then easily be copied and redistributed to other developers who want to use it.

68
00:05:01,160 --> 00:05:05,120
Then they can use that same set of code for use on their own robot.

69
00:05:06,870 --> 00:05:11,940
Lastly, one of the most notable features of Ross two for robotic software development is cross-platform

70
00:05:11,940 --> 00:05:12,600
support.

71
00:05:13,110 --> 00:05:18,180
Unlike most distributions of its predecessor, Ross, two allows for other operating systems other than

72
00:05:18,180 --> 00:05:21,720
Linux to run Ross and be able to communicate with each other.

73
00:05:21,960 --> 00:05:25,020
Keep in mind this cross-platform support is relatively new.

74
00:05:25,020 --> 00:05:29,160
So for the best possible experience with Ross, I highly recommend using Ubuntu.

75
00:05:30,100 --> 00:05:33,820
Roku also allows for integration with systems developed in ROS one.

76
00:05:33,940 --> 00:05:39,070
That way you can confidently start utilising Ros too, without worrying about compatibility with previous

77
00:05:39,070 --> 00:05:41,290
projects you developed in ROS one.

78
00:05:43,270 --> 00:05:44,710
Och, that was a lot to take in.

79
00:05:44,710 --> 00:05:47,560
So let's review what features Ross do has.

80
00:05:48,320 --> 00:05:55,040
Rossouw utilizes a data distribution service which has various security configurations to allow communication

81
00:05:55,040 --> 00:05:56,150
between our nodes.

82
00:05:56,720 --> 00:06:02,780
Nodes are executed code which utilizes the ROS framework and can be configured via parameters.

83
00:06:03,230 --> 00:06:08,240
One of the ways which nodes communicate with each other is through a publisher subscriber architecture

84
00:06:08,240 --> 00:06:12,830
which nodes publish data over topics for subscribers to process.

85
00:06:13,220 --> 00:06:20,360
Nodes can also communicate via services which one node sends a request for another node to process and

86
00:06:20,360 --> 00:06:21,470
send a response.

87
00:06:22,130 --> 00:06:28,730
Lastly, nodes can communicate via actions in which one node sends a goal for a second node to achieve.

88
00:06:29,180 --> 00:06:33,680
The second node will publish feedback until the goal is reached and then we'll send back a result.

89
00:06:34,700 --> 00:06:39,350
Bag files are used to save data being published by the robot, which can later be played back on the

90
00:06:39,350 --> 00:06:43,130
same topics to simulate the data as it was experienced by a robot.

91
00:06:43,910 --> 00:06:49,580
Our code we develop for ROS can be organized into packages which can be easily distributed for other

92
00:06:49,580 --> 00:06:50,810
developers to use.

93
00:06:51,590 --> 00:06:57,770
Lastly, Ross incorporates cross platform support so we can use its features on various operating systems

94
00:06:57,770 --> 00:07:02,480
and still utilize code developed for the older Ross one distribution versions.
