前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器人软件中间层 yarp-Yet Another Robot Platforms

机器人软件中间层 yarp-Yet Another Robot Platforms

原创
作者头像
ZC_Robot机器人技术
修改2021-05-15 21:33:55
1.4K0
修改2021-05-15 21:33:55
举报

1 软件中间层需求

机器人系统复杂性的增加要求增加了相应控制软件的复杂性。尽管临时解决方案很容易实现,但重要的是考虑可扩展性,灵活性和可移植性开发的软件。 使用相同软件的可能性控制多个平台可能非常重要简化了测试,调整和部署不同机器人上的控制器。

我们处理控制从更一般的角度来看问题,而不是限制用户要使用基于任务的方法。 当我们考虑一个通用控制系统,我们通常确定三个主要组成部分

  • 机器人本体模型
  • 机器人反馈控制器数据
  • 机器人驱动器

任何面向控制的软件库都必须提供上述内容功能可以使用。 鉴于机器人的复杂性系统可能很困难,耗时且容易出错直接在底层编程中编写控制器语言,例如C ++。 但是,控制库必须高效,因为通常需要快速控制回路。前述要求是推动创新的动力。这种控制库中基于模型的驱动方法。

在本文中,我们提出了一个软件抽象层,该层负责将控制软件解耦:

  • 解耦用于获取状态反馈的实际接口;
  • 解耦实际发送命令指令的接口;
  • 解耦机器人动力学和运动学计算库;

2 系统动力学

对于一个自由漂浮机器人系统,系统的实际状态可以采用

漂浮基座机器人广义坐标
漂浮基座机器人广义坐标

机器人动力学方程可以统一标识如下所示

漂浮基座机器人的动力学方程一般表达式
漂浮基座机器人的动力学方程一般表达式

机器人控制采用PD控制+重力补偿

关节误差计算
关节误差计算
机器人PD控制+重力补偿
机器人PD控制+重力补偿

3 YARP 组成

YARP即 Yet Another Robot Platforms,今天的YARP是长期软件开发平台实时,计算密集型,并涉及各种变化硬件。

在YARP中,端口是一个活动对象,用于管理给定数据单元的多个连接(输入或输出)

采用一个软件抽象层来简化创建过程用于高度冗余机械的全身控制器系统。 鉴于先前介绍的要求本节将重点介绍必须存在的四个主要要素在库中,即执行器,传感器,状态和模型。 库提供的抽象使人们也可以轻松实现更高级别的接口,例如SimulinkR接口。

YARP软件框架
YARP软件框架

最主要的四部分包括了

(1)执行器

执行器元素抽象了实际的控制机器人马达。 特别是它显示了可能的马达可控制的模式,例如 位置控制,速度控制和转矩控制。 当然也提供了底层控制器的参数设定。

(2)传感器

传感器模块是与执行器相对应的,该模块代表着机器人系统所有的状态信息。包括了编码器、力和力矩传感器以及加速度计等。

(3)状态信息

状态元素代表所有可能的信息可以在机器人上进行测量或估算。 这意味着该状态包含传感器提供的信息元件。 此外,它还提供了其他信息,可能来自对数据的估计或过滤。 例如,

如果机器人仅提供关节位置测量值,例如来自联合编码器,一阶和二阶导数滤波器可以提供速度和加速度测量值。

(4)机器人模型

具体的实现方式主要分为两个库:

wholeBodyInterface:四个要素即表示执行器,传感器,状态和模型作为抽象。 此外,该库提供了实用程序识别各种自由度。因为它代表了抽象的编码副本库,WholeBodyInterface不会影响机器人框架或数据的组织方式,仅使用本机C ++类型。

yarpWholeBodyInterface: yarpWholeBodyInterface是wholeBodyInterface实际的体现。包括链接运动学和动态学库iDynTree库以及模型参数的URDF 加载。

Program1

//Properties.
// - Fill with model URDF path
// - Yarp controlboard mapping
yarp::os::Property wbiProperties = ...;
//create an instance of wbi
wbi::wholeBodyInterface* m_robot =
new yarpWbi::yarpWholeBodyInterface(
"PD plus gravity",
10 wbiProperties);
if (!m_robot) {
return false;
}
//Create list of controllable joints
wbi::IDList controlledJoints = ...;
m_robot->addJoints(controlledJoints);
if (!m_robot->init()) {
return false;
}

program2

 wbi::Frame w_H_b; //identity + zero vector
//read state
robot->getEstimates(wbi::ESTIMATE_JOINT_POS,
 positions);
 robot->getEstimates(wbi::ESTIMATE_JOINT_VEL,
 velocities);
//use model to compute feedforward
 robot->computeGravityBiasForces(
positions,
w_H_b,
grav,
gravityCompensation);
//compute feedback.
for (int i = 0; i < robot->getDoFs(); i++) {
error(i) = positions(i) - reference(i);
torques(i) = gravityCompensation(i + 6)
- kp(i) * error(i)
- kd(i) * velocities(i);
}
//send desired torques to the robot
 robot->setControlReference(torques);

4 实验

下面是基于动量的iclub平衡控制实验demo,实验是在yarp 种搭建完成。程序链接。视频如下:

iclub 平衡实验

5 安装

YARP的安装如下所示

  • On Linux:
sudo apt-get install cmake libace-dev
git clone https://github.com/robotology/yarp
cd yarp && mkdir build && cd build && cmake .. && make
sudo make install  # Optional

入门指导 http://www.yarp.it/yarp_pointcloud.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 软件中间层需求
  • 2 系统动力学
  • 3 YARP 组成
  • 4 实验
  • 5 安装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档