文章目录

  • 启动文件的分析
    • ur_gazebo/ur5.launch
    • ur5_moveit_config/ur5_moveit_planning_execution.launch
    • ur5_moveit_config/moveit_rviz.launch
  • 控制
    • 控制器的切换
    • moveit_jog_arm/spacenav_cpp.launch
    • 手动输入
    • jog_server的工作原理

在最新的Moveit中提供了moveit_jog_arm包,可以实现机械臂的点动效果。现在就结合moveit提供的教材分析一下其工作的机制

启动文件的分析

ur_gazebo/ur5.launch

  1. 打开一个空的gazebo环境
  2. 加载机器人的urdf到参数服务器,robot_description
  3. 通过gazebo_ros包将robot_description的机器人模型加载到gazebo。同时gazebo_ros继承RobotHW类,通过JointStateInterface提供关节状态信息,通过EffortJointInterface、PositionJointInterface以及VelocityJointInterface提供力/力矩、位置和速度的控制。
  4. 启动robot_state_publisher节点,发布/tf主题
  5. 通过controller_manager启动joint_state_controller,从gazebo_ros获取关节状态信息,并发布到"/joint_states"主题。
  6. 通过controller_manager加载arm_controller,其类型为position_controllers/JointTrajectoryController,JointTrajectoryController提供了两个轨迹命令的接收接口:action接口(启动一个action server,提供一组"arm_controller/follow_joint_trajectory/XXXX"的主题)和topic接口(单个command主题)。
  7. 通过controller_manager加载joint_group_position_controller,其类型为positon_controllers/JointGroupPositionController。它接受关节位置命令。

ur5_moveit_config/ur5_moveit_planning_execution.launch

  1. 将"/follow_joint_trajectory"重映射为"/arm_controller/follow_joint_trajectory"。(在没执行ur5_moveit_planning_execution.launch之前就已经是/arm_controller/follow_joint_trajectory了,不知道为什么重映射)
  2. 加载move_group所需的上下文信息。
  3. 启动move_group节点,在move_group中根据选择加载simple_controller_manager还是fake_controller_manager。如果是simple_controller_manager(例子中就是),则会连接到ROScontroller_manager提供的"arm_controller/follow_joint_trajectory" action接口,由moveit输出轨迹数据,**gazebo_ros端收到数据便会执行,同时通过"joint_states"主题随时反映关节的状态变化。

ur5_moveit_config/moveit_rviz.launch

  1. 运行rviz,与moveit通信进行操控。

控制

控制器的切换

前面可以看到,我们加载了两个ROS控制器:joint_group_position_controller和arm_controller。arm_controller接受一组关节轨迹,这是与Moveit生成的运动轨迹相匹配的。joint_group_position_controller则是接收单个的关节位置命令,正是电动所需要的控制器。因此我们使用ROS的controller_manager提供的Service进行控制器的切换:

rosservice call /controller_manager/switch_controller "start_controllers:
- 'joint_group_position_controller'
stop_controllers:
- 'arm_controller'
strictness: 2"

可以在键入"rosservice call /controller_manager/switch_controller"后按tab健,会自动生成待填写格式,然后补全即可。

moveit_jog_arm/spacenav_cpp.launch

  1. 启动spacenav_node节点,连接spacenav操控设备。
  2. 启动spacenav_to_twist节点,将spacenav设备的操控指令转换为twist格式数据,twist由点的线速度和角速度向量组成。
  3. 启动jog_server节点,其订阅 /jog_server/delta_jog_cmds 作为twist命令输入,订阅/joint_states"为机器人实时状态参考,将关节位置命令发布到 /joint_group_position_controller/command主题,该主题即为前面讲过的ROS控制器的命令接收端。

手动输入

在没有spacenav设备的情况下,可以手动地输入命令到/joint_group_position_controller/command,例如:

rostopic pub -r 100 /jog_server/delta_jog_cmds geometry_msgs/TwistStamped "header: auto
twist:linear:x: 0.0y: 0.01z: -0.01angular:x: 0.0y: 0.0z: 0.0"

同样可以使用tab健进行命令补全。其中"-r"参数指定发布的命令消息的赫兹频率。通过这个命令便可以使机械臂末端按指定的速度矢量运动

jog_server的工作原理

jog_server原理上其实很简单,也就是将笛卡尔空间中的位移增量转化为关节的增量。怎么转换?答案就是雅可比矩阵,我们知道关于雅可比矩阵有:
d θ d t = J V \frac{d\mathbf{\theta}}{dt}=\mathbf{J}\mathcal{V} dtdθ​=JV
其中 V = [ v T , ω T ] T \mathcal{V}=[\mathbf{v}^T,\mathbf{\omega}^T]^T V=[vT,ωT]T。因此,当我们考虑微小的时间以及速度变化量时,便有
Δ θ ≈ J [ Δ v Δ ω ] \Delta\mathbf{\theta}\approx\mathbf{J}\left[ \begin{array}{c} \Delta\mathbf{v} \\ \Delta\mathbf{\omega} \end{array} \right] Δθ≈J[ΔvΔω​]

