Hi all,
I have a manipulator with a custom controller which comes with an usual interface: at 1kHz I can command an effort AND stiffness value to every joint. So, my command consists of 2 doubles for every joint. That seems to be beyond the scope of the joint-command-interfaces provided in ros-controls. Do I see this correctly? If yes, how would you expose this interface to the hardware manager?
Obviously, I introduce the constraint of wanting to reuse as many of the existing controllers as possible. Meaning: I definitely want to have the joint-state-publisher. Using all the effort controllers (with a default stiffness value maybe provided as a parameter) would be outstanding!
Initial brainstorming led me to two alternatives:
1) Creating a new type of JointHandle which supports 2 doubles. However, I doubt that any of the plugins would still work in this case.
2) Exposing the effort command as an EffortCommandInterface, and the stiffness command as a PositionCommandInterface. For this scenario: Is it possible to write a controller plugin which fills both command interfaces with values received in a ROS message?
Looking forward to your suggestions!
Cheers,
Georg.
--
You received this message because you are subscribed to the Google Groups "ROS/Orocos Robot Control Special Interest Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-robot-co...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
>>> ros-sig-robot-control+unsub...@googlegroups.com. For more
>>> options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>
Hi Adolfo,
would this work?
1.) Create new class JointStiffnessInterface with basically only
setStiffness and getStiffness, no inheritance.
2.) Create new class JointImpedanceCommandInterface which publicly
inherits from JointCommandInterface and JointStiffnessInterface.
3.) Create new classes
Effort/Velocity/PositionImpedanceCommandInterface as aliases from
JointImpedanceCommandInterface.
Then I can still load the existing controllers on this and write a
custom control specifically for my EffortImpedancCommandInterface.
Cheers,
Georg.
On 03/12/2015 07:22 PM, Georg Bartels wrote:
> Hi Adolfo,
>
> thank you for your quick response! I want to expose the effort and
> stiffness interfaces such that I can
>
> 1) re-use the joint-state-controller
>
> 2) use the existing effort-controllers to drive only the effort
> and use a default value for stiffness
>>>>> more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>>
>>>
>>
>> -- You received this message because you are subscribed to the
>> Google Groups "ROS/Orocos Robot Control Special Interest Group"
>> group. To unsubscribe from this group and stop receiving emails
>> from it, send an email to
>> ros-sig-robot-control+unsub...@googlegroups.com. For more
>> options, visit https://groups.google.com/d/optout.
>>
>
>
>
Hi Adolfo,
after some roaming in the existing interfaces I decided to copy the
design of the JointCommandInterface and expose my hardware like this
interface:
https://github.com/airballking/ros_control/blob/impedance-joint-interface/hardware_interface/include/hardware_interface/impedance_joint_interface.h
In my RobotHw I would now have:
class MyRobot: public RobotHW
{
public:
...
private:
PositionJointInterface jnt_pos_interface_;
PositionImpedanceJointInterface jnt_pos_imp_interface_;
...
};
Like that, I can load the existing controllers in ros_controllers
which use the PositionJointInterface (plus some solution to set
impedance defaults in MyRobot). I can also implement my own
controllers against
PositionImpedanceJointInterface which will set both positions and
impedance values.
I plan to initialize both of these interfaces with the same resource
name. Why do you say "you'll need to override the default resource
conflict policy"?
Final question: Would you be interested in merging the
ImpedanceJointInterface I sketched? If not, I will move it into the
repository in which I will implement my controllers.