I've been working for 5D Robotics for almost a year and a half now. Early on, a large part of what I did was write drivers for various USB, serial, and Ethernet peripherals that we'd plug into our system.
That led to a realization. The robots that we controlled using our Behavior ENgine were nothing more than peripherals themselves. They plugged into the computer using the same USB, serial, or Ethernet systems as any other peripheral, and I had to write a driver for them just like any other plug-n-play device.
That realization sculpted how I designed the Behavior ENgine. Rather than having everything centered around a robot, I designed the Behavior ENgine so a robot was nothing more than an additional peripheral. Designing it that way has had a couple benefits.
One, there is nothing special I have to do when I integrate our Behavior ENgine with additional robots. I simply have to write an additional driver for the device. That makes our Behavior ENgine highly portable between robots, if you want to view it from the robot's frame of reference. It also makes our code clean and easy to maintain, since everything robot-centric is pushed down inside a driver instead of in the core of the Behavior ENgine.
Two, it makes the robot unnecessary. This was a benefit I didn't anticipate, since I never anticipated using our robot-controlling software without a robot. However, it turns out that the computer is useful even without a robot attached. For example, the computer could have other sensors plugged in, e.g. chemical or radiation sensors. Since the robot is unnecessary, the user can pull the computer off the robot and walk around with just the computer and sensors, reaching places the robot can't get to or even leaving the sensors at a position to monitor the area.