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

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."/>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …

【落羽的落羽 数据结构篇】树、二叉树

文章目录 一、树1. 树的概念和结构2. 树的相关术语 二、二叉树1. 概念与结构2. 满二叉树3. 完全二叉树4. 二叉树的性质5. 二叉树的存储结构 一、树 1. 树的概念和结构 之前我们学习了线性表&#xff0c;今天我们再来接触一种全新的数据结构——树。 树是一种非线性的数据结构…

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴&#xff1a;可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题&#xff0c;并非是软件内自主实现的PDF合并&#xff0c;而是调用的pdftk这一工具&#xff0c;但楼主并没有提供pdftk&#xff0c;而…

Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因

Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 数据…

llama.cpp 一键运行本地大模型 - Windows

文章目录 llama.cpp 一键运行本地大模型 - Windows嘿&#xff0c;咱来唠唠 llama.cpp 这玩意儿&#xff01;gguf 格式是啥&#xff1f;咱得好好说道说道基座模型咋选&#xff1f;所需物料&#xff0c;咱得准备齐全咯核心命令&#xff0c;得记牢啦运行方式咋选&#xff1f;测试应…

BGP状态和机制

BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…

Holoens2开发报错记录02_通过主机获取彩色和深度数据流常见错误

01.E1696 E1696 无法打开源文件 “stdio.h” 解决方法&#xff1a; 更新一下SDK 1&#xff09;打开Visual Studio Installer&#xff0c;点击修改 2&#xff09;安装详细信息中自己系统对应的SDK&#xff0c;点击修改即可 02.WinError 10060 方法来源 解决方法&#xff1a…

labview关于计时器的使用

通过使用计时器函数&#xff0c;可以对采集和保存实现很好的控制&#xff0c;因为之前通过等待函数有出现程序卡死的情况&#xff0c;这里用到定时器函数来实现时间控制。 根据用户输入的采集频率&#xff0c;和采集的单位来确定是否上次采集的时间间隔减去这次计时器的时间是…

go语言环境下载与配置(Windows)

下载 Go下载 - Go语言中文网 - Golang中文社区 建议在D盘中创建文件夹安装到 D 盘 &#xff0c;方便进行管理&#xff0c;然后进行傻瓜式安装。 安装 验证安装 go version 安装成功 配置环境变量 winE --> 右击此电脑 --> 选择属性 --> 高级系统设置 --> 点击…

低延迟,高互动:EasyRTC的全场景实时通信解决方案

在数字化时代&#xff0c;实时通信技术已成为连接人与人、人与设备的重要桥梁。无论是在线教育、远程医疗、智能家居&#xff0c;还是企业协作&#xff0c;高效的实时互动体验都是提升效率和满意度的关键。而 EasyRTC&#xff0c;作为领先的实时通信解决方案&#xff0c;凭借其…

车载诊断架构 --- LIN节点路由转发注意事项

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

浏览器深度解析:打造极速、安全、个性化的上网新体验

在数字化时代,浏览器作为我们获取信息、娱乐休闲的重要工具,其性能与功能直接影响着我们的上网体验。今天,我将为大家介绍一款备受好评的浏览器——Yandex浏览器,并深入解析其独特功能与优势,帮助大家更好地了解并选择这款上网神器。 一、知名公司背书,开源项目融合 Yan…

vite react 项目打包报错处理

Could not find a declaration file for module lodash 安装 Lodash 类型声明文件 # 使用 npm npm install --save-dev types/lodash# 使用 yarn yarn add -D types/lodash 打包成功

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…

[实现Rpc] 测试 | rpc部分功能联调 | debug | 理解bind

目录 服务端 客户端 Debug 运行 总结 服务端 调用 on Request 对请求做出回应 on 对...做处理 #include "../../common/net.hpp" #include "../../common/message.hpp" #include "../../common/dispatcher.hpp" #include "../../se…

LeetCode每日精进:622.设计循环队列

题目链接&#xff1a;622.设计循环队列 题目描述&#xff1a; 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个…

网络安全学习-常见安全漏洞检测以及修复方法-1

渗*透测试 渗透测试就是模拟攻击者入侵系统&#xff0c;对系统进行一步步渗透&#xff0c;发现系统的脆弱环节和隐藏风险。形成测试报告提供给系统的所有者&#xff0c;所有者根据报告对系统进行加固&#xff0c;提升系统的安全性&#xff0c;防止真正的攻击者入侵。 渗透测试…

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)

鸿蒙开发深入浅出01&#xff08;基本环境搭建、页面模板与TabBar&#xff09; 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…

C/C++ | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (4)题目参考答案基础容器序列容器std:…