模型获取

1)从ROS参数中找到机器人模型RobotModel
2)实例化操作接口 RobotState
3)获取一个运动组JointModelGroup,建立运动学模型
1)从ROS参数中找到机器人模型

robot_model_loader::RobotModelLoader robot_model_loader("robot_description");
robot_model::RobotModelPtr kinematic_model = robot_model_loader.getModel();
ROS_INFO("Model frame: %s", kinematic_model->getModelFrame().c_str());

2)实例化操作接口

robot_state::RobotStatePtr kinematic_state(new robot_state::RobotState(kinematic_model));
kinematic_state->setToDefaultValues();

3)获取一个运动组

const robot_state::JointModelGroup* joint_model_group = kinematic_model->getJointModelGroup("right_arm");
const std::vector<std::string> &joint_names = joint_model_group->getJointModelNames();

设置关节值

1)获取关节值
2)设置关节限制
1)获取关节值

std::vector<double> joint_values;
kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);
for(std::size_t i = 0; i < joint_names.size(); ++i)
{ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);
}

2)设置关节限制

setJointGroupPositions()函数不能强制自己设置关节限制,但可以通过调用enforceBounds()来设置
/* Set one joint in the right arm outside its joint limit */
joint_values[0] = 1.57;
kinematic_state->setJointGroupPositions(joint_model_group, joint_values);/* Check whether any joint is outside its joint limits */
ROS_INFO_STREAM("Current state is " << (kinematic_state->satisfiesBounds() ? "valid" : "not valid"));/* Enforce the joint limits for this state and check again*/
kinematic_state->enforceBounds();
ROS_INFO_STREAM("Current state is " << (kinematic_state->satisfiesBounds() ? "valid" : "not valid"));

正向运动学

获取一个随机的关节状态,然后求解末端执行器的姿态

kinematic_state->setToRandomPositions(joint_model_group);
const Eigen::Affine3d &end_effector_state = kinematic_state->getGlobalLinkTransform("r_wrist_roll_link");/* Print end-effector pose. Remember that this is in the model frame */
ROS_INFO_STREAM("Translation: " << end_effector_state.translation());
ROS_INFO_STREAM("Rotation: " << end_effector_state.rotation());

逆运动学

给一个末端执行器的位姿,求解次数,还有计算超时时间,得出每一个关节的状态

bool found_ik = kinematic_state->setFromIK(joint_model_group, end_effector_state, 10, 0.1);
if (found_ik)
{kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);for(std::size_t i=0; i < joint_names.size(); ++i){ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);}
}
else
{ROS_INFO("Did not find IK solution");
}

获得雅克比矩阵

Eigen::Vector3d reference_point_position(0.0,0.0,0.0);
Eigen::MatrixXd jacobian;
kinematic_state->getJacobian(joint_model_group, kinematic_state->getLinkModel(joint_model_group->getLinkModelNames().back()),reference_point_position,jacobian);
ROS_INFO_STREAM("Jacobian: " << jacobian);

启动文件

启动文件做过两件事
1)上传模型URDF和SRDF到参数服务器
2)放置运动学求解配置(由配置助手生成的)到ROS参数服务器对应节点的命名空间下,这个节点由是教程里实例化的类

<launch><include file="$(find pr2_moveit_config)/launch/planning_context.launch"><arg name="load_robot_description" value="true"/></include><node name="kinematic_model_tutorial"pkg="moveit_tutorials"type="kinematic_model_tutorial"respawn="false" output="screen"><rosparam command="load"file="$(find pr2_moveit_config)/config/kinematics.yaml"/></node>
</launch>

