ROS ur10机械臂添加140夹爪全流程记录

news2025/2/25 22:29:22

ROS ur10机械臂添加140夹爪

系统版本:Ubuntu20.04

Ros版本:noetic

Moveit版本:moveit-noetic

参考博客:

ur3+robotiq ft sensor+robotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客

UR5机械臂仿真实例(三)1 末端添加robotiq夹爪 [ubuntu20.04+ROSnoetic+gazebo11]_ros机械臂中添加夹具-CSDN博客

前提条件:ros系统,Moveit环境,Gazebo仿真环境运行正确

ROS+Moveit!+Rviz配置流程:

ROS系统&Moveit!安装指南:

1.2.4 安装 ROS · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

01 安装UR工具包与驱动

source /opt/ros/melodic/setup.bash

mkdir -p ur_ws/src && cd ur_ws

# 下载fmauch_universal_robot(注意分支)

git clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robot

# 下载Universal_Robots_ROS_Driver驱动

git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver

# 更新 -qq代表除非报错,否则不输出

sudo apt update -qq

sudo apt-get upgrade

# 更新依赖(这一步需要有梯子,不然可能会超时,超时执行下一步即可,只要一开始安装ros时执行成功过即可)

rosdep update

# 安装依赖 -y表示出现 y/N选项 直接执行y

rosdep install --from-paths src --ignore-src -y

# 编译

catkin_make

# 激活当前工作空间,并写入

echo "source ~/ur_ws/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

02 仿真测试

# 启动gazebo

# 注意是ur10_bringup.launch,而不是ur10.launch

roslaunch ur_gazebo ur10_bringup.launch

# 启动move it规划

roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true

# 启动rviz

# 注意后面要给出rviz_config的地址

roslaunch ur10_moveit_config moveit_rviz.launch rviz_config:=$(rospack find ur10_moveit_config)/launch/moveit.rviz

03 连接夹爪与机械臂

1.下载robotiq工具包

git clone https://github.com/jr-robotics/robotiq.git src/robotiq

2.修改ur.xacro模型

ur_description/urdf/ur.xacro中添加以下代码(注意xacro:include标签应在文件首)

<!--继承robotiq_arg2f_140宏-->

<xacro:include filename="$(find robotiq_2f_140_gripper_visualization)/urdf/robotiq_arg2f_140_macro.xacro"/>

<!--调用robotiq_arg2f_140,加入夹爪的link和joint-->

<xacro:robotiq_arg2f_140

prefix=""

transmission_hw_interface="$(arg transmission_hw_interface)"

/>

3. 断开夹爪与base_link连接

注释与修改

robotiq-noetic-devel/robotiq_2f_140_gripper_visualization/urdf/robotiq_arg2f_140_macro.xacro中base_link连接

195<!--link name="${prefix}base_link"/-->

197<parent link="${prefix}tool0" />

4. 启动测试

catkin_make

source devel/setup.bash

roslaunch ur_description view_ur10.launch

检查能否正常移动夹爪与机械臂

04 配置gazebo仿真环境

1.修改模型关节连接关系

“世界”连接到“机械臂基类”,添加夹爪 机械臂末关节链接至“夹爪基类”

修改文件:ur_gazebo/urdf/ur.xacro

<link name="world"/>

<joint name="world_joint" type="fixed">

<parent link="world"/>

<child link="base_link"/>

<origin xyz="0 0 0" rpy="0 0 0"/>

</joint>

倒数第二行添加如下

<xacro:include filename="$(find robotiq_2f_140_gripper_gazebo)/urdf/robotiq_arg2f_140_macro.xacro" />

<!-- parameters -->

<xacro:arg name="transmission_hw_interface" default="hardware_interface/EffortJointInterface"/>

<xacro:robotiq_arg2f_140_gazebo

prefix=""

transmission_hw_interface="$(arg transmission_hw_interface)"/>

<joint name="robotiq_hand_joint" type="fixed">

<parent link="wrist_3_link"/>

<child link="robotiq_arg2f_base_link"/>

<origin xyz="0 0 0" rpy="0 0 0"/>

</joint>

2.修改关节与运动控制插件

Robotiq2f140 gripper有被动关节(Mimic Joint),标准Gazebo不支持Mimic关节仿真, 所以需要安装一个插件。在一、实现rviz中ur5与robotiq85的连接和控制的基础上,下载plugins,然后catkin_make编译。

cd ~/catkin_ws/src

git clone GitHub - roboticsgroup/roboticsgroup_gazebo_plugins: Collection of small gazebo plugins for ROS

cd ~/catkin_ws

catkin_make

打开robotiq_2f_140_gripper_gazebo/urdf/robotiq_arg2f_140_macro.xacro,修改以下两处。

将插件名字改为“libroboticsgroup_gazebo_mimic_joint_plugin.so”;

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_140_1">

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_140_2">

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_140_3">

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_140_4">

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_140_5">

将100行左右这段代码注释掉。因为在fmauch_universal_robot/ur_gazebo/urdf/ur_macro.xacro中已经添加了这个插件,不再重复添加。

