1
00:00:06,320 --> 00:00:11,499
[Music]

2
00:00:16,720 --> 00:00:21,840
so welcome back it's time for our first

3
00:00:18,880 --> 00:00:23,920
uh invited presentation by brett downing

4
00:00:21,840 --> 00:00:25,519
uh he'll be talking about microarrays

5
00:00:23,920 --> 00:00:27,760
and advanced robotics i'm really looking

6
00:00:25,519 --> 00:00:29,039
forward to this talk um brett's a a

7
00:00:27,760 --> 00:00:30,880
really really interesting fellow very

8
00:00:29,039 --> 00:00:32,800
talented i met him first been about 10

9
00:00:30,880 --> 00:00:35,520
years ago at the uh just prior to lca

10
00:00:32,800 --> 00:00:37,440
2012 with his sister jenna and daniel um

11
00:00:35,520 --> 00:00:40,079
they come over from perth and these

12
00:00:37,440 --> 00:00:41,760
mysterious strangers help us

13
00:00:40,079 --> 00:00:44,320
set up tidy up and they're going who are

14
00:00:41,760 --> 00:00:46,480
these people and uh yeah and since then

15
00:00:44,320 --> 00:00:48,559
if you um if you ever need a sonic

16
00:00:46,480 --> 00:00:50,000
screwdriver brett will have one on him

17
00:00:48,559 --> 00:00:51,920
so uh

18
00:00:50,000 --> 00:00:54,160
i think these days he carries around the

19
00:00:51,920 --> 00:00:56,840
pine saw soldering uh iron so yeah

20
00:00:54,160 --> 00:00:59,280
without any more to do over to you brett

21
00:00:56,840 --> 00:01:02,320
um take it away and also i believe brett

22
00:00:59,280 --> 00:01:04,000
will will take some questions so um yeah

23
00:01:02,320 --> 00:01:05,280
i'll line them up on the message system

24
00:01:04,000 --> 00:01:07,840
please

25
00:01:05,280 --> 00:01:09,920
i would do thanks fred great um

26
00:01:07,840 --> 00:01:11,280
i'd like to begin today by acknowledging

27
00:01:09,920 --> 00:01:12,799
the traditional owners of the lines we

28
00:01:11,280 --> 00:01:15,759
meet on today and i'd like to pay my

29
00:01:12,799 --> 00:01:17,280
respects to elders past and present

30
00:01:15,759 --> 00:01:19,280
i've come here today to talk about

31
00:01:17,280 --> 00:01:21,840
advanced robotics on microcontrollers

32
00:01:19,280 --> 00:01:24,799
particularly

33
00:01:21,840 --> 00:01:27,840
a bit of background roz the robot

34
00:01:24,799 --> 00:01:27,840
operating system is a

35
00:01:28,479 --> 00:01:32,240
software framework that provides publish

36
00:01:30,240 --> 00:01:33,200
and subscribe messaging and packaging

37
00:01:32,240 --> 00:01:35,439
tools

38
00:01:33,200 --> 00:01:37,920
it was started in about 2007 as a

39
00:01:35,439 --> 00:01:40,159
response to prolific abandonware in

40
00:01:37,920 --> 00:01:42,640
academic robotics departments every new

41
00:01:40,159 --> 00:01:44,479
student would build a new robot with new

42
00:01:42,640 --> 00:01:45,920
ways of talking to new components and

43
00:01:44,479 --> 00:01:46,880
the rest would get scrapped year after

44
00:01:45,920 --> 00:01:47,840
year

45
00:01:46,880 --> 00:01:49,600
and

46
00:01:47,840 --> 00:01:52,840
you were lucky if you ever got a whole

47
00:01:49,600 --> 00:01:55,600
robot even a simple one even for a

48
00:01:52,840 --> 00:01:57,360
moment roz offered messaging and

49
00:01:55,600 --> 00:01:59,280
software packaging conventions that were

50
00:01:57,360 --> 00:02:01,759
extremely strict and

51
00:01:59,280 --> 00:02:03,920
prescriptive but fairly versatile

52
00:02:01,759 --> 00:02:05,759
the defining feature of roz

53
00:02:03,920 --> 00:02:07,680
was that it encouraged modularity

54
00:02:05,759 --> 00:02:09,679
consideration for system integrators and

55
00:02:07,680 --> 00:02:10,959
it allowed researchers to share basic

56
00:02:09,679 --> 00:02:13,200
functionality

57
00:02:10,959 --> 00:02:16,160
and package their research for others to

58
00:02:13,200 --> 00:02:16,160
fork and cite

59
00:02:18,400 --> 00:02:21,840
roz is based on a data flow

60
00:02:20,640 --> 00:02:24,400
framework

61
00:02:21,840 --> 00:02:26,319
most nodes don't have flow control like

62
00:02:24,400 --> 00:02:29,200
if or switch case

63
00:02:26,319 --> 00:02:29,200
nodes just receive

64
00:02:29,599 --> 00:02:33,200
receive messages and emit messages so in

65
00:02:32,080 --> 00:02:35,519
a simple

66
00:02:33,200 --> 00:02:37,920
remote control example you might have

67
00:02:35,519 --> 00:02:39,440
a joystick node which deals with the

68
00:02:37,920 --> 00:02:42,480
hardware of a joystick

69
00:02:39,440 --> 00:02:42,480
it might emit a message

70
00:02:43,760 --> 00:02:46,640
with a strong typing that describes a

71
00:02:45,440 --> 00:02:48,160
joystick

72
00:02:46,640 --> 00:02:49,599
state

73
00:02:48,160 --> 00:02:51,680
that might get interpreted by a

74
00:02:49,599 --> 00:02:53,599
teleoperation node which handles a loss

75
00:02:51,680 --> 00:02:57,040
of input

76
00:02:53,599 --> 00:02:57,040
and converts it into like a

77
00:02:57,760 --> 00:03:02,239
a motion vector in a coordinate space

78
00:03:00,879 --> 00:03:04,239
this doesn't care about

79
00:03:02,239 --> 00:03:06,640
the shape of the robot but it handles

80
00:03:04,239 --> 00:03:09,599
you know dead man switches and stuff

81
00:03:06,640 --> 00:03:10,480
another motion might subscribe to

82
00:03:09,599 --> 00:03:12,560
the

83
00:03:10,480 --> 00:03:14,560
the motion vector

84
00:03:12,560 --> 00:03:16,560
and describe how the robot should move

85
00:03:14,560 --> 00:03:18,400
but it's another it's yet another node

86
00:03:16,560 --> 00:03:20,159
that's responsible for actually

87
00:03:18,400 --> 00:03:22,560
figuring out how the the joints should

88
00:03:20,159 --> 00:03:22,560
all behave

89
00:03:27,760 --> 00:03:31,760
this separation of intent is what makes

90
00:03:29,599 --> 00:03:33,280
roz so appealing every robot that moves

91
00:03:31,760 --> 00:03:35,599
can be driven by

92
00:03:33,280 --> 00:03:37,840
every met every motion planner

93
00:03:35,599 --> 00:03:39,599
every remote control if you can prove

94
00:03:37,840 --> 00:03:41,200
your path planner on a milk crate with

95
00:03:39,599 --> 00:03:42,159
drill motors zip tied to the bottom you

96
00:03:41,200 --> 00:03:44,080
can expect it to work on a

97
00:03:42,159 --> 00:03:46,080
state-of-the-art humanoid machine

98
00:03:44,080 --> 00:03:47,840
likewise if some research lab has proven

99
00:03:46,080 --> 00:03:50,720
a computer vision mapping

100
00:03:47,840 --> 00:03:52,400
uh mapping and planning suite

101
00:03:50,720 --> 00:03:54,000
you can reasonably expect it to command

102
00:03:52,400 --> 00:03:55,680
a hacked vacuum cleaner maybe you'll

