ROS_control unit 6 no main node

Hi,
I have been going through the ROS_control unit and have reached the hardware interface for the open_manipulator in unit 6. In order to complete this hardware interface, don’t we also need to write a my_robot_hw_node.cpp file with a control loop, in the same way as we did with the rbb robot? If yes, how would we go about writing this node? I have tried copying the node we used for the rbb robot but it seems the classes do not hold the same information. Thank you in advance.
Anders

Hello @volvo2 ,

Yes, you are right. You would need to also create a node containing the control loop as well. Here you can check an example of how this control node would look: open_manipulator_controls/omx_control_node.cpp at master · ROBOTIS-GIT/open_manipulator_controls · GitHub

Thank you Alberto. This was exactly what I needed. :slight_smile:
We are currently working on a dexterous hand project, where we use Dynamixel actuators. Can i correctly use the hardware_interface from the open_manipulator project as a template for our application? In other words can the open_manipulator hardware_interface be used for Dynamixel actuators in general?
Thank you very much for the help.

Hello @volvo2 ,

Yes, if you are also using Dynamixels then you should be able to use this one as a template. You’ll need to modify it in order to adapt it to your specific actuators, for sure, but in general terms, the code should be quite similar.

@albertoezquerro thank you, it works now! :+1:
As I mentioned we are building a dexterous robotic hand, with Dynamixel XC330 actuators and remote actuation. We have implemented joint potentiometers (bourns 10k 3382G), to account for possible slack in the tendons. We want to implement position control using the EffortJointInterface and the joint potentiometers instead of the motor encoders. Using the template from open_manipulators we have now implemented the hardware abstraction layer by following the ros_control course. However, here we are using the motor encoders and not the joint potentiometers. How do we go about implementing the joint potentiometers in the hardware abstraction layer?
Do we declare the potentiometers state as a variable in the hardware_interface.h file, as we have done for the dynamixel variables?

hardware_interface.h:
-----’’--------
// Variables
DynamixelWorkbench dxl_wb_;
std::map<std::string, uint32_t> dynamixel_;
std::map<std::string, const ControlItem
> control_items_;
std::vector<std::pair<std::string, ItemValue>> dynamixel_info_;
std::vector joints_;
----------"------------

And is it then possible to adapt the cpp. file to declare the position from the joint potentiometer and not the motor encoder?
Thank you.

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.