<!--

Inject Gazebo ROS Control plugin, which allows us to use ros_control

controllers to control the virtual robot hw.

-->

<!--<gazebo>-->

<!--<plugin name="ros_control" filename="libgazebo_ros_control.so">-->

<!--</plugin>-->

<!--</gazebo>-->

3.加载控制器参数

打开robotiq_2f_140_gripper_gazebo/config/

robotiq_2f_140_gripper_controllers.yaml

修改gripper_controller的类型和关节。

增添以下代码

gripper_controller:

type: effort_controllers/JointTrajectoryController

gains:

finger_joint: {p: 10, d: 0.1, i: 1, i_clamp: 1}

joints:

- finger_joint

action_monitor_rate: 20

goal_tolerance: 0.002

max_effort: 100

stall_velocity_threshold: 0.001

stall_timeout: 1.0

4.ur5_bringup.launch中修改controllers参数值

修改ur_gazebo/launchur10_bringup.launch启动三个控制器:关节状态发布、机械臂关节控制、夹爪关节控制。

<arg name="controllers" default="joint_state_controller pos_joint_traj_controller gripper_controller" doc="Controllers that are activated by default."/>

此处曾因与后面Moveti!配置命名空间不一致导致严重bug

可以先不修改,文档最后有详细说明

启动测试

到这一步应该可以在gazebo里面看到加了夹爪的模型了。

cd ~/catkin_ws/

catkin_makesource devel/setup.bash

roslaunch ur_gazebo ur10_bringup.launch

(gazebo启动流程launch->ur.xacro->ur_macro.xacro&robotiq_arg2f_140_macro.xacro->config/controllers->启动)

可能的错误:

1.Failed to find root link: Two root links found: [base_link] and [world]

原因:根节点过多

解决方法:将robotiq_arg2f_140.xacro或ur.xacro中其中一个的worldlink模块注释掉就可以解决

2.gazebo--SpawnModel: Failure - model name mrobot already exists.解决办法

原因:用gazebo打开机器人模型后,保存了world,此时的新world比原world多了机器人模型mrobot,所以重新运行launch时提示名字为mrobot的模型已经存在与world中

解决办法:将gazebo_ros功能包中的empty_world.launch复制到自己的功能包中,并把world_name的参数值改成保存后的world地址,运行empty_world.launch,将里面的机器人模型删除再重新保存即可。

由于gazebo的特性,每一次加载后模型都会保存到world,当模型加载位置有模型时不会覆盖而是不加载,所以在调试时每次关闭gazebo前要删除加载的模型

05 配置Moveit!运控平台

前置工作:因为Moveit!生成模型时不接受空参数或地址,所以我们要对机械臂模型加载模块进行修改

将fmauch_universal_robot/ur_gazebo/urdf/ur.xacro中的

<xacro:arg name="joint_limit_params" default=""/>

<xacro:arg name="physical_params" default=""/>

<xacro:arg name="kinematics_params" default=""/>

<xacro:arg name="visual_params" default=""/>

改为

<xacro:arg name="joint_limit_params" default="$(find ur_description)/config/ur10/joint_limits.yaml"/>

<xacro:arg name="physical_params" default="$(find ur_description)/config/ur10/physical_parameters.yaml"/>

<xacro:arg name="kinematics_params" default="$(find ur_description)/config/ur10/default_kinematics.yaml"/>

<xacro:arg name="visual_params" default="$(find ur_description)/config/ur10/visual_parameters.yaml"/>

1.开始配置

roslaunch moveit_setup_assistant setup_assistant.launch

(1)选择模型文件

(2)自动设置碰撞矩阵

(3)设置虚拟关节

(4)设置规划组

(5)添加joints

(6)夹爪不需要运动学求解器

(7)设置自定义姿势

(8)设置末端执行器

(9)assive Joints被动关节

(10)Controllers控制器

首先,点击Auto Add FollowJointsTrajectoryControllers For Each Planning Group自动生成controllers。

为了实现moveit对gazebo中机械臂的控制,我们需要确保命名空间一致,即控制器名称要统一。参考fmauch_universal_robot/ur_gazebo/config/ur10_controllers.yaml,设置两个controllers的Name和Type。

(11)模拟

对仿真源文件的等价修改,跳过

(12)3D感知

暂时不需要,跳过

(13)作者署名

(14)生成config文件

结果演示

可能存在的问题:

命名空间不一致

修改位置ur_control.launch.xml

<arg name="controllers" default="joint_state_controller manipulator_controller gripper_controller"/>

<arg name="stopped_controllers" default="manipulator_controller gripper_controller"/>

ur10_bringup.launch

<arg name="controllers" default="joint_state_controller manipulator_controller gripper_controller" doc="Controllers that are activated by default."/>

<arg name="stopped_controllers" default="joint_group_pos_controller" doc="Controllers that are initally loaded, but not started."/>

绝大部分控制失败都是由命名空间不一致引起的,此处应重点注意排查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFMPEG编码容错处理解决办法之途径----升级库文件