103
00:03:54,000 --> 00:03:57,599
need to provide some image processing

104
00:03:55,680 --> 00:04:00,080
power image processing power on a second

105
00:03:57,599 --> 00:04:01,439
machine

106
00:04:00,080 --> 00:04:03,599
these aren't hyperbolic statements

107
00:04:01,439 --> 00:04:05,120
either the messaging convention is so

108
00:04:03,599 --> 00:04:06,879
strict and the packaging is so

109
00:04:05,120 --> 00:04:09,280
prescriptive that it's actually very

110
00:04:06,879 --> 00:04:11,840
difficult to leak information

111
00:04:09,280 --> 00:04:14,879
around the abstractions roz provides

112
00:04:11,840 --> 00:04:19,280
more often than not i found that raw's

113
00:04:14,879 --> 00:04:19,280
rose packages fresh off github just work

114
00:04:24,479 --> 00:04:26,880
when you want to deal with the real

115
00:04:25,600 --> 00:04:30,000
world you first need to collect some

116
00:04:26,880 --> 00:04:33,280
data think about what that means to you

117
00:04:30,000 --> 00:04:33,280
and then do something about it

118
00:04:33,919 --> 00:04:37,280
sense and act

119
00:04:35,840 --> 00:04:38,800
happen need to happen in particular

120
00:04:37,280 --> 00:04:41,199
places and in particular ways this is

121
00:04:38,800 --> 00:04:42,639
where software meets hardware

122
00:04:41,199 --> 00:04:44,639
hardware is hard and it throws up all

123
00:04:42,639 --> 00:04:45,840
sorts of constraints for a practical

124
00:04:44,639 --> 00:04:47,600
application you might need high

125
00:04:45,840 --> 00:04:49,759
resolution timers you might need to deal

126
00:04:47,600 --> 00:04:51,360
with esoteric industrial protocols you

127
00:04:49,759 --> 00:04:53,120
might have low power requirements or

128
00:04:51,360 --> 00:04:54,800
heat tolerance issues

129
00:04:53,120 --> 00:04:57,520
these are things you just can't get on a

130
00:04:54,800 --> 00:04:59,199
regular computer

131
00:04:57,520 --> 00:05:01,199
the thinking part is pretty flexible

132
00:04:59,199 --> 00:05:03,039
though it only requires some computing

133
00:05:01,199 --> 00:05:04,800
power there's no exotic hardware

134
00:05:03,039 --> 00:05:06,960
involved it doesn't need to happen

135
00:05:04,800 --> 00:05:09,120
anywhere in particular

136
00:05:06,960 --> 00:05:11,520
things worth really thinking about like

137
00:05:09,120 --> 00:05:13,280
map generation often don't need answers

138
00:05:11,520 --> 00:05:14,800
right away

139
00:05:13,280 --> 00:05:16,960
things that need answers right away such

140
00:05:14,800 --> 00:05:20,280
as obstacle avoidance often don't need

141
00:05:16,960 --> 00:05:20,280
much thought

142
00:05:24,000 --> 00:05:27,039
the separation of duty

143
00:05:27,440 --> 00:05:30,400
ros two nodes don't need to be on the

144
00:05:29,120 --> 00:05:33,360
same machine

145
00:05:30,400 --> 00:05:34,720
in the example here

146
00:05:33,360 --> 00:05:36,000
there's only a couple of nodes that

147
00:05:34,720 --> 00:05:37,680
actually exist

148
00:05:36,000 --> 00:05:40,240
on the robot

149
00:05:37,680 --> 00:05:41,759
and those are over here

150
00:05:40,240 --> 00:05:44,080
and there's

151
00:05:41,759 --> 00:05:47,440
a robot that's not showing up on a

152
00:05:44,080 --> 00:05:47,440
note over here that's not showing up

153
00:05:47,520 --> 00:05:50,800
uh the rest is all on my laptop all of

154
00:05:49,440 --> 00:05:53,280
the inverse kinematics all of the

155
00:05:50,800 --> 00:05:55,759
joystick handling all of the

156
00:05:53,280 --> 00:05:57,680
everything else

157
00:05:55,759 --> 00:05:59,759
the ros 2 nodes automatically discover

158
00:05:57,680 --> 00:06:01,600
each other over the local network ros 2

159
00:05:59,759 --> 00:06:03,199
transport layers are deeply configurable

160
00:06:01,600 --> 00:06:05,199
and do support encryption and

161
00:06:03,199 --> 00:06:06,800
authentication the hard work is all done

162
00:06:05,199 --> 00:06:08,960
on the laptop while the robot can focus

163
00:06:06,800 --> 00:06:11,840
on doing things and measuring things

164
00:06:08,960 --> 00:06:14,160
this separation of duty is why i'm

165
00:06:11,840 --> 00:06:16,000
so excited about micro ros it takes it a

166
00:06:14,160 --> 00:06:20,120
step further than just having a big

167
00:06:16,000 --> 00:06:20,120
machine and a little machine

168
00:06:20,240 --> 00:06:24,400
going back to sense think act there's an

169
00:06:22,720 --> 00:06:26,720
implicit step between

170
00:06:24,400 --> 00:06:28,240
act that goes back around to sense

171
00:06:26,720 --> 00:06:31,520
which is why the world has a think about

172
00:06:28,240 --> 00:06:31,520
you and stuff moves about

173
00:06:32,319 --> 00:06:35,600
the trouble is the world doesn't let you

174
00:06:34,160 --> 00:06:38,720
have your turn in peace and stuff

175
00:06:35,600 --> 00:06:39,919
continues to move while

176
00:06:38,720 --> 00:06:41,600
stuff continues to move about while

177
00:06:39,919 --> 00:06:43,360
you're trying to have a think

178
00:06:41,600 --> 00:06:46,240
i'm going to take detour from robots to

179
00:06:43,360 --> 00:06:46,240
talk about time

180
00:06:46,639 --> 00:06:50,639
until about 2010 pcs came with parallel

181
00:06:49,599 --> 00:06:52,240
ports

182
00:06:50,639 --> 00:06:55,360
and parallel ports could interrupt the

183
00:06:52,240 --> 00:06:57,199
cpu in a cnc machine you could measure

184
00:06:55,360 --> 00:06:59,120
the length of a cutting tool by lowering

185
00:06:57,199 --> 00:07:00,479
it onto a conductive pad

186
00:06:59,120 --> 00:07:02,479
and stopping when you complete an

187
00:07:00,479 --> 00:07:04,639
electrical circuit through it

188
00:07:02,479 --> 00:07:06,880
it was very simple to write software

189
00:07:04,639 --> 00:07:09,199
that could use the parallel port to

190
00:07:06,880 --> 00:07:10,880
detect tool contact

191
00:07:09,199 --> 00:07:13,039
stop all the motors within tens of

192
00:07:10,880 --> 00:07:14,639
microseconds the parallel port became

193
00:07:13,039 --> 00:07:16,479
obsolete and was replaced by usb

194
00:07:14,639 --> 00:07:18,560
adapters

195
00:07:16,479 --> 00:07:19,840
the communication round trip of usb

196
00:07:18,560 --> 00:07:22,240
pushed the latency out to about a

197
00:07:19,840 --> 00:07:25,120
millisecond the port throughput was the

198
00:07:22,240 --> 00:07:26,880
same so consumer experiences were good

199
00:07:25,120 --> 00:07:29,840
but motor commands would get buffered in

200
00:07:26,880 --> 00:07:31,759
the adapter so an instruction to stop

201
00:07:29,840 --> 00:07:32,960
would get delayed behind instructions to

202
00:07:31,759 --> 00:07:34,000
advance

203
00:07:32,960 --> 00:07:35,039
the additional buffering made the

204
00:07:34,000 --> 00:07:38,080
difference between an accurate

205
00:07:35,039 --> 00:07:39,599
measurement and a broken tool

