当前位置: 首页 > news >正文

RL机器人人库使用简介

1. 主要模块介绍

     Hal : 硬件抽象层
Kin :运动学算法库
Math : 数学算法库和数据结构
Mdl : 机器人模型库(模型管理和加载XML定义的机器人模型)
Plan : 运动规划库
Sg :机器人模型可视化库(显示机器人3D模型和场景)
Std : 数据管理和内存管理库
Unit : 工具库(抽象操作系统接口和工具函数)
Xml :xpath接口的xml文件库

2. 基本应用

2.1. 初始化

#define SCENEFILE "D:\\openCode\\robotlib\\rl-examples_urdf-model\\rlsg\\abb-irb-4600-205\\abb-irb-4600-205.xml"
#define MODELFILE "D:\\openCode\\robotlib\\rl-examples_urdf-model\\rlmdl\\abb-irb-4600-205.xml"SoQt::init(this);
SoDB::init();
SoGradientBackground::initClass();m_scene = std::make_shared<rl::sg::so::Scene>();
rl::sg::XmlFactory geometryFactory;
geometryFactory.load(SCENEFILE, m_scene.get());m_viewer = new SoQtExaminerViewer(ui.widget);
m_viewer->setSceneGraph(m_scene->root);
m_viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND);
m_viewer->viewAll();rl::mdl::XmlFactory kinematicFactory;
m_geometryModels = m_scene->getModel(0);//界面模型
m_dynamicModel= std::dynamic_pointer_cast<rl::mdl::Dynamic>(kinematicFactory.create(MODELFILE));//仿真模型

2.2 获取关节坐标

void QMainWidget::getJoinPos(QVector<double> &pos)
{pos.clear();rl::math::Vector values = m_dynamicModel->getPosition();Eigen::Matrix<rl::math::Units, Eigen::Dynamic, 1> units = m_dynamicModel->getPositionUnits();int n = values.rows();for(int i=0; i<n; i++){if (rl::math::Units::radian == units(i)){pos.append(values(i) * rl::math::constants::rad2deg);}else{pos.append(values(i));}}
}

2.3 获取世界坐标

void QMainWidget::getWorldPos(QVector<double> &pos)
{pos.clear();const rl::math::Transform::ConstTranslationPart& position = m_dynamicModel->getOperationalPosition(0).translation();rl::math::Vector3 orientation = m_dynamicModel->getOperationalPosition(0).rotation().eulerAngles(2, 1, 0).reverse();pos.append(position.x());pos.append(position.y());pos.append(position.z());pos.append(orientation.x() * rl::math::constants::rad2deg);pos.append(orientation.y() * rl::math::constants::rad2deg);pos.append(orientation.z() * rl::math::constants::rad2deg);
}

2.4 关节操作

这里更新第六关节,减去一个固定角度

m_dynamicModel->forwardDynamics();
rl::math::Vector values = m_dynamicModel->getPosition();
values[5] -= ANGLE_STEP;m_dynamicModel->setPosition(values);
m_dynamicModel->forwardPosition();
updatePosUI();
updataModelView();

2.5 世界坐标操作

机器人提供的基本操作是关节操作,使用世界坐标操作涉及机器人的逆变换,这里使用NloptInverseKinematics作为逆变换算法

 rl::mdl::Kinematic* kinematic = dynamic_cast<rl::mdl::Kinematic*>(m_dynamicModel.get());if (kinematic){rl::math::Transform x = kinematic->getOperationalPosition(0);//rl::math::Vector3 orientation = x.linear().eulerAngles(2, 1, 0).reverse();x.translation().x() = worldPos[0];x.translation().y() = worldPos[1];x.translation().z() = worldPos[2];x.linear() = (rl::math::AngleAxis(worldPos[5] * rl::math::constants::deg2rad, rl::math::Vector3::UnitZ()) *rl::math::AngleAxis(worldPos[4] * rl::math::constants::deg2rad, rl::math::Vector3::UnitY()) *rl::math::AngleAxis(worldPos[3] * rl::math::constants::deg2rad, rl::math::Vector3::UnitX())).toRotationMatrix();rl::math::Vector q = kinematic->getPosition();#ifdef RL_MDL_NLOPTrl::mdl::NloptInverseKinematics ik(kinematic);ik.seed(0);#elserl::mdl::JacobianInverseKinematics ik(kinematic);ik.setDelta(1);#endifik.clearGoals();ik.addGoal(x, 0);if(ik.solve()){kinematic->forwardPosition();}else{kinematic->setPosition(q);kinematic->forwardPosition();}

2.6 跟新界面显示

void QMainWidget::updataModelView()
{rl::mdl::Kinematic* kinematic = dynamic_cast<rl::mdl::Kinematic*>(m_dynamicModel.get());if (kinematic){for (std::size_t i = 0; i < m_geometryModels->getNumBodies(); ++i){m_geometryModels->getBody(i)->setFrame(kinematic->getBodyFrame(i));}}
}

http://www.dtcms.com/a/602170.html

相关文章:

  • 北京网络公司建站百度爱采购优化排名软件
  • 长沙微网站开发重庆网站建设及优化公司
  • Java集合框架深度剖析 — 从源码看ArrayList、HashMap的设计与优化
  • 网站关键词排名快速提升thinkphp建站网址
  • JavaScript中??、、||、?.运算的区别
  • 微信公众号网站怎么做上海网站开发报价
  • Python压缩音乐文件大小
  • 用什么软件写网站荷城网站设计
  • 长治哪家公司做网站好怎么做网站教程视频
  • 跟踪导论(三)——滤波的释义位置信息的“观测+修正”
  • 一个电商网站开发周期是多久搜索引擎营销流程是什么?
  • 计算机做网站难吗网站建设费可以走办公费吗
  • 做公众号还是网站建网站哪家划算
  • 从App时代到智能体时代,如何打破“三堵墙”
  • jsp怎么拿到url参数
  • 有机蔬菜:清爽解腻的炖锅搭档
  • 网站的时间对齐应该怎么做wordpress中文评论插件
  • 515ppt网站建设岳麓区专业的建设网站公司
  • mysql第5次作业---hyx
  • LLM的“哥白尼革命”:物理AI与世界模型,AI的下一个战场!
  • VC软件编译C语言 | 详细教程与常见问题解答
  • 高职单招与统招比较及职业发展指南
  • Cursor vs Claude Code:AI编程工具深度对比与选择指南
  • php论坛网站源码下载大型购物网站设计
  • 网站建设标书样本如何修改wordpress登录域名
  • 深圳网站建设联系方式crm客户管理系统论文
  • Python 100例:深入学习与实践指南
  • “系统性”学习高并发路线
  • VL25 输入序列连续的序列检测
  • 如何做条形码网站怎么搞浏览器如何推广自己网站