在qt开发环境下接收网络数据&#xff0c;调用ffmpeg解码播放视频&#xff0c;出现闪屏现象&#xff0c;具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现&#xff1b;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏&#xff1b;闪屏时会报Could not fin…

uniapp h5端和app端 使用 turn.js

前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…

【入门音视频】音视频基础知识

&#x1f308;前言&#x1f308; 这个系列在我学习过程中&#xff0c;对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少&#xff0c;所以我希望通过这个音视频系列&#xff0c;跟大家一起学习音视频&#xff0c;希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…

数据结构☞泛型

一.基础定义与应用方向 1.定义&#xff1a; 一般的类和方法&#xff0c;只能使用具体的类型 : 要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以 应用于多种类型 的代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----- 来源《 Java 编程思想》对泛型的介…

hot100-二叉树

二叉树 二叉树递归 相当于这个的顺序来回调换 class Solution {private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null)return res;inorderTraversal(root.left);res.add(root.val);inorde…

嵌入式项目:STM32刷卡指纹智能门禁系统

本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助&#xff0c;请点链接&#xff1a; https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端&#xff08;下位机&#xff09;…

短剧小程序系统源码

短剧小程序系统源码 今天我要向大家介绍的是最新作品——短剧小程序系统源码。这不仅仅是一款简单的播放工具&#xff0c;它背后蕴含的强大功能能够帮助你的短剧业务实现质的飞跃&#xff01; 为什么说这款源码很厉害&#xff1f; 首先&#xff0c;在当今竞争激烈的市场环境…

C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索

一、为什么选择面向对象编程 在软件开发的演进过程中&#xff0c;随着程序规模和复杂度的不断增加&#xff0c;传统的编程方式逐渐暴露出局限性。面向对象编程应运而生&#xff0c;它就像是一位智慧的组织者&#xff0c;将程序中的功能进行模块化划分。每个模块各司其职&#x…

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…

基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案

随着物联网和嵌入式技术的快速发展&#xff0c;嵌入式设备对实时音视频通信的需求日益增长。然而&#xff0c;传统的音视频解决方案往往存在体积庞大、实时性差、互动体验不佳等问题&#xff0c;难以满足嵌入式设备的资源限制和应用场景需求。 针对以上痛点&#xff0c;本文将介…

Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式

Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序&#xff1a; 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…

RT-Thread+STM32L475VET6——USB鼠标模拟

文章目录 前言一、板载资源二、具体步骤1.配置icm20608传感器2.打开CubeMX进行USB配置3. 配置USB3.1 打开USB驱动3.2 声明USB3.3 剪切stm32xxxx_hal_msp.c中的void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)和void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd)函数至board.c3.…

计算机毕业设计SpringBoot+Vue.js母婴商城(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Teigha(ODA<Open Design Alliance>_开放设计联盟)——cad c# 二次开发

需将dll库文件与exe文件放同一路径下&#xff0c;运行exe即可执行。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Thread…

idea 部署 AJ-Report 启动的注意事项

AJ-Report 入门参考&#xff1a; AJ-Report 初学(入门教程) gitee 下载&#xff1a;https://gitee.com/anji-plus/report/releases 根据上面提供的 gitee 下载链接&#xff0c;点击直接下载 最上面的就是最新版本的&#xff0c;旧版本往下拉就可以找到&#xff0c;有三个下载…

智能化客户行为轨迹分析:AI视频监控在大型商场的技术方案

项目背景&#xff1a;为了提升顾客体验并支持精准营销&#xff0c;卖场或商场需要通过智能化手段分析客户在商场内的行为路线。 一、具体需求 1、行为路径分析&#xff1a;跟踪顾客在商场内的移动轨迹&#xff0c;了解顾客的购物习惯和偏好。 2、高频活动区域识别&#xff1a…

Denoising Diffusion Restoration Models论文解读

论文要点 恢复的线性逆问题可以使用预训练的DDPM完成&#xff1a;1. 将降质矩阵使用SVD&#xff0c;得到分解矩阵&#xff1b;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间&#xff1b;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多&#xff0c;比如后续的DDNM、…

基于SpringBoot的校园消费点评管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【NLP 38、激活函数 ④ GELU激活函数】

别盲目&#xff0c;别着急&#xff0c;慢慢走&#xff0c;没事的 —— 25.2.24 一、定义与数学表达式 GELU&#xff08;Gaussian Error Linear Unit&#xff0c;高斯误差线性单元&#xff09;是一种结合概率分布的非线性激活函数&#xff0c;其核心思想是通过输入值服从标准正…

QT:paintEvent、QPainter、QPaintDevice

paintEvent 介绍 在 Qt 编程中&#xff0c;paintEvent 是 QWidget 类中的一个非常重要的虚函数&#xff0c;用于处理绘图事件。当一个 QWidget 或其派生类的实例需要进行重绘操作时&#xff0c;Qt 会自动调用该控件的 paintEvent 函数。 触发时机 窗口首次显示&#xff1a;当…