206
00:07:38,080 --> 00:07:41,440
as computers got more powerful we

207
00:07:39,599 --> 00:07:43,520
expected more from them more threads

208
00:07:41,440 --> 00:07:45,599
more things at once modern task

209
00:07:43,520 --> 00:07:47,759
schedulers are amazing things some of

210
00:07:45,599 --> 00:07:49,840
them allow you to schedule operations

211
00:07:47,759 --> 00:07:51,680
to happen by some deadline

212
00:07:49,840 --> 00:07:53,759
instead of indicating some relative

213
00:07:51,680 --> 00:07:55,360
priority

214
00:07:53,759 --> 00:07:57,199
this allows things like real-time audio

215
00:07:55,360 --> 00:07:59,280
processing on linux

216
00:07:57,199 --> 00:08:00,720
mouse cursors that don't stutter

217
00:07:59,280 --> 00:08:02,400
deadline schedulers are useful for

218
00:08:00,720 --> 00:08:03,919
robotics but they're not enough on their

219
00:08:02,400 --> 00:08:05,360
own

220
00:08:03,919 --> 00:08:06,720
very often you need better timing

221
00:08:05,360 --> 00:08:07,759
resolution so you need something to

222
00:08:06,720 --> 00:08:10,479
happen

223
00:08:07,759 --> 00:08:12,960
not just before some deadline but at a

224
00:08:10,479 --> 00:08:14,720
specific time

225
00:08:12,960 --> 00:08:17,120
if you've ever tried to use addressable

226
00:08:14,720 --> 00:08:18,800
leds on an 80 tiny processor and then do

227
00:08:17,120 --> 00:08:20,479
something else as well you know it

228
00:08:18,800 --> 00:08:22,160
doesn't work

229
00:08:20,479 --> 00:08:24,800
to get really good timing guarantees on

230
00:08:22,160 --> 00:08:26,479
a cpu you need an ability for the cpu to

231
00:08:24,800 --> 00:08:29,120
drop whatever it's doing

232
00:08:26,479 --> 00:08:31,360
and respond to an external event a cpu

233
00:08:29,120 --> 00:08:34,080
interrupt

234
00:08:31,360 --> 00:08:35,919
unfortunately cpus take time to do

235
00:08:34,080 --> 00:08:38,080
anything and things have a habit of

236
00:08:35,919 --> 00:08:39,680
happening all at once

237
00:08:38,080 --> 00:08:41,360
the more interrupts you want the cpu to

238
00:08:39,680 --> 00:08:42,880
service the more likely it is that your

239
00:08:41,360 --> 00:08:45,440
interrupts will collide with each other

240
00:08:42,880 --> 00:08:47,600
and one will get delayed or missed

241
00:08:45,440 --> 00:08:49,600
the more strictly timed code you try to

242
00:08:47,600 --> 00:08:50,959
write the less of your code will be on

243
00:08:49,600 --> 00:08:52,959
time

244
00:08:50,959 --> 00:08:55,440
i mean on time in the strictest hardware

245
00:08:52,959 --> 00:08:58,880
sense here running a specific cpu

246
00:08:55,440 --> 00:09:00,320
instruction on a specific instant

247
00:08:58,880 --> 00:09:01,519
bit bash protocols and physics

248
00:09:00,320 --> 00:09:02,720
experiments

249
00:09:01,519 --> 00:09:05,760
the promise

250
00:09:02,720 --> 00:09:07,279
of time sharing of a cpu is incompatible

251
00:09:05,760 --> 00:09:08,399
with the promise of handling multiple

252
00:09:07,279 --> 00:09:11,440
unpredictable

253
00:09:08,399 --> 00:09:13,279
events on time every time

254
00:09:11,440 --> 00:09:16,320
the solution doesn't exist to be written

255
00:09:13,279 --> 00:09:18,240
down in a software framework

256
00:09:16,320 --> 00:09:20,160
the way out is you compromise you relax

257
00:09:18,240 --> 00:09:22,160
some constraints limit the timing at the

258
00:09:20,160 --> 00:09:23,839
resolution of your timing guarantees and

259
00:09:22,160 --> 00:09:25,040
then only guarantee that code will run

260
00:09:23,839 --> 00:09:27,279
before

261
00:09:25,040 --> 00:09:29,519
before a deadline

262
00:09:27,279 --> 00:09:31,440
that compromise is what a real-time

263
00:09:29,519 --> 00:09:32,959
kernel offers and it's plenty for a lot

264
00:09:31,440 --> 00:09:34,160
of things that i didn't come here to

265
00:09:32,959 --> 00:09:35,600
talk about

266
00:09:34,160 --> 00:09:38,160
the other constraint you can relax is

267
00:09:35,600 --> 00:09:40,959
the assumption that we have fewer cpus

268
00:09:38,160 --> 00:09:43,200
than things we want to do more hardware

269
00:09:40,959 --> 00:09:45,440
less sharing of resources

270
00:09:43,200 --> 00:09:47,920
more cpus servicing fewer interrupts

271
00:09:45,440 --> 00:09:51,040
each simpler cpus that have more

272
00:09:47,920 --> 00:09:52,560
deterministic timing or even specialized

273
00:09:51,040 --> 00:09:55,600
devices that can implement desired

274
00:09:52,560 --> 00:09:57,200
behavior without cpu intervention

275
00:09:55,600 --> 00:09:59,279
a lot of embedded systems engineering

276
00:09:57,200 --> 00:10:01,600
for battery-powered devices

277
00:09:59,279 --> 00:10:03,920
boils down to corralling microcontroller

278
00:10:01,600 --> 00:10:06,959
peripherals to do all of the things

279
00:10:03,920 --> 00:10:09,839
while the cpu takes a nap

280
00:10:06,959 --> 00:10:11,120
but less sharing of more hardware is not

281
00:10:09,839 --> 00:10:13,680
a solution

282
00:10:11,120 --> 00:10:15,600
it's just a different problem

283
00:10:13,680 --> 00:10:17,760
fortunately the throw hardware out of

284
00:10:15,600 --> 00:10:20,240
problem space is a little more tractable

285
00:10:17,760 --> 00:10:20,240
these days

286
00:10:20,560 --> 00:10:24,880
if i have to leave the comfort of gcc on

287
00:10:23,040 --> 00:10:27,920
linux and write my time sensitive stuff

288
00:10:24,880 --> 00:10:30,000
on a microcontroller i don't also want

289
00:10:27,920 --> 00:10:31,760
to write about passing messages back and

290
00:10:30,000 --> 00:10:33,440
forth between the micro and some host

291
00:10:31,760 --> 00:10:35,839
system

292
00:10:33,440 --> 00:10:37,440
and then also write about uh write that

293
00:10:35,839 --> 00:10:38,959
on both sides of the communication

294
00:10:37,440 --> 00:10:41,120
channel

295
00:10:38,959 --> 00:10:43,839
using an arduino for an out of chassis

296
00:10:41,120 --> 00:10:45,440
experience for a robot was so common

297
00:10:43,839 --> 00:10:46,800
that the ros community made a couple of

298
00:10:45,440 --> 00:10:50,320
compelling attempts at getting ros to

299
00:10:46,800 --> 00:10:50,320
work nicely with microcontrollers

300
00:10:51,519 --> 00:10:55,360
roz serial provided a generic host side

301
00:10:53,920 --> 00:10:56,480
node that could be instructed by an

302
00:10:55,360 --> 00:10:58,480
arduino

303
00:10:56,480 --> 00:11:02,000
to interact with a host side

304
00:10:58,480 --> 00:11:03,920
data stream the arduino side library let

305
00:11:02,000 --> 00:11:05,920
you set callbacks to be executed when

306
00:11:03,920 --> 00:11:07,120
messages arrived and pack messages to be

307
00:11:05,920 --> 00:11:09,519
sent

308
00:11:07,120 --> 00:11:10,720
overall it was very clean but

