AcutronicRobotics / HRIM

An information model for robot hardware. Facilitates interoperability across modules from different robot manufacturers. Built around ROS 2.0
https://acutronicrobotics.com/technology/hrim/
Apache License 2.0
66 stars 22 forks source link

Torque sensor #11

Open izamalloa opened 6 years ago

izamalloa commented 6 years ago

Torque sensors messages have to be modified:

vmayoral commented 6 years ago

Thanks for raising this issue @izamalloa. @ahcorde, you've compiled the driver so your input is probably very helpful here.

ibaiape commented 6 years ago

After some input from @rkojcev:

Initial research on force sensors shows more variety, having found sensors measuring 1, 2, or all 3 axes. Not only that but the single-axis measurement could be any one of them (to measure pressure on the shaft end to end with Z, or bending force with X/Y), the same with the 2 axis ones.

Taking this into account I'd suggest the following system, with explanations on each below the list:

Torque: As this information would be related to either a motor or a servomotor, they would publish it themselves (similar to the servomotor's temperature) instead of the torque sensor on it's own topic.

Force: This information would also be relative to another component, either an end-effector, a robot base, or a motor/servomotor. Passing all 3 axes is done for simplicity, both in usage (user/developer accesing the information by name, not taking into account what axes the sensor measures) and design (all force sensors send the same msg instead of having one msg&topic for it for each possible combination, like: X, X&Y, X&Z, Y...).

The idea behind this, using an example: I need to change force sensor A from my motor, which I exchange for force sensor B. A measures just the Z axis, while B measures all 3 axes.

To me, this is closer to HRIM’s approach. This would also mean that different capabilities don’t force you to change any part of the process, which would, as an extra, provide some freedom on the search of possible replacements. It could also facilitate improvements, as you would be able to take into account extra information without changing the topics/msg files.

Extendable later on with more specific messages if the need arises, you’d still need the complete one anyways.

Force&Torque:

Why not separate force & torque (have a topic for all force info and another for all torque):

  1. Because the torque sensor would only communicate a single axis instead of 3, so it’d already need a separate torque specific message that would only be used by F&T sensors.

  2. Because I strongly believe (keep in mind my lack of experience on the field) that separating related data in safety critical information is a mistake, as it’d add lag on the processing of that information (controller would have to take some time, even if minuscule, to correlate the readings). I might be overthinking this, or wrongly assuming it’d take longer than it really would, but I believe safety critical data communication must focus on transfer speed and data integrity. (I have some experience on this front working on the autopilot, which used multiple sensors for stabilization)

As with the force sensor, you’ll still need the complete message (most common one too), more specific messages could be added if the need arises.

ADDENDUM

I conceptually dislike passing null values in readings (not so much in specs for example), as it feels that the focus on those topics should be to pass the needed information in the smallest and most consistent way possible. However, I do believe that if we don’t contemplate passing null values in some instances the complexity will exponentially go up on harder to standardize components.

Plus, it’s a common thing to pass null values in some instances. For example when passing a new goal for a motor without modifying the current effort, you’d pass a NaN value for the effort.