ros control
ros hardware_interface
参考链接:https://github.com/RethinkRobotics/ros_control/wiki/hardware_interface

利用官方写好的硬件接口:
假设要控制两个joint,假定控制的是joint的位置(位置环),这时我们需要提供两个借口:一个是输出接口(JointPositionInterface),用来控制joint的位置(position);另一个是控制的输入接口(JointStateInterface)即joint的状态(state)输入(状态反馈)。
代码实现:
1 #include <hardware_interface/joint_command_interface.h> 2 #include <hardware_interface/joint_state_interface.h> 3 #include <hardware_interface/robot_hw.h> 4 5 class MyRobot : public hardware_interface::RobotHW 6 { 7 public: 8 MyRobot() 9 { 10 // connect and register the joint state interface 11 hardware_interface::JointStateHandle state_handle_a("A", &pos[0], &vel[0], &eff[0]); 12 jnt_state_interface.registerHandle(state_handle_a); 13 14 hardware_interface::JointStateHandle state_handle_b("B", &pos[1], &vel[1], &eff[1]); 15 jnt_state_interface.registerHandle(state_handle_b); 16 17 registerInterface(&jnt_state_interface); 18 19 // connect and register the joint position interface 20 hardware_interface::JointHandle pos_handle_a(jnt_state_interface.getHandle("A"), &cmd[0]); 21 jnt_pos_interface.registerHandle(pos_handle_a); 22 23 hardware_interface::JointHandle pos_handle_b(jnt_state_interface.getHandle("B"), &cmd[1]); 24 jnt_pos_interface.registerHandle(pos_handle_b); 25 26 registerInterface(&jnt_pos_interface); 27 } 28 29 private: 30 hardware_interface::JointStateInterface jnt_state_interface; 31 hardware_interface::PositionJointInterface jnt_pos_interface; 32 double cmd[2]; 33 double pos[2]; 34 double vel[2]; 35 double eff[2]; 36 };
运行的原理:
控制器(controller)或者控制器管理器(controller manger)可以通过上面的代码可以读取控制对象joint的状态,也可以发送控制指令给控制对象。控制器(controller)在运行时候可以通过读取pos,vel,eff三个变量获得joint的状态,控制指令cmd变量里面。设计者需要重写read()、write()两个函数。read更新pos、vel、eff三个变量,write需要将cmd传给底层控制。
主函数的实现DEMO:
1 main() 2 { 3 MyRobot robot; 4 controller_manager::ControllerManager cm(&robot); 5 6 while (true) 7 { 8 robot.read(); 9 cm.update(robot.get_time(), robot.get_period()); 10 robot.write(); 11 sleep(); 12 } 13 }
Controllers
joint_state_controller 既 publish joint state

浙公网安备 33010602011771号