309
00:11:09,519 --> 00:11:12,160
it was very

310
00:11:10,720 --> 00:11:16,160
it was a very clean implementation for

311
00:11:12,160 --> 00:11:16,160
ros one by the time roz 2 came about

312
00:11:17,040 --> 00:11:21,440
it had a few issues though

313
00:11:18,959 --> 00:11:23,839
most arduino boards have a physical

314
00:11:21,440 --> 00:11:25,600
serial physical serial port behind a usb

315
00:11:23,839 --> 00:11:28,240
converter so they don't move data

316
00:11:25,600 --> 00:11:30,720
particularly quickly

317
00:11:28,240 --> 00:11:33,079
raw serial also couldn't be extended to

318
00:11:30,720 --> 00:11:35,680
wi-fi or ethernet when the

319
00:11:33,079 --> 00:11:39,440
esp8266 became popular or when ethernet

320
00:11:35,680 --> 00:11:39,440
shields became cost effective

321
00:11:39,519 --> 00:11:44,399
library support for the various messages

322
00:11:41,839 --> 00:11:46,240
had to be generated from host side code

323
00:11:44,399 --> 00:11:48,399
and copied to an arduino library it was

324
00:11:46,240 --> 00:11:51,360
automated but still a little a little

325
00:11:48,399 --> 00:11:51,360
rough on beginners

326
00:11:52,639 --> 00:11:57,200
because the serial port on almost all

327
00:11:54,720 --> 00:11:59,760
arduinos and clones used usb serial

328
00:11:57,200 --> 00:12:02,240
emulation they inherited a 10 meter

329
00:11:59,760 --> 00:12:04,079
limit to the tether to a host pc

330
00:12:02,240 --> 00:12:06,000
it was common to see wireless bridges

331
00:12:04,079 --> 00:12:09,040
open wrt routers

332
00:12:06,000 --> 00:12:12,079
or xp radios but they often doubled the

333
00:12:09,040 --> 00:12:13,760
cost of the actual robot

334
00:12:12,079 --> 00:12:15,680
these limitations needed a systematic

335
00:12:13,760 --> 00:12:18,240
fix

336
00:12:15,680 --> 00:12:20,079
instead of wrapping some key functions

337
00:12:18,240 --> 00:12:21,920
on microsite code and then leaning on

338
00:12:20,079 --> 00:12:24,320
the host for actual work

339
00:12:21,920 --> 00:12:27,200
micro ros builds ros2 natively for the

340
00:12:24,320 --> 00:12:29,519
target microcontroller

341
00:12:27,200 --> 00:12:33,040
microros provides a full-blown native

342
00:12:29,519 --> 00:12:35,920
ros 2 interface for arduino esp

343
00:12:33,040 --> 00:12:35,920
stm32

344
00:12:37,440 --> 00:12:41,519
because roz uses mainline ros2 source

345
00:12:40,240 --> 00:12:44,000
the developers were able to get

346
00:12:41,519 --> 00:12:46,160
incredible automated test coverage which

347
00:12:44,000 --> 00:12:49,120
made for a really pleasant pull pull

348
00:12:46,160 --> 00:12:49,120
request experience on

349
00:12:50,839 --> 00:12:56,480
github peer discovery is

350
00:12:53,839 --> 00:12:58,480
important for flexibility by forcing a

351
00:12:56,480 --> 00:13:00,959
decades worth of robot developers into a

352
00:12:58,480 --> 00:13:03,600
strict and modular design pattern any

353
00:13:00,959 --> 00:13:05,040
host side nodes ever written can talk to

354
00:13:03,600 --> 00:13:07,839
any microcontroller on the network

355
00:13:05,040 --> 00:13:07,839
without modification

356
00:13:08,560 --> 00:13:13,519
micropros integrates with free rtos so

357
00:13:10,880 --> 00:13:17,040
you can have fancy threading stuff or

358
00:13:13,519 --> 00:13:17,040
you can just write event handlers

359
00:13:18,639 --> 00:13:24,880
i mean you can take it as uh

360
00:13:21,519 --> 00:13:24,880
as shallow or deep as you please

361
00:13:25,279 --> 00:13:28,560
a lot of

362
00:13:26,959 --> 00:13:30,720
roz developers these days are having to

363
00:13:28,560 --> 00:13:32,720
square with automotive safety integrity

364
00:13:30,720 --> 00:13:35,120
coding guidelines so there's actually

365
00:13:32,720 --> 00:13:38,000
very little memory thrashing at run time

366
00:13:35,120 --> 00:13:38,000
in micro roles

367
00:13:38,880 --> 00:13:42,959
micro ros inherits the plugable

368
00:13:41,440 --> 00:13:44,720
transport layers

369
00:13:42,959 --> 00:13:47,360
of of ros 2

370
00:13:44,720 --> 00:13:49,279
which became way more significant than i

371
00:13:47,360 --> 00:13:51,120
expected

372
00:13:49,279 --> 00:13:53,120
when i proposed this talk

373
00:13:51,120 --> 00:13:55,760
none of the regular ros transports would

374
00:13:53,120 --> 00:13:58,639
build on a microcontroller so microroz

375
00:13:55,760 --> 00:14:00,560
relied on hosts on a host side node to

376
00:13:58,639 --> 00:14:02,480
broker transactions through a simpler

377
00:14:00,560 --> 00:14:05,839
communication protocol

378
00:14:02,480 --> 00:14:08,079
the microros agent supported serial udp

379
00:14:05,839 --> 00:14:10,000
can bus

380
00:14:08,079 --> 00:14:12,800
but the agent sat on a host like the end

381
00:14:10,000 --> 00:14:15,519
of a tether lending a similar topology

382
00:14:12,800 --> 00:14:17,680
to raw serial

383
00:14:15,519 --> 00:14:19,760
that tether could be wi-fi but the agent

384
00:14:17,680 --> 00:14:22,639
was still a central point of failure on

385
00:14:19,760 --> 00:14:24,399
an otherwise distributed system

386
00:14:22,639 --> 00:14:25,839
these simpler protocols were implemented

387
00:14:24,399 --> 00:14:28,320
as uh

388
00:14:25,839 --> 00:14:29,680
as proper ros transport layers though

389
00:14:28,320 --> 00:14:31,839
they just lacked the killer features

390
00:14:29,680 --> 00:14:33,120
that made ros 2 so powerful

391
00:14:31,839 --> 00:14:36,240
and then

392
00:14:33,120 --> 00:14:38,079
someone announced embedded rtps

393
00:14:36,240 --> 00:14:40,160
i don't have a slide for this one

394
00:14:38,079 --> 00:14:42,320
um

395
00:14:40,160 --> 00:14:44,800
ros 2 ships with the default transport

396
00:14:42,320 --> 00:14:46,880
layers based on dds the data

397
00:14:44,800 --> 00:14:49,040
distribution system

398
00:14:46,880 --> 00:14:50,560
ros 2 treats it like a

399
00:14:49,040 --> 00:14:52,240
big old name space that holds the

400
00:14:50,560 --> 00:14:55,360
current states of a bunch of values and

401
00:14:52,240 --> 00:14:57,440
updates them on any machine that cares

402
00:14:55,360 --> 00:14:59,120
behind the key behind the curtain dds is

403
00:14:57,440 --> 00:15:02,000
a lot more than that

404
00:14:59,120 --> 00:15:03,600
dds is provided for ros 2 by a couple of

405
00:15:02,000 --> 00:15:04,959
vendors and they're all notionally

406
00:15:03,600 --> 00:15:07,279
intercompatible

407
00:15:04,959 --> 00:15:10,320
for at least the basic features

408
00:15:07,279 --> 00:15:12,320
one such basic feature is rtps real time

409
00:15:10,320 --> 00:15:14,240
publish subscribe which handles most of

410
00:15:12,320 --> 00:15:15,600
the network transport tasks