Moveit运动学模型相关推荐

  1. 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制 转

    无人驾驶运动学模型--线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制

  2. 常见移动机器人运动学模型

    参考链接: 常见移动机器人运动学模型总结 (qq.com) 两轮差速驱动机器人 图 2.1 TurtleBot 3 图 2.2 两轮差速驱动机器人运动模型 正运动学模型 逆运动学模型 原文 <两 ...

  3. 常见移动机器人运动学模型总结(图片版)

    关注同名微信公众号"混沌无形",有趣好文! 原文链接:常见移动机器人运动学模型总结 (包含原文PDF百度云下载链接) 精彩的理论论证过程见原文链接(含全文下载链接) 由于网页排版效 ...

  4. 麦克纳姆轮全向移动机器人运动学模型应用

    关注同名微信公众号"混沌无形",有趣好文! 原文链接:https://mp.weixin.qq.com/s/GWhlXsuY6QYyoZydaSYpjQ(包含原文PDF百度云下载链 ...

  5. 无人车系统(一):运动学模型及其线性化

    相对无人机与机械臂来说,无人车系统的运动学模型非常简洁.尽管简洁,无人车的运动学模型也是非线性的.应用于具体控制算法时,有必要对原始运动学模型进行变形或线性化.本篇主要介绍无人车的运动学模型,并对原始 ...

  6. Apollo代码学习(二)—车辆运动学模型

    Apollo代码学习-车辆运动学模型 前言 车辆模型 单车模型(Bicycle Model) 车辆运动学模型 阿克曼转向几何(Ackerman turning geometry) 小结 Apollo( ...

  7. 基于运动学模型的轨迹跟踪控制

    章四 基于运动学模型的轨迹跟踪控制 MPC(4)基于运动学模型的轨迹跟踪控制器设计 无人驾驶车辆模型预测控制(龚建伟)第四章 基于运动学模型的轨迹跟踪控制(仿真部分) 无人车辆在惯性坐标系中,车辆必须 ...

  8. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  9. 二自由度车辆的运动学模型和动力学模型

    二自由度车辆的运动学模型和动力学模型 最近刚接触自动驾驶相关的知识,得知像LQR.MPC这类基于模型的控制器,若想有不错的控制器性能,那么必须有比较精确的被控对象的数学模型.对于车辆这类被控对象的模型 ...

最新文章

  1. Quartz动态添加、修改和删除定时任务
  2. 黑马vue---10-11、Vue实现跑马灯效果
  3. 处理json中影响解析的多余引号
  4. 快排算法的Java实现
  5. 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
  6. 下单消息的发送和接收案例
  7. KlayGE 4.0中Deferred Rendering的改进(四):GI的神话
  8. ActiveMQ的签收方式
  9. final关键字_深入分析Java中的final关键字
  10. python 24位图转 8位_Python爬取PPT模板小工具下载-Python爬取PPT模板小工具免费版下载v1.0...
  11. 庖丁解牛获取连接状态数的awk数组命令
  12. GitHub 在 “tar” 和 npm CLI 中发现7个高危的代码执行漏洞
  13. html5pc转微信小程序,微信电脑版终于支持小程序 新版PC版微信实测
  14. 【git私服推送文件出现的问题】refusing to update checked out branch: refs/heads/master
  15. JavaScript:继承详解
  16. [LAMP兄弟连李明老师讲Linux].课件Shell编程
  17. python开发桌面软件实例-Python开发的第一步:利用Python开发一个桌面小程序
  18. 要善于借势破局——宁向东的清华管理学课第4课
  19. python 网页生成pdf_3个步骤教你如何用Python实现网页转PDF
  20. python将中文汉字转换成拼音

热门文章

  1. bzoj 3356: [Usaco2004 Jan]禁闭围栏 离散化+树状数组
  2. 用爬虫玩转石墨文档API
  3. VC程序中Windows XP风格程序界面的实现
  4. 改变无数人命运的上证指数
  5. 计算机教师继续教育心得,教师继续教育心得体会
  6. 外挂基础知识入门教学
  7. nodejs双感叹号用法
  8. oracle的权限授予,Oracle赋予用户sysdba权限
  9. 数模常用查找数据网址大全
  10. Thinkpad x60 Bios设置指南