在jog_server的实现中,便会将输出命令周期乘以输入速度命令得到位移增量,通过雅可比变成关节增量,再加上从**/joint_states**获取的当前关节位置,便得到了新的关节位置。

ROSMoveit中机械臂的点动(Jog)实现相关推荐

  1. matlab机械臂工作空间代码_【ROS-Moveit!】机械臂控制探索(3)——基于python的API示例代码分析...

    本文参考Moveit!官方文档. 系统:ubuntu 18.04 / 16.04 ROS:Melodic / Kinetic 概述 基于python的运动组API是最简单的MoveIt!用户接口.其中 ...

  2. matlab机械臂工作空间代码_ROS中机械臂笛卡尔空间规划姿态求解无效-Moveit!

    1 任务描述 在使用Moveit对机械臂运动进行规划时,我们定义Pose,然后规划,目标位姿Pose的定义代码如下: target_pose = PoseStamped() target_pose.h ...

  3. 双轴机械臂中的闭环步进电机平顺控制算法: 42HS48EIS,57HS

    ■ 实验背景 在 两轴机械臂+机械爪整体控制板设计与机械爪控制调试 的基础上对于机械臂各关节进行了 双关节机械臂+机械爪运动控制 ,其中存在的主要问题还是肩关节运动不平稳的情况. ▲ 机械臂肩部运动 ...

  4. MyCobot六轴机械臂(七)--实战MyBlockly

    1.设置变量并传递机械臂关节角度 这里有五种卡片 (1)获取所有角度 (2)设置关节,单指某一个关节. (3)设置全角度(6轴机械臂和4轴机械臂) (4)设置全角度为 创建关节变量,将显示所有关节的角 ...

  5. 机械臂论文笔记(一)【基于卷积神经网络的二指机械手 抓取姿态生成研究 】

    基于卷积神经网络的二指机械手 抓取姿态生成研究 论文下载 摘要 第1章 绪论 1.1 抓取生成国内外研究现状 1.1.1已知物体抓取生成 1.1.2相似物体抓取生成 1.1.3 未知物体抓取生成 1. ...

  6. Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...

     Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...

  7. python做运动控制_ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制

    ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制 说明: 介绍MoveIt!编程驾驭机械臂运动控制 正文 本讲我们将从以下四个部分进行讲解. 首先来回顾下MoveIt!编程接口的框架. Mo ...

  8. ubuntu16.04安装UR3/UR5/UR10机械臂的ROS驱动并实现gazebo下Moveit运动规划仿真以及真实UR3机械臂的运动控制(1)

    1. 下载并编译UR3/UR5/UR10驱动包 我们在Home目录下创建一个文件夹(命名为ur_ws),这就是UR驱动的工作空间了,并且创建一个src文件夹,如下. 然后去下载驱动包,如下图. 下载后 ...

  9. 键盘+moveit+rviz 控制六轴机械臂(仿真)

    首先下载代码:git clone https://github.com/ssz160107/catkin_ws_arm.git 打开文件夹如下图所示 打开一个终端运行mini_4wd_six_arm_ ...

最新文章

  1. php变量类型怎么表示,PHP 数据类型_php
  2. java文件保存异常_Java 实现把异常信息写入到文件中
  3. jzoj3462-休息【归并排序,逆序对】
  4. 又见程序媛 | 从索引的创建角度分析热门“面试题”
  5. 菜鸟裹裹电脑版_天猫淘宝“基本盘”放缓,阿里云、菜鸟爆发,马云迎来拐点?...
  6. Unity3D基础14:碰撞检测
  7. windows桌面待办事项_想拒绝拖延症?你还缺一款云同步提醒的的桌面便签软件!...
  8. B - I Hate It(单点更新)(区间求最大值)
  9. adadelta算法_优化算法:AdaGrad | RMSProp | AdaDelta | Adam
  10. 前端数据可视化之使用 canvas、svg、zrender画图
  11. 航芯技术分享 | 一文读懂汽车CAN总线技术原理(下)
  12. 解决Git使用出现git@githubcom Permission denied (publickey)
  13. C#实现Socket
  14. 解决cumcm17问题的代码记录(待改正)
  15. java爬虫实例_关于java爬虫以及一些实例
  16. linux centos7 解决挖矿病毒kthreaddk 高CPU占用
  17. 航空航天与国防数字化验证解决方案 | 达索系统百世慧®
  18. 2022天梯赛个人代码留存
  19. 眼科刀行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  20. 读《鬼谷子的局》笔记

热门文章

  1. 如何在 Win上写 Python 代码?最佳攻略来袭
  2. [问题已处理]-k8s出现Evicted状态
  3. Power Plug Categories A to Categories O
  4. 最新版FusionCharts2D面积图
  5. 初级,中级,高级程序员需要具备的能力
  6. Feng Shui POJ - 3384 [半平面交]
  7. 芯盾时代完成3亿元C轮融资,宽带资本领投
  8. css背景视差_具有JavaScript和CSS转换的廉价视差
  9. 计网第三章答案(谢希仁 第七版)
  10. 相似度计算之Jaccard系数