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 };
View Code

运行的原理:

控制器(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 }
View Code

 Controllers

  joint_state_controller  既 publish joint state

 

posted @ 2017-03-20 14:49  TomWill  阅读(822)  评论(0)    收藏  举报