roboticslab-uc3m / yarp-devices

A place for YARP devices
https://robots.uc3m.es/yarp-devices/
9 stars 7 forks source link

Make custom iPOS configuration more GUI-friendly #260

Closed PeterBowman closed 1 year ago

PeterBowman commented 3 years ago

We have implemented ip mode (pt/pvt) in https://github.com/roboticslab-uc3m/yarp-devices/issues/245 using a rather convolute configuration mechanism detailed at CanBusControlboard/README.md. It exploits the yarp::dev::IRemoteVariables interface for that matter, unlocking the so-called "God mode" (Pattacini, 2015; https://github.com/robotology/yarp/issues/499#issuecomment-111071696) in CanBusControlboard and TechnosoftIpos.

This mechanism was designed so that low-level device configuration is exposed via API and RPC. However, the yarpmotorgui app has built-in support for this interface and I'd like to exploit it as well for ease of use. It is possible to access those "remote variables" through the "PID" button, which opens a new dialog, then switch to the "Internal Variables" tab:

Screenshot from 2021-05-08 12-28-19

Screenshot from 2021-05-08 12-29-28

For reference, check how these variables are exposed by the controlboard Gazebo plugin.

Although ip mode is specific to the iPOS and, therefore, to the real robot, we can actually test this code despite not having access to the hardware. Commit https://github.com/roboticslab-uc3m/yarp-devices/commit/53f005a5e2fa75ef4bc050e70db9c59bbd5a8dda allowed CAN subdevices (TechnosoftIpos, CuiAbsolute...) to connect to a fake bus node (CanBusFake). A minor tweak was necessary to run launchCanBus locally.

PeterBowman commented 1 year ago

Done at https://github.com/roboticslab-uc3m/yarp-devices/commit/9befc98147969efd6e6d08fce49d5a91ef17aa7a. Note the format has slightly changed, it has been documented in the README. There is an additional nesting that I'd rather have avoided, but sadly it is required by the control board remapper. Conversely, I have removed some nesting from the iPOS parameter set; the old layout had some advantages (e.g. it didn't store period and mode in separate variables, and performed PT initialization at once), but ultimately I was more keen on the new layout.

Also, in the context of this issue a bug was fixed in YARP 3.7 regarding a check for the IRemoteVariables interface in the control board NWS: https://github.com/robotology/yarp/pull/2935.