411
00:15:14,240 --> 00:15:18,560
rtps

412
00:15:15,600 --> 00:15:20,000
is not to be confused with any of rtp

413
00:15:18,560 --> 00:15:21,360
rtsp

414
00:15:20,000 --> 00:15:24,240
rtmp

415
00:15:21,360 --> 00:15:27,519
rtmps

416
00:15:24,240 --> 00:15:28,399
realtime publish subscribe

417
00:15:27,519 --> 00:15:29,680
yeah

418
00:15:28,399 --> 00:15:32,000
acronyms

419
00:15:29,680 --> 00:15:34,560
and a cluttered namespace embedded rtps

420
00:15:32,000 --> 00:15:37,279
had its first commits in 2018 and built

421
00:15:34,560 --> 00:15:40,399
an implementation of rtps that

422
00:15:37,279 --> 00:15:42,560
works on microcontrollers with lwip the

423
00:15:40,399 --> 00:15:44,959
lightweight internet protocol and free

424
00:15:42,560 --> 00:15:45,839
rtos allowing it to target

425
00:15:44,959 --> 00:15:47,759
the

426
00:15:45,839 --> 00:15:51,519
threading and networking capabilities of

427
00:15:47,759 --> 00:15:54,959
stm32 arduino and esp

428
00:15:51,519 --> 00:15:56,160
embedded rtps announced on the roz

429
00:15:54,959 --> 00:15:57,680
discord

430
00:15:56,160 --> 00:16:00,240
that it had passed some compatibility

431
00:15:57,680 --> 00:16:02,720
tests with fast dds the

432
00:16:00,240 --> 00:16:05,040
the host side dds implementation for ros

433
00:16:02,720 --> 00:16:06,839
foxy

434
00:16:05,040 --> 00:16:09,920
in january 21

435
00:16:06,839 --> 00:16:11,199
uh then in october the micro ros

436
00:16:09,920 --> 00:16:13,600
maintainers

437
00:16:11,199 --> 00:16:15,759
had included it as a transport option in

438
00:16:13,600 --> 00:16:16,959
micro ros eliminating the need for the

439
00:16:15,759 --> 00:16:18,959
agent

440
00:16:16,959 --> 00:16:20,800
bringing raw micro rods into a

441
00:16:18,959 --> 00:16:23,800
decentralized topology with the rest of

442
00:16:20,800 --> 00:16:23,800
roles

443
00:16:24,639 --> 00:16:29,040
i think

444
00:16:25,920 --> 00:16:32,320
i'm going to go into demo time now

445
00:16:29,040 --> 00:16:32,320
so i'm going to hope this all works

446
00:16:32,959 --> 00:16:35,759
um

447
00:16:34,560 --> 00:16:38,560
so these are all the nodes that i

448
00:16:35,759 --> 00:16:38,560
currently have running

449
00:16:40,880 --> 00:16:43,199
and

450
00:16:45,759 --> 00:16:48,399
see

451
00:16:46,880 --> 00:16:52,480
if i visualize what the kinematics is

452
00:16:48,399 --> 00:16:52,480
doing that's actually up behind me

453
00:16:52,720 --> 00:16:56,160
that's this one

454
00:16:54,639 --> 00:16:58,880
where the camera pointed at it from a

455
00:16:56,160 --> 00:16:58,880
second robot

456
00:17:00,399 --> 00:17:05,839
and then on the joystick

457
00:17:02,959 --> 00:17:05,839
i can

458
00:17:06,240 --> 00:17:10,400
move all of the parts like so

459
00:17:08,160 --> 00:17:10,400
so

460
00:17:12,640 --> 00:17:16,480
i've got

461
00:17:13,600 --> 00:17:18,480
a joystick input with a deadman switch

462
00:17:16,480 --> 00:17:20,799
which is all handled on the host side

463
00:17:18,480 --> 00:17:23,520
computer i reuse all of these nodes for

464
00:17:20,799 --> 00:17:26,799
any robot that drives around

465
00:17:23,520 --> 00:17:28,559
i've got an openscad model that has all

466
00:17:26,799 --> 00:17:30,000
the inverse kinematics

467
00:17:28,559 --> 00:17:32,640
all the inverse kinematics runs on the

468
00:17:30,000 --> 00:17:34,240
host side machine and then it sends the

469
00:17:32,640 --> 00:17:35,440
updated states

470
00:17:34,240 --> 00:17:38,520
to

471
00:17:35,440 --> 00:17:38,520
the microcontroller

472
00:18:01,360 --> 00:18:05,679
um

473
00:18:03,200 --> 00:18:07,919
so that's about all i've got

474
00:18:05,679 --> 00:18:09,840
uh the microcontroller in in this demo

475
00:18:07,919 --> 00:18:11,600
is the esp32

476
00:18:09,840 --> 00:18:12,799
and it's just running uh

477
00:18:11,600 --> 00:18:16,400
um

478
00:18:12,799 --> 00:18:17,840
it's accepting server messages for

479
00:18:16,400 --> 00:18:22,360
several messages

480
00:18:17,840 --> 00:18:22,360
an array of where am i

481
00:18:28,799 --> 00:18:31,600
i can interrogate

482
00:18:40,799 --> 00:18:47,120
the topics that i'm using

483
00:18:44,640 --> 00:18:47,120
and i can

484
00:18:52,000 --> 00:18:56,559
read off the commands that are being

485
00:18:53,760 --> 00:18:59,280
sent to

486
00:18:56,559 --> 00:19:00,559
if i can type it

487
00:18:59,280 --> 00:19:03,919
uh read off the commands that are being

488
00:19:00,559 --> 00:19:03,919
sent to the claw

489
00:19:04,240 --> 00:19:11,799
so these are just um

490
00:19:07,520 --> 00:19:11,799
this is just an array of

491
00:19:12,480 --> 00:19:18,440
signed integers each one represents the

492
00:19:14,799 --> 00:19:18,440
angle of a server motor

493
00:19:28,000 --> 00:19:31,120
the joystick

494
00:19:31,520 --> 00:19:35,400
again is a standard message

495
00:19:43,679 --> 00:19:46,799
with stick inputs

496
00:19:47,840 --> 00:19:51,200
uh stick inputs has floating point

497
00:19:49,280 --> 00:19:52,400
numbers buttons as i think also floating

498
00:19:51,200 --> 00:19:54,080
point numbers

499
00:19:52,400 --> 00:19:56,080
um

500
00:19:54,080 --> 00:19:59,360
and this this kind of standardization

501
00:19:56,080 --> 00:19:59,360
means that any

502
00:20:01,440 --> 00:20:07,039
any developers can sort of share basic

503
00:20:03,679 --> 00:20:10,960
functionality of all of their robots so

504
00:20:07,039 --> 00:20:10,960
the same messages i use here i use on

505
00:20:11,919 --> 00:20:14,880
the other robot behind me

506
00:20:16,400 --> 00:20:21,120
they all use very similar hardware so

507
00:20:18,799 --> 00:20:23,679
the timing performances demo is not

508
00:20:21,120 --> 00:20:26,640
great i've kind of used the

509
00:20:23,679 --> 00:20:30,080
the simplest implementation

510
00:20:26,640 --> 00:20:32,400
of sending just the the updated state

511
00:20:30,080 --> 00:20:35,840
instead of sending like a schedule of

512
00:20:32,400 --> 00:20:35,840
motions to to follow

513
00:20:46,480 --> 00:20:50,559
so normally in a like the reason you

514
00:20:49,120 --> 00:20:52,240
would want to use roles on hardware is

515
00:20:50,559 --> 00:20:54,159
because you want you know strict timing

516
00:20:52,240 --> 00:20:56,240
you want to have a

517
00:20:54,159 --> 00:20:59,240
motion plan coming from a host host

518
00:20:56,240 --> 00:20:59,240
system

