On Thu, Jan 31, 2013 at 6:55 AM, Adolfo Rodríguez Tsouroukdissian <
adolfo.rodriguez@pal-robotics.com> wrote:
> All,
>
> I'd like to bring up the subject of having controllers running at lower
> rates than the controller_manager. I can think of two possible solutions:
>
> 1. Frequency divider:
> - Individual controller configurations can specify an optional parameter
> that states the desired frequency, or that work should be done only '1 out
> of n' manager cycles.
> - Pros: Easy to implement. It is specific to a particular controller
> implementation, hence does not need to be part of the controller_manager
> library. See [1] for an example.
> - Cons: Desired controller update period is subject to an error of up to
> one controller manager control period.
>
> 2. Individual/grouped controller updating:
> - The controller manager allows the option of updating single controllers,
> or groups of them. Triggering these updates is not handled by the manager.
> - Pros: Desired controller update period is unaffected by the controller
> manager's update period.
> - Cons: This solution requires significant changes to the existing
> controller_manager codebase:
> - Extending the API to allow not only batch update()s, but also updates
> to a subset of the running controllers. Resolving which controllers to
> update should be a constant-time operation.
> - Add protection against concurrent access to data (eg. simultaneous
> read() and update()), possibly with lock-free data structures.
> - Because of the above point, the chosen concurrency handling mechanism
> might render reusing the existing standard hardware interfaces impossible
> (lock-free structures usually expose data through accessors, not raw
> pointers).
>
> At the moment I'm leaning towards the frequency divider as it is
> sufficient for our use cases. I wonder if someone has a use case that does
> not fit well with this approach.
>
> [1]
> https://github.com/willowgarage/ros_controllers/blob/master/joint_state_controller/src/joint_state_controller.cpp#L78
So this also seems like it's a decision between serial (1) or parallel (2)
computation of different components of the final output signal. Is that
correct?
On Fri, Feb 1, 2013 at 3:48 AM, Carles Lopez <
carles.lopez@pal-robotics.com>
wrote:
> My two cents: maybe allowing single controllers to return the expected
> time they want to be updated given their own internal state. With this
> information control manager will adapt its own rate depending on the
> earliest deadline of the controllers it manages.
>
I like this bottom-up strategy, since it would also help debug
timing-related problems since the system will know at what rates each
components needs to run.
-j
--
Jonathan Bohren
PhD Student
Dynamical Systems and Control Laboratory
Laboratory for Computational Sensing and Robotics
The Johns Hopkins University
(707) 520-4736
jbo@jhu.edu