[ros-users] [Orocos-users] Joint controller manager

Jonathan Bohren jonathan.bohren at gmail.com
Fri Feb 1 17:08:13 UTC 2013


On Thu, Jan 31, 2013 at 6:55 AM, Adolfo Rodríguez Tsouroukdissian <
adolfo.rodriguez at 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 at 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 at jhu.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osuosl.org/pipermail/ros-users/attachments/20130201/0d62a0cc/attachment-0003.html>


More information about the ros-users mailing list