519
00:21:04,320 --> 00:21:07,520
you can have motion commands coming from

520
00:21:05,600 --> 00:21:10,159
a host system with a sort of default

521
00:21:07,520 --> 00:21:11,600
estop behavior if something happens

522
00:21:10,159 --> 00:21:14,960
instantly on the

523
00:21:11,600 --> 00:21:14,960
on the microcontroller on the

524
00:21:15,760 --> 00:21:18,880
if the microcontroller needs to respond

525
00:21:17,039 --> 00:21:22,000
to an event quickly you can you can do

526
00:21:18,880 --> 00:21:22,000
that on the microcontroller

527
00:21:22,480 --> 00:21:26,240
uh we've got a question about inverse

528
00:21:24,000 --> 00:21:28,000
kinematics

529
00:21:26,240 --> 00:21:31,840
where are we

530
00:21:28,000 --> 00:21:31,840
inverse kinematics um

531
00:21:33,120 --> 00:21:35,440
sure

532
00:21:38,799 --> 00:21:44,840
kinematics is describing

533
00:21:41,840 --> 00:21:44,840
um

534
00:21:45,760 --> 00:21:51,200
describing how a joint should move in

535
00:21:48,000 --> 00:21:52,960
order to achieve a certain result so

536
00:21:51,200 --> 00:21:55,520
in the case of

537
00:21:52,960 --> 00:21:58,720
uh in the case of this claw i've got the

538
00:21:55,520 --> 00:22:01,679
contact points where the claw should be

539
00:21:58,720 --> 00:22:01,679
moving around a circle

540
00:22:02,640 --> 00:22:06,080
kinematics is

541
00:22:04,320 --> 00:22:09,360
essentially where that contact point

542
00:22:06,080 --> 00:22:11,360
ends up for a given mode of motion

543
00:22:09,360 --> 00:22:14,240
inverse kinematics is figuring out how

544
00:22:11,360 --> 00:22:16,080
the motors should move to achieve that

545
00:22:14,240 --> 00:22:18,799
desired motion so

546
00:22:16,080 --> 00:22:20,880
here i have a gate synthesizer which

547
00:22:18,799 --> 00:22:23,120
describes a path plan

548
00:22:20,880 --> 00:22:24,480
it describes a path through space and

549
00:22:23,120 --> 00:22:27,360
the motors

550
00:22:24,480 --> 00:22:30,159
the inverse kinematics engine tries to

551
00:22:27,360 --> 00:22:31,039
find joint joint poses that achieve

552
00:22:30,159 --> 00:22:33,280
those

553
00:22:31,039 --> 00:22:33,280
um

554
00:22:34,159 --> 00:22:37,799
that achieve those positions

555
00:22:38,840 --> 00:22:42,159
uh

556
00:22:40,400 --> 00:22:43,840
and i did actually implement

557
00:22:42,159 --> 00:22:45,919
inverse kinematics on openscad i kind of

558
00:22:43,840 --> 00:22:48,159
got a bit carried away

559
00:22:45,919 --> 00:22:48,159
um

560
00:22:49,280 --> 00:22:52,559
openscad being a

561
00:22:52,960 --> 00:22:56,960
uh

562
00:22:54,799 --> 00:22:59,280
having its variables are

563
00:22:56,960 --> 00:23:01,919
openscad's a bit weird it's the simplest

564
00:22:59,280 --> 00:23:03,520
possible cad language that you could

565
00:23:01,919 --> 00:23:04,960
use

566
00:23:03,520 --> 00:23:06,960
um

567
00:23:04,960 --> 00:23:09,840
so it's the simplest language that could

568
00:23:06,960 --> 00:23:09,840
solve a problem

569
00:23:10,000 --> 00:23:14,080
which means that it doesn't have like

570
00:23:11,679 --> 00:23:15,120
for loops or mutable variables or stuff

571
00:23:14,080 --> 00:23:17,280
like that

572
00:23:15,120 --> 00:23:18,480
it just has like tail recursion if you

573
00:23:17,280 --> 00:23:22,080
want a loop you have to use taylor

574
00:23:18,480 --> 00:23:25,600
equation so in this case i have uh the

575
00:23:22,080 --> 00:23:29,200
animation loop figures out places for

576
00:23:25,600 --> 00:23:29,200
the contact points to be

577
00:23:34,159 --> 00:23:39,440
and then it um

578
00:23:36,799 --> 00:23:41,919
it uses tail recursion to optimize

579
00:23:39,440 --> 00:23:43,360
the poses of all the motors

580
00:23:41,919 --> 00:23:45,039
to achieve those joint positions and

581
00:23:43,360 --> 00:23:47,279
that all happens within open skirt that

582
00:23:45,039 --> 00:23:48,480
was really useful um

583
00:23:47,279 --> 00:23:50,240
for

584
00:23:48,480 --> 00:23:52,559
figuring out like do these components

585
00:23:50,240 --> 00:23:53,919
all collide with each other have i

586
00:23:52,559 --> 00:23:56,400
made joints long enough to reach the

587
00:23:53,919 --> 00:23:58,159
positions they want to get to

588
00:23:56,400 --> 00:23:59,760
um

589
00:23:58,159 --> 00:24:01,120
that was also very good because i could

590
00:23:59,760 --> 00:24:03,760
export the model

591
00:24:01,120 --> 00:24:06,640
into roles but i could also export the

592
00:24:03,760 --> 00:24:06,640
kinematics chain

593
00:24:10,720 --> 00:24:13,600
so

594
00:24:11,919 --> 00:24:17,080
i've just got a bunch of

595
00:24:13,600 --> 00:24:17,080
lengths of

596
00:24:18,000 --> 00:24:22,000
uh lengths of all the

597
00:24:19,600 --> 00:24:24,080
uh joints of the

598
00:24:22,000 --> 00:24:25,520
hinges and stuff

599
00:24:24,080 --> 00:24:29,200
and i could just export those directly

600
00:24:25,520 --> 00:24:30,840
into the ros simulation to generate

601
00:24:29,200 --> 00:24:34,960
this

602
00:24:30,840 --> 00:24:36,640
model uh the connection

603
00:24:34,960 --> 00:24:38,320
the connection between the computer and

604
00:24:36,640 --> 00:24:40,240
the robot is

605
00:24:38,320 --> 00:24:42,559
you can take your pick so at the moment

606
00:24:40,240 --> 00:24:44,159
i'm using the micro ros agent over

607
00:24:42,559 --> 00:24:46,400
wireless

608
00:24:44,159 --> 00:24:48,720
so i've just got udp transport over wifi

609
00:24:46,400 --> 00:24:49,919
that thing is just battery powered off a

610
00:24:48,720 --> 00:24:52,159
drill motor

611
00:24:49,919 --> 00:24:55,159
for drill battery

612
00:24:52,159 --> 00:24:55,159
um

613
00:25:01,120 --> 00:25:06,320
and you can use a serial can bus i mean

614
00:25:04,080 --> 00:25:08,000
you you can make an any transport

615
00:25:06,320 --> 00:25:09,200
over anything as long as you implement

616
00:25:08,000 --> 00:25:13,240
it as a

617
00:25:09,200 --> 00:25:13,240
like as an actual ros transport

618
00:25:15,440 --> 00:25:18,480
uh what sort of limits are there in

619
00:25:16,880 --> 00:25:19,679
micro raws for hardware support i'm

620
00:25:18,480 --> 00:25:20,880
assuming you can't do more complicated

621
00:25:19,679 --> 00:25:23,919
stuff that you would do on a full linux

622
00:25:20,880 --> 00:25:25,200
host eg connecting to lidars funny you

623
00:25:23,919 --> 00:25:27,039
mentioned that

624
00:25:25,200 --> 00:25:29,600
um

625
00:25:27,039 --> 00:25:31,120
lidars produce a fairly huge amount of

626
00:25:29,600 --> 00:25:33,039
data

