I'm developing an OS (provisional name: Hermes) and it's intended to be used to run robots. My first robot will be a simple one, just drive around and turn around when in front of something;D
But anyway, has anyone done this before? I heard that QNX could be somehow used for this purpose (it's used on the Hubble), but it's closed-source... :-\
Deving an OS that will only on robots frees me from the tentation of osdeving like James T. Klik
...
Here is my design:
- Modular hybrid kernel
- Full virtual memory
- Multitasking/Multithreading
- Later release: Multiprocessor (SMP & NUMA)
This isn't anything special, I guess most of you here have a similar design ;D
However, I want the robots running my OS to communicate in order to realize tasks in teams (like pushing a block too havy for only one of them). Apart from that, I want the robots to donate their idle time to other robots that have some difficult calculations to do.
I also want an AI server in my microkernel at later releases. This server would implement certain AI techniques and provide them to the robot's controller.
The robot's controller is the key part of my OS. I'm not sure whether to run it inside the kernel or as a server. But anyway, this controller would be similar to an extended device manager. There will be two device managers. One at a low-level, which all devices are registered with and that just starts them as a server/module for the microkernel. Then, the controller is started and loads an XML (can also be something else, I haven't come to this part of my OS) file in order to program it's behaviour. (What is it expected to do on which events, etc.). Thus, the controller is re-usable. Then, the controller asks the low-level device manager for the needed device drivers and puts them at different priority levels: For example, a robot has the task to get to a given point (a given GPS coordinate or something similar), but the task of walking and avoiding to walk into objects will always be at a higher priority, as it is fundamental for the robot. Like this, a robot can also be given different tasks to be executed simultaneously, but with a different priority each. This is going to be implemented like this: An event coming from a B-level device or program will be ignored if the driver is processing an event/interrupt coming from an A-level device. BTW, I'm talking of real devices, but I'm also envisioning some kind of virtual devices needed to program the robot's behaviour. These virtual devices could also be wrappers around two or three other devices needed to do the same task. A physical device can also be mapped in different virtual devices, thus also obeying first the high-level drivers.
Right now, I've got my basic kernel, but in order to actually make a /robot/, I need devices, minimally an engine to move it and a contact sensor... Has anyone done this before?
Candamir/Robin