[Rock-dev] Proposal for adding velocity information in base::actuators::Status
Leif Christensen
leif.christensen at dfki.de
Fri Apr 6 01:15:22 CEST 2012
On 05.04.2012 14:23, Sylvain Joyeux wrote:
> On 04/05/2012 02:11 PM, Javier Hidalgo Carrió wrote:
>> Velocity can be derivate from position, but we would get bigger error in
>> velocity if we do it a rock level.
>> FPGAs in each joint computes the velocity using the encoder (position)
>> information at much faster frequency.
>> The derivation step is smaller at the FPGA. Monster reports this
>> information only every 40 ms.
>>
>> I would say is better to use the velocity coming from the joint/FPGA
> Well. Depends what you call "velocity" here (and this is the underlying
> reason why we need to have a much broader discussion here).
>
> If it is instantaneous velocity at the time where the status is
> generated, then you are right, but it is going to be (1) a very
> quantified and noisy value since it is highly dependent on the precision
> of your encoder and of the sampling time of your FPGA and (2) would not
> give you the big picture about what your system does (since you have
> this instantaneous velocity only once every 40ms).
>
> If it is average velocity over the 40ms, then there is no difference
> between the two methods.
>
> I do not want appear to say that your use case is useless, I want to
> point out that we will need to have a richer representation anyways if
> we want to support every use case.
+1 for broader discussion, since also for the FPGA/BLDC-guys, the
discussion concerning joint position/velocity/acceleration/jerk(jolt) is
far from settled.
In most (!all) setups using the BLDC V2 stack we have some sort of
internal encoder (magnetic or optical, 2 to 6 channel) attached to the
motor shaft, for example a Faulhaber IE2-512 and some sort of external
(often absolute) encoder (sometimes ICHouse) on the driven side. In both
cases, we have a (relative or absolute) position sensor.
But depending on the FPGA-Code in use (I would say this varies from
project to project) the information is used differently. Just to name a
few options for the relative position encoders:
a) Count ticks over fixed time interval
b) Measure time from on tick to another
c) Count n ticks and measure time
d) Mix any of a, b and c to get a reasonable trade off between noise,
frequency, discretization error depending on the ticks per rotation of
your encoder
e) Use the 2 channels of a quadratur-encoder not only to determine turn
direction and for the sake of robustness, but for example measure time
between raising edge channel one and falling edge channel two
f) combine e) with a), b), c) or d) ...
g) Vary time interval, tick amount
h) ...
We also have crazy stuff on the BLDC like microphones, which could
theoretically be used to "measure" (after learning) torque, speed, or
deviations from normal conditions.
Someone might try to use the current measurements plus a motor model to
determine speed if they know the torque form force-torque sensors.
To sum up, there is a wide range of sensors and implementations on the
BLDC stacks of different quality and also combinations of them, perhaps
already with real sensor fusion underneath.
I think there is a main decision to be made (perhaps has already been
made?): Is base::actuators:Status intended as a simple least common
denominator and therefor can and should be happily extended for most use
cases, or are we trying to design it to fit as much use cases as possible?
Happy Easter!
Leif
More information about the Rock-dev
mailing list