libfranka的架构设计

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函数即可

Guess you like

Origin blog.csdn.net/dbdxnuliba/article/details/116258167