From: brian g. <bg...@po...> - 2002-09-08 19:50:15
|
hi all, first of all, big thanks to John and company at UMass for contributing their K-Team drivers and for making the build more modular. i hadn't maintained support for leaving each driver out at compile-time because it's so damned tedious, but it's not so tedious when someone else does it! i've just had a run through the server and C++ client code; here are the highlights: - I've unified device interfaces. For example, we now have neither a "REB_power" interface nor an "RWI_power" interface nor a "P2OS_power" interface. Rather, we have a single "power" interface, and 3 different drivers that support it. As a consequence, there are no "REB_POWER_CODE" or related macros. All client-side device interaction is by generic interface. - As a corollary, various driver-specific ioctl()s have had their names changed (and often their values reassigned) in order to become part of the generic interface. For example, the "position" interface now includes a half-dozen or so extra ioctl()s that are currently only supported by the "reb_position" driver. That's fine; in general a driver will only support a subset of an interface's ioctl()s. - As a second corollary, i've condensed the C++ client proxies according to interface. There is no longer an "REBPositionProxy" class nor an "RWIPositionProxy" class, but rather a single "PositionProxy" class that can interact with any "position" device and that includes methods to invoke all the relevant ioctl()s. I made some judgement calls in condensing the proxies, and i may have axed your favorite method along the way. If so, feel free to add it back. Your C++ client code will have to change a bit, but not too much, in order to use the generic proxies instead of the specific ones. This may be a little tedious now, but in the long-term, it's very cool, because a Player client program that uses the "PositionProxy," for example, can transparently control *any* position device, regardless of the underlying driver in use. btw, every ClientProxy object now has a public field "driver_name" with the string name of the driver in use. - There's a new interface, called "ir", for infra-red arrays. It's much like "sonar", but its data contains an auxillary array of voltages in addition to ranges, so i left it separate. - The WiFi driver is built by default. - For position drivers that want to do position (instead of speed) control, the position command packet includes full (planar) 3-DOF state, so the 'xpos' and 'ypos' fields can be used, instead of overloading the speed fields. - The C++ client test suite is becoming a bit outdated. If you find it useful, please add code to make it better, especially driver-specific tests of ioctl()s. - I've added a "umass_reb.cfg" file to ./config. It should more or less work for people there; feel free to modify/fix it. - The RWI drivers need a bit of work, including changes to support the new "bumper" interface. ok, now i *really* have to finish my ICRA paper. brian. |