627
00:25:31,120 --> 00:25:35,440
and a lot of the time they just put it

628
00:25:33,039 --> 00:25:38,240
straight onto an ethernet cable so

629
00:25:35,440 --> 00:25:40,320
most of the time for a lidar you've got

630
00:25:38,240 --> 00:25:42,320
uh lidar data coming

631
00:25:40,320 --> 00:25:43,520
from the unit over ethernet into the

632
00:25:42,320 --> 00:25:46,320
host system and then you've got a driver

633
00:25:43,520 --> 00:25:46,320
on the host system

634
00:25:46,799 --> 00:25:49,679
but

635
00:25:47,679 --> 00:25:52,320
for vacuum cleaners

636
00:25:49,679 --> 00:25:55,520
they have a little spinny lidar that

637
00:25:52,320 --> 00:25:57,440
just does a 2d scan

638
00:25:55,520 --> 00:25:59,760
those end up producing a fairly small

639
00:25:57,440 --> 00:26:02,159
like a very modest amount of

640
00:25:59,760 --> 00:26:02,159
data

641
00:26:02,559 --> 00:26:04,720
so

642
00:26:05,440 --> 00:26:11,520
those ones you can just

643
00:26:07,679 --> 00:26:14,240
attach to a microcontroller and then

644
00:26:11,520 --> 00:26:16,640
spool all of the all of the

645
00:26:14,240 --> 00:26:18,320
ranges and angles out to a host system

646
00:26:16,640 --> 00:26:20,320
or deal with them on the

647
00:26:18,320 --> 00:26:21,200
on the local device

648
00:26:20,320 --> 00:26:22,799
so

649
00:26:21,200 --> 00:26:25,520
like i mentioned for map generation

650
00:26:22,799 --> 00:26:29,440
versus obstacle avoidance

651
00:26:25,520 --> 00:26:31,200
if you have a 2d lidar you can

652
00:26:29,440 --> 00:26:33,679
you can set up little zones where if you

653
00:26:31,200 --> 00:26:34,880
detect a hit within a within a zone

654
00:26:33,679 --> 00:26:36,840
you know you've got an obstacle that you

655
00:26:34,880 --> 00:26:38,720
need to avoid so you can have

656
00:26:36,840 --> 00:26:40,799
an uh

657
00:26:38,720 --> 00:26:42,720
a function on the microcontroller that

658
00:26:40,799 --> 00:26:44,480
avoids the obstacle

659
00:26:42,720 --> 00:26:47,039
um

660
00:26:44,480 --> 00:26:48,799
like in a in a hardware real-time loop

661
00:26:47,039 --> 00:26:50,000
and then you've got the host system

662
00:26:48,799 --> 00:26:51,679
picking up all of those points

663
00:26:50,000 --> 00:26:54,159
intercepting all that data and

664
00:26:51,679 --> 00:26:55,360
generating a map and then building a

665
00:26:54,159 --> 00:26:57,120
motion plan

666
00:26:55,360 --> 00:26:58,480
for the robot to follow

667
00:26:57,120 --> 00:27:00,320
so that way you've got

668
00:26:58,480 --> 00:27:02,320
all of the hardware real-time safety

669
00:27:00,320 --> 00:27:04,159
guarantees of an on-board

670
00:27:02,320 --> 00:27:05,120
hardware-backed obstacle avoidance

671
00:27:04,159 --> 00:27:08,159
system

672
00:27:05,120 --> 00:27:11,440
with the niceties of a more complex map

673
00:27:08,159 --> 00:27:11,440
generation and path planning tool

674
00:27:16,080 --> 00:27:20,159
so a lot of the

675
00:27:17,679 --> 00:27:21,600
communications for micro rows are not

676
00:27:20,159 --> 00:27:24,720
encrypted

677
00:27:21,600 --> 00:27:27,760
um i i'm not sure that embedded rtps has

678
00:27:24,720 --> 00:27:27,760
an encryption profile

679
00:27:29,760 --> 00:27:33,440
so

680
00:27:30,559 --> 00:27:35,520
generally ros is all about

681
00:27:33,440 --> 00:27:37,679
researching quickly so it's more about

682
00:27:35,520 --> 00:27:39,039
rapid iteration than

683
00:27:37,679 --> 00:27:41,120
uh

684
00:27:39,039 --> 00:27:42,159
safe networking practices

685
00:27:41,120 --> 00:27:44,480
so

686
00:27:42,159 --> 00:27:46,240
dds has automatic discovery on the local

687
00:27:44,480 --> 00:27:49,279
network um

688
00:27:46,240 --> 00:27:52,320
you can encrypt it and

689
00:27:49,279 --> 00:27:54,000
sros secure ros

690
00:27:52,320 --> 00:27:55,520
basically provides an api

691
00:27:54,000 --> 00:27:58,159
to

692
00:27:55,520 --> 00:28:00,000
manipulate the dds security layers

693
00:27:58,159 --> 00:28:02,000
all dds vendors

694
00:28:00,000 --> 00:28:04,320
implement a security profile uh it's

695
00:28:02,000 --> 00:28:06,480
just a mandatory aspect of like the

696
00:28:04,320 --> 00:28:07,360
minimum dds spec

697
00:28:06,480 --> 00:28:08,880
so

698
00:28:07,360 --> 00:28:11,520
you can configure that but you end up

699
00:28:08,880 --> 00:28:13,200
locking nodes into

700
00:28:11,520 --> 00:28:14,000
you know they stay in one they're one

701
00:28:13,200 --> 00:28:17,760
lane

702
00:28:14,000 --> 00:28:19,600
um they don't read or write to

703
00:28:17,760 --> 00:28:21,840
uh messages uh topics they're not

704
00:28:19,600 --> 00:28:24,159
allowed to

705
00:28:21,840 --> 00:28:28,320
stuff like that

706
00:28:24,159 --> 00:28:28,320
uh which gets kind of in the way of

707
00:28:28,840 --> 00:28:33,120
um it gets a little bit in the way of

708
00:28:33,840 --> 00:28:40,440
like iterating rapidly on

709
00:28:36,320 --> 00:28:40,440
new topologies for control systems

710
00:28:45,039 --> 00:28:47,360
uh

711
00:28:48,000 --> 00:28:51,000
oops

712
00:29:01,039 --> 00:29:05,279
uh

713
00:29:01,919 --> 00:29:09,080
how much time do we have

714
00:29:05,279 --> 00:29:09,080
i think we're about wrapping up

715
00:29:17,679 --> 00:29:21,360
hey

716
00:29:19,520 --> 00:29:22,960
i'll just jump back in again

717
00:29:21,360 --> 00:29:26,240
thank you very much brett

718
00:29:22,960 --> 00:29:27,679
that was fascinating and the i've got a

719
00:29:26,240 --> 00:29:29,440
couple of comments about what you just

720
00:29:27,679 --> 00:29:31,520
had on the screen a moment ago one of

721
00:29:29,440 --> 00:29:34,559
the questions i don't think um you

722
00:29:31,520 --> 00:29:36,640
followed up was what is the inspiration

723
00:29:34,559 --> 00:29:38,720
for this design when i first saw it i

724
00:29:36,640 --> 00:29:41,039
thought it was something like a

725
00:29:38,720 --> 00:29:42,320
a hexapod on its back

726
00:29:41,039 --> 00:29:44,320
right now so this is

727
00:29:42,320 --> 00:29:46,960
this is a reference to

728
00:29:44,320 --> 00:29:50,320
an art sculpt that has a kinematic

729
00:29:46,960 --> 00:29:54,600
sculpture by mark cetrakine um

730
00:29:50,320 --> 00:29:54,600
i actually saw it first on

731
00:29:54,880 --> 00:29:58,000
uh on adam's have just tested

732
00:29:57,200 --> 00:29:59,919
and

733
00:29:58,000 --> 00:30:01,039
when i looked at what they were using to

