1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" dir=
"ltr">
5 <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged robot
</title>
7 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"https://people.skolelinux.org/pere/blog/style.css" />
8 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"https://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel=
"alternate" title=
"RSS Feed" href=
"robot.rss" type=
"application/rss+xml" />
14 <a href=
"https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a>
21 <h3>Entries tagged "robot".
</h3>
25 <a href=
"https://people.skolelinux.org/pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html">Automatic LinuxCNC servo PID tuning?
</a>
31 <p>While working on a CNC with servo motors controlled by the
32 <a href=
"https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC
</a>
33 <a href=
"https://en.wikipedia.org/wiki/PID_controller">PID
34 controller
</a>, I recently had to learn how to tune the collection of values
35 that control such mathematical machinery that a PID controller is. It
36 proved to be a lot harder than I hoped, and I still have not succeeded
37 in getting the Z PID controller to successfully defy gravity, nor X
38 and Y to move accurately and reliably. But while climbing up this
39 rather steep learning curve, I discovered that some motor control
40 systems are able to tune their PID controllers. I got the impression
41 from the documentation that LinuxCNC were not. This proved to be not
45 <a href=
"http://linuxcnc.org/docs/html/man/man9/pid.9.html">pid
46 component
</a> is the recommended PID controller to use. It uses eight
47 constants
<tt>Pgain
</tt>,
<tt>Igain
</tt>,
<tt>Dgain
</tt>,
48 <tt>bias
</tt>,
<tt>FF0
</tt>,
<tt>FF1
</tt>,
<tt>FF2
</tt> and
49 <tt>FF3
</tt> to calculate the output value based on current and wanted
50 state, and all of these need to have a sensible value for the
51 controller to behave properly. Note, there are even more values
52 involved, theser are just the most important ones. In my case I need
53 the X, Y and Z axes to follow the requested path with little error.
54 This has proved quite a challenge for someone who have never tuned a
55 PID controller before, but there is at least some help to be found.
57 <p>I discovered that included in LinuxCNC was this old PID component
58 at_pid claiming to have auto tuning capabilities. Sadly it had been
59 neglected since
2011, and could not be used as a plug in replacement
60 for the default pid component. One would have to rewriting the
61 LinuxCNC HAL setup to test at_pid. This was rather sad, when I wanted
62 to quickly test auto tuning to see if it did a better job than me at
63 figuring out good P, I and D values to use.
</p>
65 <p>I decided to have a look if the situation could be improved. This
66 involved trying to understand the code and history of the pid and
67 at_pid components. Apparently they had a common ancestor, as code
68 structure, comments and variable names were quite close to each other.
69 Sadly this was not reflected in the git history, making it hard to
70 figure out what really happened. My guess is that the author of
71 <a href=
"https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/at_pid.c">at_pid.c
</a>
73 <a href=
"https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/pid.c">pid.c
</a>,
74 rewrote it to follow the structure he wished pid.c to have, then added
75 support for auto tuning and finally got it included into the LinuxCNC
76 repository. The restructuring and lack of early history made it
77 harder to figure out which part of the code were relevant to the auto
78 tuning, and which part of the code needed to be updated to work the
79 same way as the current pid.c implementation. I started by trying to
80 isolate relevant changes in pid.c, and applying them to at_pid.c. My
81 aim was to make sure the at_pid component could replace the pid
82 component with a simple change in the HAL setup loadrt line, without
83 having to "rewire" the rest of the HAL configuration. After a few
84 hours following this approach, I had learned quite a lot about the
85 code structure of both components, while concluding I was heading down
86 the wrong rabbit hole, and should get back to the surface and find a
89 <p>For the second attempt, I decided to throw away all the PID control
90 related part of the original at_pid.c, and instead isolate and lift
91 the auto tuning part of the code and inject it into a copy of pid.c.
92 This ensured compatibility with the current pid component, while
93 adding auto tuning as a run time option. To make it easier to identify
94 the relevant parts in the future, I wrapped all the auto tuning code
95 with '#ifdef AUTO_TUNER'. The end result behave just like the current
96 pid component by default, as that part of the code is identical. The
97 <a href=
"https://github.com/LinuxCNC/linuxcnc/pull/1820">end result
98 entered the LinuxCNC master branch
</a> a few days ago.
</p>
100 <p>To enable auto tuning, one need to set a few HAL pins in the PID
101 component. The most important ones are
<tt>tune-effort
</tt>,
102 <tt>tune-mode
</tt> and
<tt>tune-start
</tt>. But lets take a step
103 back, and see what the auto tuning code will do. I do not know the
104 mathematical foundation of the at_pid algorithm, but from observation
105 I can tell that the algorithm will, when enabled, produce a square
106 wave pattern centered around the
<tt>bias
</tt> value on the output pin
107 of the PID controller. This can be seen using the HAL Scope provided
108 by LinuxCNC. In my case, this is translated into voltage (+-
10V) sent
109 to the motor controller, which in turn is translated into motor speed.
110 So at_pid will ask the motor to move the axis back and forth. The
111 number of cycles in the pattern is controlled by the
112 <tt>tune-cycles
</tt> pin, and the extremes of the wave pattern is
113 controlled by the
<tt>tune-effort
</tt> pin. Of course, trying to
114 change the direction of a physical object instantly (as in going
115 directly from a positive voltage to the equivalent negative voltage)
116 do not change velocity instantly, and it take some time for the object
117 to slow down and move in the opposite direction. This result in a
118 more smooth movement wave form, as the axis in question were vibrating
119 back and forth. When the axis reached the target speed in the
120 opposing direction, the auto tuner change direction again. After
121 several of these changes, the average time delay between the 'peaks'
122 and 'valleys' of this movement graph is then used to calculate
123 proposed values for Pgain, Igain and Dgain, and insert them into the
124 HAL model to use by the pid controller. The auto tuned settings are
125 not great, but htye work a lot better than the values I had been able
126 to cook up on my own, at least for the horizontal X and Y axis. But I
127 had to use very small
<tt>tune-effort
<tt> values, as my motor
128 controllers error out if the voltage change too quickly. I've been
129 less lucky with the Z axis, which is moving a heavy object up and
130 down, and seem to confuse the algorithm. The Z axis movement became a
131 lot better when I introduced a
<tt>bias
</tt> value to counter the
132 gravitational drag, but I will have to work a lot more on the Z axis
135 <p>Armed with this knowledge, it is time to look at how to do the
136 tuning. Lets say the HAL configuration in question load the PID
137 component for X, Y and Z like this:
</p>
140 loadrt pid names=pid.x,pid.y,pid.z
143 <p>Armed with the new and improved at_pid component, the new line will
147 loadrt at_pid names=pid.x,pid.y,pid.z
150 <p>The rest of the HAL setup can stay the same. This work because the
151 components are referenced by name. If the component had used count=
3
152 instead, all use of pid.# had to be changed to at_pid.#.
</p>
154 <p>To start tuning the X axis, move the axis to the middle of its
155 range, to make sure it do not hit anything when it start moving back
156 and forth. Next, set the
<tt>tune-effort
</tt> to a low number in the
157 output range. I used
0.1 as my initial value. Next, assign
1 to the
158 <tt>tune-mode
</tt> value. Note, this will disable the pid controlling
159 part and feed
0 to the output pin, which in my case initially caused a
160 lot of drift. In my case it proved to be a good idea with X and Y to
161 tune the motor driver to make sure
0 voltage stopped the motor
162 rotation. On the other hand, for the Z axis this proved to be a bad
163 idea, so it will depend on your setup. It might help to set the
164 <tt>bias
</tt> value to a output value that reduce or eliminate the
165 axis drift. Finally, after setting
<tt>tune-mode
</tt>, set
166 <tt>tune-start
</tt> to
1 to activate the auto tuning. If all go well,
167 your axis will vibrate for a few seconds and when it is done, new
168 values for Pgain, Igain and Dgain will be active. To test them,
169 change
<tt>tune-mode
</tt> back to
0. Note that this might cause the
170 machine to suddenly jerk as it bring the axis back to its commanded
171 position, which it might have drifted away from during tuning. To
172 summarize with some halcmd lines:
</p>
175 setp pid.x.tune-effort
0.1
176 setp pid.x.tune-mode
1
177 setp pid.x.tune-start
1
178 # wait for the tuning to complete
179 setp pid.x.tune-mode
0
182 <p>After doing this task quite a few times while trying to figure out
183 how to properly tune the PID controllers on the machine in, I decided
184 to figure out if this process could be automated, and wrote a script
185 to do the entire tuning process from power on. The end result will
186 ensure the machine is powered on and ready to run, home all axis if it
187 is not already done, check that the extra tuning pins are available,
188 move the axis to its mid point, run the auto tuning and re-enable the
189 pid controller when it is done. It can be run several times. Check
191 <a href=
"https://github.com/SebKuzminsky/MazakVQC1540/blob/bon-dev/scripts/run-auto-pid-tuner">run-auto-pid-tuner
</a>
192 script on github if you want to learn how it is done.
</p>
194 <p>My hope is that this little adventure can inspire someone who know
195 more about motor PID controller tuning can implement even better
196 algorithms for automatic PID tuning in LinuxCNC, making life easier
197 for both me and all the others that want to use LinuxCNC but lack the
198 in depth knowledge needed to tune PID controllers well.
</p>
200 <p>As usual, if you use Bitcoin and want to show your support of my
201 activities, please send Bitcoin donations to my address
202 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
208 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
213 <div class=
"padding"></div>
217 <a href=
"https://people.skolelinux.org/pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html">LinuxCNC translators life just got a bit easier
</a>
223 <p>Back in oktober last year, when I started looking at the
224 <a href=
"https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC
</a> system, I
225 proposed to change the documentation build system make life easier for
226 translators. The original system consisted of independently written
227 documentation files for each language, with no automated way to track
228 changes done in other translations and no help for the translators to
229 know how much was left to translated. By using
230 <a href=
"https://po4a.org/">the po4a system
</a> to generate POT and PO
231 files from the English documentation, this can be improved. A small
232 team of LinuxCNC contributors got together and today our labour
233 finally payed off. Since a few hours ago, it is now possible to
234 translate
<a href=
"https://hosted.weblate.org/projects/linuxcnc/">the
235 LinuxCNC documentation on Weblate
</a>, alongside the program itself.
</p>
237 <p>The effort to migrate the documentation to use po4a has been both
238 slow and frustrating. I am very happy we finally made it.
</p>
240 <p>As usual, if you use Bitcoin and want to show your support of my
241 activities, please send Bitcoin donations to my address
242 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
248 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
253 <div class=
"padding"></div>
257 <a href=
"https://people.skolelinux.org/pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html">Run your industrial metal working machine using Debian?
</a>
263 <p>After many months of hard work by the good people involved in
264 <a href=
"https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC
</a>, the
265 system was accepted Sunday
266 <a href=
"https://tracker.debian.org/pkg/linuxcnc">into Debian
</a>.
267 Once it was available from Debian, I was surprised to discover from
268 <a href=
"https://qa.debian.org/popcon.php?package=linuxcnc">its
269 popularity-contest numbers
</a> that people have been reporting its use
270 since
2012.
<a href=
"http://linuxcnc.org/">Its project site
</a> might
271 be a good place to check out, but sadly is not working when visiting
274 <p>But what is LinuxCNC, you are probably wondering? Perhaps a
275 Wikipedia quote is in place?
</p>
278 "LinuxCNC is a software system for numerical control of
279 machines such as milling machines, lathes, plasma cutters, routers,
280 cutting machines, robots and hexapods. It can control up to
9 axes or
281 joints of a CNC machine using G-code (RS-
274NGC) as input. It has
282 several GUIs suited to specific kinds of usage (touch screen,
283 interactive development)."
286 <p>It can even control
3D printers. And even though the Wikipedia
287 page indicate that it can only work with hard real time kernel
288 features, it can also work with the user space soft real time features
289 provided by the Debian kernel.
290 <a href=
"https://github.com/linuxcnc/linuxcnc">The source code
</a> is
291 available from Github. The last few months I've been involved in the
292 translation setup for the program and documentation. Translators are
294 <a href=
"https://hosted.weblate.org/engage/linuxcnc/">join the
295 effort
</a> using Weblate.
</p>
297 <p>As usual, if you use Bitcoin and want to show your support of my
298 activities, please send Bitcoin donations to my address
299 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
305 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
310 <div class=
"padding"></div>
314 <a href=
"https://people.skolelinux.org/pere/blog/Debian_still_an_excellent_choice_for_Lego_builders.html">Debian still an excellent choice for Lego builders
</a>
320 <p>The Debian Lego team saw a lot of activity the last few weeks. All
321 the packages under the team umbrella has been updated to fix
322 packaging, lintian issues and BTS reports. In addition, a new and
323 inspiring team member appeared on both the
324 <a href=
"https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-lego-team">debian-lego-team
325 Team mailing list
</a> and
326 <a href=
"irc://irc.debian.org/%23debian-lego">IRC channel
327 #debian-lego
</a>. If you are interested in Lego CAD design and LEGO
328 Mindstorms programming, check out the
329 <a href=
"http://wiki.debian.org/LegoDesigners">team wiki page
</a> to
330 see what Debian can offer the Lego enthusiast.
</p>
332 <p>Patches has been sent upstream, causing new upstream releases, one
333 even the first one in more than ten years, and old upstreams was
334 released with new ones. There are still a lot of work left, and the
335 team welcome more members to help us make sure Debian is the Linux
336 distribution of choice for Lego builders. If you want to contribute,
337 join us in the IRC channel and become part of
338 <a href=
"https://salsa.debian.org/debian-lego-team/">the team on
341 <p>As usual, if you use Bitcoin and want to show your support of my
342 activities, please send Bitcoin donations to my address
343 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
349 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/lego">lego
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
354 <div class=
"padding"></div>
358 <a href=
"https://people.skolelinux.org/pere/blog/The_space_rover_coquine__or_how_I_ended_up_on_the_dark_side_of_the_moon.html">The space rover coquine, or how I ended up on the dark side of the moon
</a>
364 <p>A while back a college and friend from Debian and the Skolelinux /
365 Debian Edu project approached me, asking if I knew someone that might
366 be interested in helping out with a technology project he was running
367 as a teacher at
<a href=
"https://www.ecolefrancodanoise.dk/">L'école
368 franco-danoise
</a> - the Danish-French school and kindergarden. The
369 kids were building robots, rovers. The story behind it is to build a
371 <a href=
"http://blog.ecolefrancodanoise.dk/first-week-on-the-dark-side">on
372 the dark side of the moon
</a>, and remote control it. As travel cost
373 was a bit high for the final destination, and they wanted to test the
374 concept first, he was looking for volunteers to host a rover for the
375 kids to control in a foreign country. I ended up volunteering as a
376 host, and last week the rover arrived. It took a while to arrive
377 after
<a href=
"http://blog.ecolefrancodanoise.dk/model-moms">it was
378 built and shipped
</a>, because of customs confusion. Luckily we were
379 able fix it quickly with help from my colleges at work.
</p>
381 <p>This is what it looked like when the rover arrived. Note the cute
382 eyes looking up on me from the wrapping
</p>
384 <img src=
"http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-esken-med-det-rare-i.jpeg" width=
"32%" style=
"clear:left"/>
385 <img src=
"http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-den-ser-meg.jpeg" width=
"32%" style=
"clear:left"/>
386 <img src=
"http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-en-skrue-loes.jpeg" width=
"32%" style=
"clear:left"/>
388 <p style=
"text-align:left">Once the robot arrived, we needed to track
389 down batteries and figure out how to build custom firmware for it with
390 the appropriate wifi settings. I asked a friend if I could get two
391 18650 batteries from his pile of Tesla batteries (he had them from the
392 wrack of a crashed Tesla), so now the rover is running on Tesla
396 <a href=
"https://gitlab.com/ecolefrancodanoise/arduino-efd/">the rover
397 firmware
</a> proved a bit harder, as the code did not work out of the
398 box with the Arduino IDE package in Debian Buster. I suspect this is
400 <a href=
"https://github.com/arduino/Arduino/pull/2703"> license problem
401 with arduino
</a> blocking Debian from upgrading to the latest version.
402 In the end we gave up debugging why the IDE failed to find the
403 required libraries, and ended up using the Arduino Makefile from the
404 <a href=
"https://tracker.debian.org/pkg/arduino-mk">arduino-mk Debian
405 package
</a> instead. Unfortunately the camera library is missing from
406 the Arduino environment in Debian, so we disabled the camera support
407 for the first firmware build, to get something up and running. With
408 this reduced firmware, the robot could be controlled via the
409 controller server, driving around and measuring distance using its
410 internal acoustic sensor.
</p>
412 <p>Next, With some help from my friend in Denmark, which checked in the
413 camera library into the gitlab repository for me to use, we were able
414 to build a new and more complete version of the firmware, and the
415 robot is now up and running. This is what the "commander" web page
416 look like after taking a measurement and a snapshot:
</p>
418 <img src=
"http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-commander.png" width=
"40%" border=
"1" align=
"center"/>
420 <p>If you want to learn more about this project, you can check out the
421 <a href=
"https://hackaday.io/project/164082-the-dark-side-challenge">The
422 Dark Side Challenge
</a> Hackaday web pages.
</p>
424 <p>As usual, if you use Bitcoin and want to show your support of my
425 activities, please send Bitcoin donations to my address
426 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
432 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
437 <div class=
"padding"></div>
441 <a href=
"https://people.skolelinux.org/pere/blog/Debian_now_got_everything_you_need_to_program_Micro_bit.html">Debian now got everything you need to program Micro:bit
</a>
447 <p>I am amazed and very pleased to discover that since a few days ago,
448 everything you need to program the
<a href=
"https://microbit.org/">BBC
449 micro:bit
</a> is available from the Debian archive. All this is
450 thanks to the hard work of Nick Morrott and the Debian python
451 packaging team. The micro:bit project recommend the mu-editor to
452 program the microcomputer, as this editor will take care of all the
453 machinery required to injekt/flash micropython alongside the program
454 into the micro:bit, as long as the pieces are available.
</p>
456 <p>There are three main pieces involved. The first to enter Debian
458 <a href=
"https://tracker.debian.org/pkg/python-uflash">python-uflash
</a>,
459 which was accepted into the archive
2019-
01-
12. The next one was
460 <a href=
"https://tracker.debian.org/pkg/mu-editor">mu-editor
</a>, which
461 showed up
2019-
01-
13. The final and hardest part to to into the
463 <a href=
"https://tracker.debian.org/pkg/firmware-microbit-micropython">firmware-microbit-micropython
</a>,
464 which needed to get its build system and dependencies into Debian
465 before it was accepted
2019-
01-
20. The last one is already in Debian
466 Unstable and should enter Debian Testing / Buster in three days. This
467 all allow any user of the micro:bit to get going by simply running
468 'apt install mu-editor' when using Testing or Unstable, and once
469 Buster is released as stable, all the users of Debian stable will be
472 <p>As a minor final touch, I added rules to
473 <a href=
"https://tracker.debian.org/pkg/isenkram">the isenkram
474 package
</a> for recognizing micro:bit and recommend the mu-editor
475 package. This make sure any user of the isenkram desktop daemon will
476 get a popup suggesting to install mu-editor then the USB cable from
477 the micro:bit is inserted for the first time.
</p>
479 <p>This should make it easier to have fun.
</p>
481 <p>As usual, if you use Bitcoin and want to show your support of my
482 activities, please send Bitcoin donations to my address
483 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
489 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
494 <div class=
"padding"></div>
498 <a href=
"https://people.skolelinux.org/pere/blog/My_own_self_balancing_Lego_Segway.html">My own self balancing Lego Segway
</a>
504 <p>A while back I received a Gyro sensor for the NXT
505 <a href=
"mindstorms.lego.com">Mindstorms
</a> controller as a birthday
506 present. It had been on my wishlist for a while, because I wanted to
507 build a Segway like balancing lego robot. I had already built
508 <a href=
"http://www.nxtprograms.com/NXT2/segway/">a simple balancing
509 robot
</a> with the kids, using the light/color sensor included in the
510 NXT kit as the balance sensor, but it was not working very well. It
511 could balance for a while, but was very sensitive to the light
512 condition in the room and the reflective properties of the surface and
513 would fall over after a short while. I wanted something more robust,
515 <a href=
"https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NGY1044">the
516 gyro sensor from HiTechnic
</a> I believed would solve it on my
517 wishlist for some years before it suddenly showed up as a gift from my
520 <p>Unfortunately I have not had time to sit down and play with it
521 since then. But that changed some days ago, when I was searching for
522 lego segway information and came across a recipe from HiTechnic for
524 <a href=
"http://www.hitechnic.com/blog/gyro-sensor/htway/">the
525 HTWay
</a>, a segway like balancing robot. Build instructions and
526 <a href=
"https://www.hitechnic.com/upload/786-HTWayC.nxc">source
527 code
</a> was included, so it was just a question of putting it all
528 together. And thanks to the great work of many Debian developers, the
529 compiler needed to build the source for the NXT is already included in
530 Debian, so I was read to go in less than an hour. The resulting robot
531 do not look very impressive in its simplicity:
</p>
533 <p align=
"center"><img width=
"70%" src=
"http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-robot.jpeg"></p>
535 <p>Because I lack the infrared sensor used to control the robot in the
536 design from HiTechnic, I had to comment out the last task
537 (taskControl). I simply placed /* and */ around it get the program
538 working without that sensor present. Now it balances just fine until
539 the battery status run low:
</p>
541 <p align=
"center"><video width=
"70%" controls=
"true">
542 <source src=
"http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-balancing.ogv" type=
"video/ogg">
545 <p>Now we would like to teach it how to follow a line and take remote
546 control instructions using the included Bluetooth receiver in the NXT.
</p>
548 <p>If you, like me, love LEGO and want to make sure we find the tools
549 they need to work with LEGO in Debian and all our derivative
550 distributions like Ubuntu, check out
551 <a href=
"http://wiki.debian.org/LegoDesigners">the LEGO designers
552 project page
</a> and join the Debian LEGO team. Personally I own a
553 RCX and NXT controller (no EV3), and would like to make sure the
554 Debian tools needed to program the systems I own work as they
561 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/lego">lego
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
566 <div class=
"padding"></div>
570 <a href=
"https://people.skolelinux.org/pere/blog/All_drones_should_be_radio_marked_with_what_they_do_and_who_they_belong_to.html">All drones should be radio marked with what they do and who they belong to
</a>
576 <p>Drones, flying robots, are getting more and more popular. The most
577 know ones are the killer drones used by some government to murder
578 people they do not like without giving them the chance of a fair
579 trial, but the technology have many good uses too, from mapping and
580 forest maintenance to photography and search and rescue. I am sure it
581 is just a question of time before "bad drones" are in the hands of
582 private enterprises and not only state criminals but petty criminals
583 too. The drone technology is very useful and very dangerous. To have
584 some control over the use of drones, I agree with Daniel Suarez in his
586 "
<a href=
"https://archive.org/details/DanielSuarez_2013G">The kill
587 decision shouldn't belong to a robot
</a>", where he suggested this
588 little gem to keep the good while limiting the bad use of drones:</p>
592 <p>Each robot and drone should have a cryptographically signed
593 I.D. burned in at the factory that can be used to track its movement
594 through public spaces. We have license plates on cars, tail numbers on
595 aircraft. This is no different. And every citizen should be able to
596 download an app that shows the population of drones and autonomous
597 vehicles moving through public spaces around them, both right now and
598 historically. And civic leaders should deploy sensors and civic drones
599 to detect rogue drones, and instead of sending killer drones of their
600 own up to shoot them down, they should notify humans to their
601 presence. And in certain very high-security areas, perhaps civic
602 drones would snare them and drag them off to a bomb disposal facility.</p>
604 <p>But notice, this is more an immune system than a weapons system. It
605 would allow us to avail ourselves of the use of autonomous vehicles
606 and drones while still preserving our open, civil society.</p>
610 <p>The key is that <em>every citizen</em> should be able to read the
611 radio beacons sent from the drones in the area, to be able to check
612 both the government and others use of drones. For such control to be
613 effective, everyone must be able to do it. What should such beacon
614 contain? At least formal owner, purpose, contact information and GPS
615 location. Probably also the origin and target position of the current
616 flight. And perhaps some registration number to be able to look up
617 the drone in a central database tracking their movement. Robots
618 should not have privacy. It is people who need privacy.</p>
624 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>, <a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet
">sikkerhet</a>, <a href="https://people.skolelinux.org/pere/blog/tags/surveillance
">surveillance</a>.
629 <div class="padding
"></div>
633 <a href="https://people.skolelinux.org/pere/blog/Perl_library_to_control_the_Spykee_robot_moved_to_github.html
">Perl library to control the Spykee robot moved to github</a>
639 <p>Back in 2010, I created a Perl library to talk to
640 <a href="http://en.wikipedia.org/wiki/Spykee
">the Spykee robot</a>
641 (with two belts, wifi, USB and Linux) and made it available from my
642 web page. Today I concluded that it should move to a site that is
643 easier to use to cooperate with others, and moved it to github. If
644 you got a Spykee robot, you might want to check out
645 <a href="https://github.com/petterreinholdtsen/libspykee-perl
">the
646 libspykee-perl github repository</a>.</p>
652 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/nuug
">nuug</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
657 <div class="padding
"></div>
661 <a href="https://people.skolelinux.org/pere/blog/Debian__the_Linux_distribution_of_choice_for_LEGO_designers_.html
">Debian, the Linux distribution of choice for LEGO designers?</a>
668 <a href="http://people.skolelinux.org/pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html
">I
669 announced a</a> new <a href="irc://irc.debian.org/%
23debian-lego
">IRC
670 channel #debian-lego</a>, for those of us in the Debian and Linux
671 community interested in <a href="http://www.lego.com/
">LEGO</a>, the
672 marvellous construction system from Denmark. We also created
673 <a href="http://wiki.debian.org/LegoDesigners
">a wiki page</a> to have
674 a place to take notes and write down our plans and hopes. And several
675 people showed up to help. I was very happy to see the effect of my
676 call. Since the small start, we have a debtags tag
677 <a href="http://debtags.debian.net/search/bytag?wl=hardware::hobby:lego
">hardware::hobby:lego</a>
678 tag for LEGO related packages, and now count 10 packages related to
679 LEGO and <a href="http://mindstorms.lego.com/
">Mindstorms</a>:</p>
682 <tr><td><a href="http://packages.qa.debian.org/brickos
">brickos</a></td><td>alternative OS for LEGO Mindstorms RCX. Supports development in C/C++</td></tr>
683 <tr><td><a href="http://packages.qa.debian.org/leocad
">leocad</a></td><td>virtual brick CAD software</td></tr>
684 <tr><td><a href="http://packages.qa.debian.org/libnxt
">libnxt</a></td><td>utility library for talking to the LEGO Mindstorms NX</td></tr>
685 <tr><td><a href="http://packages.qa.debian.org/lnpd
">lnpd</a></td><td>daemon for LNP communication with BrickOS</td></tr>
686 <tr><td><a href="http://packages.qa.debian.org/nbc
">nbc</a></td><td>compiler for LEGO Mindstorms NXT bricks</td></tr>
687 <tr><td><a href="http://packages.qa.debian.org/nqc
">nqc</a></td><td>Not Quite C compiler for LEGO Mindstorms RCX</td></tr>
688 <tr><td><a href="http://packages.qa.debian.org/python-nxt
">python-nxt</a></td><td>python driver/interface/wrapper for the Lego Mindstorms NXT robot</td></tr>
689 <tr><td><a href="http://packages.qa.debian.org/python-nxt-filer
">python-nxt-filer</a></td><td>simple GUI to manage files on a LEGO Mindstorms NXT</td></tr>
690 <tr><td><a href="http://packages.qa.debian.org/scratch
">scratch</a></td><td>easy to use programming environment for ages 8 and up</td></tr>
691 <tr><td><a href="http://packages.qa.debian.org/t2n
">t2n</a></td><td>simple command-line tool for Lego NXT</td></tr>
694 <p>Some of these are available in Wheezy, and all but one are
695 currently available in Jessie/testing. leocad is so far only
696 available in experimental.</p>
698 <p>If you care about LEGO in Debian, please join us on IRC and help
699 adding the rest of the great free software tools available on Linux
700 for LEGO designers.</p>
706 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian
">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/lego
">lego</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
711 <div class="padding
"></div>
715 <a href="https://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html
">Moved the pymissile Debian packaging to collab-maint</a>
721 <p>As part of my investigation on how to improve the support in Debian
722 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
723 Launcher and updated the Debian package
724 <a href="http://packages.qa.debian.org/pymissile
">pymissile</a> to make
725 sure udev will fix the device permissions when it is plugged in. I
726 also added a "Modaliases" header to test it in the Debian archive and
727 hopefully make the package be proposed by jockey in Ubuntu when a user
728 plug in his rocket launcher. In the process I moved the source to a
729 git repository under collab-maint, to make it easier for any DD to
730 contribute.
<a href=
"http://code.google.com/p/pymissile/">Upstream
</a>
731 is not very active, but the software still work for me even after five
732 years of relative silence. The new git repository is not listed in
733 the uploaded package yet, because I want to test the other changes a
734 bit more before I upload the new version. If you want to check out
735 the new version with a .desktop file included, visit the
736 <a href=
"http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git">gitweb
737 view
</a> or use "
<tt>git clone
738 git://anonscm.debian.org/collab-maint/pymissile.git
</tt>".</p>
744 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian
">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/isenkram
">isenkram</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
749 <div class="padding
"></div>
753 <a href="https://people.skolelinux.org/pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html
">New IRC channel for LEGO designers using Debian</a>
759 <p>During Christmas, I have worked a bit on the Debian support for
760 <a href="http://mindstorms.lego.com/en-us/Default.aspx
">LEGO Mindstorm
761 NXT</a>. My son and I have played a bit with my NXT set, and I
762 discovered I had to build all the tools myself because none were
763 already in Debian Squeeze. If Debian support for LEGO is something
764 you care about, please join me on the IRC channel
765 <a href="irc://irc.debian.org/%
23debian-lego
">#debian-lego</a> (server
766 irc.debian.org). There is a lot that could be done to improve the
767 Debian support for LEGO designers. For example both CAD software
768 and Mindstorm compilers are missing. :)</p>
770 <p>Update 2012-01-03: A
771 <a href="http://wiki.debian.org/LegoDesigners
">project page</a>
772 including links to Lego related packages is now available.</p>
778 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian
">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/lego
">lego</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
783 <div class="padding
"></div>
787 <a href="https://people.skolelinux.org/pere/blog/First_version_of_a_Perl_library_to_control_the_Spykee_robot.html
">First version of a Perl library to control the Spykee robot</a>
793 <p>This summer I got the chance to buy cheap Spykee robots, and since
794 then I have worked on getting Linux software in place to control them.
795 The firmware for the robot is available from the producer, and using
796 that source it was trivial to figure out the protocol specification.
797 I've started on a perl library to control it, and made some demo
798 programs using this perl library to allow one to control the
801 <p>The library is quite functional already, and capable of controlling
802 the driving, fetching video, uploading MP3s and play them. There are
803 a few less important features too.</p>
805 <p>Since a few weeks ago, I ran out of time to spend on this project,
806 but I never got around to releasing the current source. I decided
807 today that it was time to do something about it, and uploaded the
808 source to my Debian package store at people.skolelinux.org.</p>
810 <p>Because it was simpler for me, I made a Debian package and
811 published the source and deb. If you got a spykee robot, grab the
812 source or binary package:</p>
815 <li><a href="http://people.skolelinux.org/~pere/debian/packages/lenny/libspykee-perl_0.0
.20101009-
1.tar.gz
">libspykee-perl_0.0.20101009-1.tar.gz</a></li>
816 <li><a href="http://people.skolelinux.org/~pere/debian/packages/lenny/libspykee-perl_0.0
.20101009-
1.dsc
">libspykee-perl_0.0.20101009-1.dsc</a></li>
817 <li><a href="http://people.skolelinux.org/~pere/debian/packages/lenny/libspykee-perl_0.0
.20101009-
1_all.deb
">libspykee-perl_0.0.20101009-1_all.deb</a></li>
820 <p>If you are interested in helping out with developing this library,
821 please let me know.</p>
827 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/nuug
">nuug</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
832 <div class="padding
"></div>
836 <a href="https://people.skolelinux.org/pere/blog/My_first_perl_GUI_application___controlling_a_Spykee_robot.html
">My first perl GUI application - controlling a Spykee robot</a>
842 <p>This evening I made my first Perl GUI application. The last few
843 days I have worked on a Perl module for controlling my recently
844 aquired Spykee robots, and the module is now getting complete enought
845 that it is possible to use it to control the robot driving at least.
846 It was now time to figure out how to use it to create some GUI to
847 allow me to drive the robot around. I picked PerlQt as I have had
848 positive experiences with the Qt API before, and spent a few minutes
849 browsing the web for examples. Using Qt Designer seemed like a short
850 cut, so I ended up writing the perl GUI using Qt Designer and
851 compiling it into a perl program using the puic program from
852 libqt-perl. Nothing fancy yet, but it got buttons to connect and
855 <p>The perl module I have written provide a object oriented API for
856 controlling the robot. Here is an small example on how to use it:</p>
860 Spykee::discover(sub {$robot{$_[0]} = $_[1]});
861 my $host = (keys %robot)[0];
862 my $spykee = Spykee->new();
863 $spykee->contact($host, "admin", "admin");
875 <p>Thanks to the release of the source of the robot firmware, I could
876 peek into the implementation at the other end to figure out how to
877 implement the protocol used by the robot. I've implemented several of
878 the commands the robot understand, but is still missing the camera
879 support to make it possible to control the robot from remote. First I
880 want to implement support for uploading new firmware and configuring
881 the wireless network, to make it possible to bootstrap a Spykee robot
882 without the producers Windows and MacOSX software (I only have Linux,
883 so I had to ask a friend to come over to get the robot testing
886 <p>Will release the source to the public soon, but need to figure out
887 where to make it available first. I will add a link to
888 <a href=
"http://wiki.nuug.no/grupper/robot/">the NUUG wiki
</a> for
889 those that want to check back later to find it.
</p>
895 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/nuug">nuug
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
900 <div class=
"padding"></div>
904 <a href=
"https://people.skolelinux.org/pere/blog/Robot__reis_deg___.html">Robot, reis deg...
</a>
910 <p>I dag fikk jeg endelig tittet litt på mine nyinnkjøpte roboter, og
911 har brukt noen timer til å google etter interessante referanser og
912 aktuell kildekode for bruk på Linux. Det mest lovende så langt er
913 <a href=
"http://ispykee.toyz.org/">ispykee
</a>, som har en
914 BSD-lisensiert linux-daemon som står som mellomledd mellom roboter på
915 lokalnettet og en sentral tjeneste der en iPhone kan koble seg opp for
916 å fjernstyre roboten. Linux-daemonen implementerer deler av
917 protokollen som roboten forstår. Etter å ha knotet litt med å oppnå
918 kontakt med roboten (den oppretter et eget ad-hoc wifi-nett, så jeg
919 måtte gå av mitt vanlige nett for å få kontakt), og kommet frem til at
920 den lytter på IP-port
9000 og
9001, gikk jeg i gang med å finne ut
921 hvordan jeg kunne snakke med roboten vha. disse portene. Robotbiten
922 av protokollen er publisert av produsenten med GPL-lisens, slik at det
923 er mulig å se hvordan protokollen fungerer. Det finnes en java-klient
924 for Android som så ganske snasen ut, men fant ingen kildekode for
925 denne. Derimot hadde iphone-løsningen kildekode, så jeg tok
926 utgangspunkt i den.
</p>
928 <p>Daemonen ville i utgangspunktet forsøke å kontakte den sentrale
929 tjenesten som iphone-programmet kobler seg til. Jeg skrev dette om
930 til i stedet å sette opp en nettverkstjeneste på min lokale maskin,
931 som jeg kan koble meg opp til med telnet og gi kommandoer til roboten
932 (act, forward, right, left, etc). Det involverte i praksis å bytte ut
933 socket()/connect() med socket()/bind()/listen()/accept() for å gjøre
934 klienten om til en tjener.
</p>
936 <p>Mens jeg har forsøkt å få roboten til å bevege seg har min samboer
937 skrudd sammen resten av roboten for å få montert kamera og plastpynten
938 (armer, plastfiber for lys). NÃ¥ er det hele montert, og roboten er
939 klar til bruk. Må få flyttet den over til mitt vanlige trådløsnett
940 før det blir praktisk, men de bitene av protokollen er ikke
941 implementert i ispykee-daemonen, så der må jeg enten få tak i en mac
942 eller en windows-maskin, eller implementere det selv.
</p>
944 <p>Vi var tre som kjøpte slike roboter, og vi har blitt enige om å
945 samle notater og referanser på
<a
946 href=
"http://wiki.nuug.no/grupper/robot/">NUUGs wiki
</a>. Ta en titt
947 der hvis du er nysgjerrig.
</p>
953 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/nuug">nuug
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
958 <div class=
"padding"></div>
962 <a href=
"https://people.skolelinux.org/pere/blog/2_Spykee_roboter_i_hus__n__skal_det_lekes.html">2 Spykee-roboter i hus, nå skal det lekes
</a>
968 <p>Jeg kjøpte nettopp to
969 <a href=
"http://www.spykee-robot.com/">Spykee
</a>-roboter, for test og
970 leking. Kjøpte to da det var så billige, og gir meg mulighet til å
971 eksperimentere uten å være veldig redd for å ødelegge alt ved å bytte
972 ut firmware og slikt. Oppdaget at lekebutikken på Bryn senter hadde
973 en liten stabel på lager som de ikke hadde klart å selge ut etter
974 fjorårets juleinnkjøp, og var villig til å selge for en femtedel av
975 vanlig pris. Jeg, Ronny og Jarle har skaffet oss restbeholdningen, og
976 det blir morsomt å se hva vi får ut av dette.
</p>
978 <p>Roboten har belter styrt av to motorer, kamera, høytaler, mikrofon
979 og wifi-tilkobling. Det hele styrt av en GPL-lisensiert databoks som
980 jeg mistenker kjører linux. Firmware-kildekoden ble visst publisert i
981 mai. Eneste utfordringen er at kontroller-programvaren kun finnes til
982 Windows, men det må en kunne jobbe seg rundt når vi har kildekoden til
986 <li><a href=
"http://en.wikipedia.org/wiki/Spykee">Wikipedia-oppføring
</a></li>
987 <li><a href=
"http://www.spykeeworld.com/spykee/US/freeSoftware.html">Nedlasting av firmware-kilden
</a></li>
988 <li><a href=
"http://wiki.nuug.no/grupper/robot">prosjektwiki hos NUUG
</a></li>
995 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/nuug">nuug
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot
</a>.
1000 <div class=
"padding"></div>
1002 <p style=
"text-align: right;"><a href=
"robot.rss"><img src=
"https://people.skolelinux.org/pere/blog/xml.gif" alt=
"RSS Feed" width=
"36" height=
"14" /></a></p>
1013 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/02/">February (
1)
</a></li>
1015 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/03/">March (
3)
</a></li>
1017 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/04/">April (
2)
</a></li>
1019 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/06/">June (
2)
</a></li>
1021 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/07/">July (
1)
</a></li>
1023 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/09/">September (
1)
</a></li>
1025 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/10/">October (
1)
</a></li>
1032 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/01/">January (
2)
</a></li>
1034 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/02/">February (
1)
</a></li>
1036 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/05/">May (
1)
</a></li>
1038 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/06/">June (
1)
</a></li>
1040 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/07/">July (
3)
</a></li>
1042 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/08/">August (
1)
</a></li>
1044 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/09/">September (
1)
</a></li>
1046 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/10/">October (
1)
</a></li>
1048 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/12/">December (
1)
</a></li>
1055 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/02/">February (
2)
</a></li>
1057 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/03/">March (
2)
</a></li>
1059 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/04/">April (
2)
</a></li>
1061 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/05/">May (
3)
</a></li>
1063 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/06/">June (
2)
</a></li>
1065 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/07/">July (
1)
</a></li>
1067 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/09/">September (
1)
</a></li>
1069 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/10/">October (
1)
</a></li>
1071 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/11/">November (
1)
</a></li>
1078 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/01/">January (
4)
</a></li>
1080 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/02/">February (
3)
</a></li>
1082 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/03/">March (
3)
</a></li>
1084 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/05/">May (
2)
</a></li>
1086 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/06/">June (
5)
</a></li>
1088 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/07/">July (
2)
</a></li>
1090 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/08/">August (
1)
</a></li>
1092 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/09/">September (
1)
</a></li>
1094 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/11/">November (
1)
</a></li>
1096 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/12/">December (
4)
</a></li>
1103 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/01/">January (
1)
</a></li>
1105 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/02/">February (
5)
</a></li>
1107 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/03/">March (
5)
</a></li>
1109 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/04/">April (
3)
</a></li>
1111 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/06/">June (
2)
</a></li>
1113 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/07/">July (
5)
</a></li>
1115 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/08/">August (
3)
</a></li>
1117 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/09/">September (
3)
</a></li>
1119 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/10/">October (
5)
</a></li>
1121 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/11/">November (
2)
</a></li>
1123 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/12/">December (
4)
</a></li>
1130 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/01/">January (
4)
</a></li>
1132 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/02/">February (
3)
</a></li>
1134 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/03/">March (
5)
</a></li>
1136 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/04/">April (
2)
</a></li>
1138 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/06/">June (
5)
</a></li>
1140 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/07/">July (
1)
</a></li>
1142 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/08/">August (
1)
</a></li>
1144 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/09/">September (
3)
</a></li>
1146 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/10/">October (
5)
</a></li>
1148 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/11/">November (
3)
</a></li>
1150 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/12/">December (
4)
</a></li>
1157 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/01/">January (
3)
</a></li>
1159 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/02/">February (
2)
</a></li>
1161 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/03/">March (
3)
</a></li>
1163 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/04/">April (
8)
</a></li>
1165 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/05/">May (
8)
</a></li>
1167 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/06/">June (
2)
</a></li>
1169 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/07/">July (
2)
</a></li>
1171 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/08/">August (
5)
</a></li>
1173 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/09/">September (
2)
</a></li>
1175 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/10/">October (
3)
</a></li>
1177 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/11/">November (
8)
</a></li>
1179 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/12/">December (
5)
</a></li>
1186 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/01/">January (
7)
</a></li>
1188 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/02/">February (
6)
</a></li>
1190 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/03/">March (
1)
</a></li>
1192 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/04/">April (
4)
</a></li>
1194 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/05/">May (
3)
</a></li>
1196 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/06/">June (
4)
</a></li>
1198 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/07/">July (
6)
</a></li>
1200 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/08/">August (
2)
</a></li>
1202 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/09/">September (
2)
</a></li>
1204 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/10/">October (
9)
</a></li>
1206 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/11/">November (
6)
</a></li>
1208 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/12/">December (
3)
</a></li>
1215 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/01/">January (
2)
</a></li>
1217 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/02/">February (
3)
</a></li>
1219 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/03/">March (
8)
</a></li>
1221 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/04/">April (
7)
</a></li>
1223 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/05/">May (
1)
</a></li>
1225 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/06/">June (
2)
</a></li>
1227 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/07/">July (
2)
</a></li>
1229 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/08/">August (
2)
</a></li>
1231 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/09/">September (
5)
</a></li>
1233 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/10/">October (
6)
</a></li>
1235 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/11/">November (
3)
</a></li>
1237 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/12/">December (
5)
</a></li>
1244 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/01/">January (
11)
</a></li>
1246 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/02/">February (
9)
</a></li>
1248 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/03/">March (
9)
</a></li>
1250 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/04/">April (
6)
</a></li>
1252 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/05/">May (
9)
</a></li>
1254 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/06/">June (
10)
</a></li>
1256 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/07/">July (
7)
</a></li>
1258 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/08/">August (
3)
</a></li>
1260 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/09/">September (
5)
</a></li>
1262 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/10/">October (
7)
</a></li>
1264 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/11/">November (
9)
</a></li>
1266 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/12/">December (
3)
</a></li>
1273 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/01/">January (
7)
</a></li>
1275 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/02/">February (
10)
</a></li>
1277 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/03/">March (
17)
</a></li>
1279 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/04/">April (
12)
</a></li>
1281 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/05/">May (
12)
</a></li>
1283 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/06/">June (
20)
</a></li>
1285 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/07/">July (
17)
</a></li>
1287 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/08/">August (
6)
</a></li>
1289 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/09/">September (
9)
</a></li>
1291 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/10/">October (
17)
</a></li>
1293 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/11/">November (
10)
</a></li>
1295 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/12/">December (
7)
</a></li>
1302 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/01/">January (
16)
</a></li>
1304 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/02/">February (
6)
</a></li>
1306 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/03/">March (
6)
</a></li>
1308 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/04/">April (
7)
</a></li>
1310 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/05/">May (
3)
</a></li>
1312 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/06/">June (
2)
</a></li>
1314 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/07/">July (
7)
</a></li>
1316 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/08/">August (
6)
</a></li>
1318 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/09/">September (
4)
</a></li>
1320 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/10/">October (
2)
</a></li>
1322 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/11/">November (
3)
</a></li>
1324 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/12/">December (
1)
</a></li>
1331 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li>
1333 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li>
1335 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li>
1337 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li>
1339 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li>
1341 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li>
1343 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li>
1345 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li>
1347 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li>
1349 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li>
1351 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/11/">November (
13)
</a></li>
1353 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/12/">December (
12)
</a></li>
1360 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li>
1362 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li>
1364 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li>
1366 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li>
1368 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li>
1370 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li>
1372 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li>
1374 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li>
1376 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li>
1378 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li>
1380 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li>
1382 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li>
1389 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li>
1391 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li>
1402 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
19)
</a></li>
1404 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li>
1406 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li>
1408 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bankid">bankid (
4)
</a></li>
1410 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (
9)
</a></li>
1412 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (
12)
</a></li>
1414 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
17)
</a></li>
1416 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bsa">bsa (
2)
</a></li>
1418 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (
2)
</a></li>
1420 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian (
183)
</a></li>
1422 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
159)
</a></li>
1424 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (
9)
</a></li>
1426 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/digistan">digistan (
11)
</a></li>
1428 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/dld">dld (
18)
</a></li>
1430 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/docbook">docbook (
30)
</a></li>
1432 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
1434 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/english">english (
439)
</a></li>
1436 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
1438 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
14)
</a></li>
1440 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (
34)
</a></li>
1442 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (
9)
</a></li>
1444 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (
20)
</a></li>
1446 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/h264">h264 (
20)
</a></li>
1448 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/intervju">intervju (
43)
</a></li>
1450 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (
16)
</a></li>
1452 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/kart">kart (
23)
</a></li>
1454 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/kodi">kodi (
4)
</a></li>
1456 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ldap">ldap (
9)
</a></li>
1458 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lego">lego (
5)
</a></li>
1460 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lenker">lenker (
8)
</a></li>
1462 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
1464 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li>
1466 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (
3)
</a></li>
1468 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (
8)
</a></li>
1470 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
43)
</a></li>
1472 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (
13)
</a></li>
1474 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (
23)
</a></li>
1476 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk (
320)
</a></li>
1478 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/nuug">nuug (
198)
</a></li>
1480 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (
40)
</a></li>
1482 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/open311">open311 (
2)
</a></li>
1484 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
75)
</a></li>
1486 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/personvern">personvern (
114)
</a></li>
1488 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/raid">raid (
2)
</a></li>
1490 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/reactos">reactos (
1)
</a></li>
1492 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/reprap">reprap (
11)
</a></li>
1494 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/rfid">rfid (
3)
</a></li>
1496 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot (
16)
</a></li>
1498 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li>
1500 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ruter">ruter (
7)
</a></li>
1502 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
1504 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
59)
</a></li>
1506 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
1508 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (
5)
</a></li>
1510 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/standard">standard (
73)
</a></li>
1512 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
7)
</a></li>
1514 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (
14)
</a></li>
1516 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (
63)
</a></li>
1518 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (
5)
</a></li>
1520 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/usenix">usenix (
2)
</a></li>
1522 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/valg">valg (
9)
</a></li>
1524 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (
20)
</a></li>
1526 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/video">video (
77)
</a></li>
1528 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
1530 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/web">web (
42)
</a></li>
1536 <p style=
"text-align: right">
1537 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>