libfranka的架构设计
1)用户层对接的丰富接口:回调函数定义,这样用户可以选择需要的形式进行定义自己的控制方法
1.关节位置轨迹生成器回调函数 std::function
2.关节速度轨迹生成器回调函数
3.笛卡尔位置轨迹生成器回调函数
4.笛卡尔速度轨迹生成器回调函数
5.单独关节力矩控制器回调函数
6.关节力矩控制器回调函数 + 关节位置轨迹生成器回调函数
7.关节力矩控制器回调函数 + 关节速度轨迹生成器回调函数
8.关节力矩控制器 回调函数+ .笛卡尔位置轨迹生成器回调函数
9.关节力矩控制器回调函数 + 笛卡尔速度轨迹生成器回调函数
2)最外层是多态的robot.control(形参有9种类型)命名的函数实现,共有9种,每一种的形参为上述就中的回调函数之一作为形参。3)然后obot.control(形参有9种类型)函数内部,去实例化CtrolLoopT> 模板函数举例说明:
3)然后调用其template <typename T>void ControlLoop<T>::operator()()函数去实现while循环
如上所示,
这两句为实现loop循环(也就是持续插补,或者持续控制开启loop的地方)
我们进入bool ControlLoop<T>::spinMotion模板函数,发现里面调用了Gererator的回调函数,也就是调用了用户层实现的轨迹生成函数,直到轨迹完成才会返回完成,让上一步的while退出
bool ControlLoop<T>::spinControl模板函数,调用了Controller的回调函数,也就是调用了用户层实现的关节力矩生成函数,直到轨迹完成,让上一步的while退出
5)最后用户层可以根据需求选择9种的一种方式去实现多态中control函数即可