734
00:29:59,919 --> 00:30:02,720
implement it

735
00:30:01,039 --> 00:30:04,799
i looked up the motors they were using

736
00:30:02,720 --> 00:30:08,360
and it was like 500 bucks a motor

737
00:30:04,799 --> 00:30:08,360
for 15 motors

738
00:30:11,919 --> 00:30:15,039
yeah

739
00:30:13,120 --> 00:30:18,799
so my pockets aren't nearly that deep

740
00:30:15,039 --> 00:30:21,120
but i wanted to dabble with the you know

741
00:30:18,799 --> 00:30:22,640
for mark citrocaine it was a

742
00:30:21,120 --> 00:30:23,360
sharpening exercise so i wanted to kind

743
00:30:22,640 --> 00:30:25,360
of

744
00:30:23,360 --> 00:30:29,279
pay homage to it and sharpen my own

745
00:30:25,360 --> 00:30:29,279
skills by essentially replicating it

746
00:30:30,640 --> 00:30:35,520
that looks amazing so in the animation

747
00:30:32,799 --> 00:30:38,080
you have the sphere sitting on the five

748
00:30:35,520 --> 00:30:39,600
fingers have you done that physically

749
00:30:38,080 --> 00:30:42,240
i have

750
00:30:39,600 --> 00:30:44,159
unfortunately these servos so

751
00:30:42,240 --> 00:30:46,480
the reason

752
00:30:44,159 --> 00:30:48,559
the original artist used the fancy

753
00:30:46,480 --> 00:30:50,640
motors was because he can tune the

754
00:30:48,559 --> 00:30:51,919
control loop of the motor

755
00:30:50,640 --> 00:30:53,279
at runtime

756
00:30:51,919 --> 00:30:55,440
whereas these are just you know three

757
00:30:53,279 --> 00:30:57,440
dollar hobby servos

758
00:30:55,440 --> 00:30:59,840
um

759
00:30:57,440 --> 00:31:01,200
so i can't modify the controls the

760
00:30:59,840 --> 00:31:03,679
controller within the server because

761
00:31:01,200 --> 00:31:04,399
it's it's an asic it's just raw silicon

762
00:31:03,679 --> 00:31:06,880
yeah

763
00:31:04,399 --> 00:31:08,559
i find these are a bit squishy so if you

764
00:31:06,880 --> 00:31:10,799
move them from their target position

765
00:31:08,559 --> 00:31:11,840
they just apply some torque to get back

766
00:31:10,799 --> 00:31:12,559
but

767
00:31:11,840 --> 00:31:14,159
it

768
00:31:12,559 --> 00:31:14,880
feels a bit springy

769
00:31:14,159 --> 00:31:16,320
so

770
00:31:14,880 --> 00:31:19,120
i had this thing rotating a salad bowl

771
00:31:16,320 --> 00:31:20,159
it rotated but it was noisy and rattly

772
00:31:19,120 --> 00:31:20,960
and

773
00:31:20,159 --> 00:31:22,640
the

774
00:31:20,960 --> 00:31:25,279
the contact points weren't actually

775
00:31:22,640 --> 00:31:26,480
where i wanted them to be

776
00:31:25,279 --> 00:31:28,960
yeah

777
00:31:26,480 --> 00:31:31,679
okay well it's a it's an amazing demo

778
00:31:28,960 --> 00:31:33,600
anyway i love the um

779
00:31:31,679 --> 00:31:35,440
the visualization where you have the 3d

780
00:31:33,600 --> 00:31:37,200
representation and the physical object

781
00:31:35,440 --> 00:31:39,840
and they're almost synchronized it's

782
00:31:37,200 --> 00:31:40,960
very impressive

783
00:31:39,840 --> 00:31:43,679
yeah

784
00:31:40,960 --> 00:31:45,760
um i'm just having a quick check um

785
00:31:43,679 --> 00:31:48,000
a final question i think and we're just

786
00:31:45,760 --> 00:31:49,039
about out of time it's almost lunch

787
00:31:48,000 --> 00:31:50,960
is

788
00:31:49,039 --> 00:31:52,480
do you have any examples of micro ros

789
00:31:50,960 --> 00:31:53,600
running in production or commercial

790
00:31:52,480 --> 00:31:56,559
systems

791
00:31:53,600 --> 00:31:57,840
so there are um the microros team have a

792
00:31:56,559 --> 00:31:59,760
regular

793
00:31:57,840 --> 00:32:01,200
a regular meet up

794
00:31:59,760 --> 00:32:02,080
online where they they present to each

795
00:32:01,200 --> 00:32:05,200
other

796
00:32:02,080 --> 00:32:05,200
and there's a

797
00:32:05,679 --> 00:32:09,120
there's a robot chassis that they're

798
00:32:07,039 --> 00:32:12,080
aiming for like

799
00:32:09,120 --> 00:32:13,840
uh urban cargo delivery and they use

800
00:32:12,080 --> 00:32:16,880
micro rolls to handle communication

801
00:32:13,840 --> 00:32:19,039
between ros on the host box and micro

802
00:32:16,880 --> 00:32:20,399
rolls on the motor controller so instead

803
00:32:19,039 --> 00:32:22,399
of having some

804
00:32:20,399 --> 00:32:23,919
weird driver that you have to import

805
00:32:22,399 --> 00:32:26,000
dependencies for

806
00:32:23,919 --> 00:32:27,200
you can push all of the dependencies out

807
00:32:26,000 --> 00:32:29,200
to the motor controller and have the

808
00:32:27,200 --> 00:32:30,880
motor controller interact with

809
00:32:29,200 --> 00:32:32,080
the native raw system on the host

810
00:32:30,880 --> 00:32:34,240
machine

811
00:32:32,080 --> 00:32:36,880
so that allows them to iterate very

812
00:32:34,240 --> 00:32:38,559
quickly on the nature of motion control

813
00:32:36,880 --> 00:32:40,399
on their platform

814
00:32:38,559 --> 00:32:41,440
okay interesting so it allows a little

815
00:32:40,399 --> 00:32:44,480
bit more

816
00:32:41,440 --> 00:32:45,919
modularity or separation of concerns

817
00:32:44,480 --> 00:32:47,360
yeah

818
00:32:45,919 --> 00:32:50,240
okay great

819
00:32:47,360 --> 00:32:51,200
well thank you very much brett thank you

820
00:32:50,240 --> 00:32:53,039
i

821
00:32:51,200 --> 00:32:55,440
yeah i've experimented a little bit with

822
00:32:53,039 --> 00:32:57,919
roz in the past and

823
00:32:55,440 --> 00:32:59,600
found it a little bit impenetrable but

824
00:32:57,919 --> 00:33:01,039
this is inspiring it makes me want to

825
00:32:59,600 --> 00:33:02,799
look into it more

826
00:33:01,039 --> 00:33:04,480
so yeah thank you very it's been a lot

827
00:33:02,799 --> 00:33:05,679
of fun

828
00:33:04,480 --> 00:33:08,080
that's great

829
00:33:05,679 --> 00:33:09,760
and for everybody else we are now going

830
00:33:08,080 --> 00:33:12,080
into the lunch break we'll be back at

831
00:33:09,760 --> 00:33:13,919
about 1 20

832
00:33:12,080 --> 00:33:15,279
and where i will be doing a talk about

833
00:33:13,919 --> 00:33:17,600
some problems and i'm going to be trying

834
00:33:15,279 --> 00:33:18,720
to do some stuff live on the bench

835
00:33:17,600 --> 00:33:20,399
and

836
00:33:18,720 --> 00:33:22,159
hopefully it will go wrong because

837
00:33:20,399 --> 00:33:24,159
that's when it's entertaining

838
00:33:22,159 --> 00:33:27,159
so thanks everybody and we'll see you

839
00:33:24,159 --> 00:33:27,159
soon

