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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis速成(1)VMware虚拟机安装Redis+Session验证登录注册+MybatisPlus

课程&#xff1a;黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目_哔哩哔哩_bilibili Mybatis与MybatisPlus: 参考springboot&#xff0c;需要额外写mapper.class&#xff0c;在方法上Select等 在ssm中&#xff0c;…

thinkphp下的Job队列处理

需要think-queue扩展&#xff0c;没有的请composer安装一下 "require": {"php": ">7.2.5","topthink/framework": "^6.1","topthink/think-orm": "^2.0","topthink/think-multi-app": &qu…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(五)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷&#xff08;五&#xff09; 第一部分&#xff1a;网络平台搭建与设备安全防护任务书第二部分&#xff1a;网络安全事件响应、数字取证调查、应用程序安全任务书任务 1&#xff1a;应急响应&…

JSON Schema 入门指南:如何定义和验证 JSON 数据结构

文章目录 一、引言二、什么是 JSON Schema&#xff1f;三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例&#xff1a;定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…

VMware虚拟机Mac版安装Win10系统

介绍 Windows 10是由美国微软公司开发的应用于计算机和平板电脑的操作系统&#xff0c;于2015年7月29日发布正式版。系统有生物识别技术、Cortana搜索功能、平板模式、桌面应用、多桌面、开始菜单进化、任务切换器、任务栏的微调、贴靠辅助、通知中心、命令提示符窗口升级、文…

计算机网络:ICMP协议(Internet控制消息协议)介绍

目录 一、简介 二、为什么要有ICMP协议? 三、ICMP协议报文格式 四、ICMP报文的类型 4.1 差错报文 4.2 查询报文 五、ICMP报文的实际案例 5.1 Ping命令 5.2 Traceroute命令 总结 今天和大家聊聊ICMP协议相关的知识,感兴趣的可以一起了解一下! 一、简介 ICMP(Inte…

python读取sqlite温度数据,并画出折线图

需求&#xff1a; 在Windows下请用python画出折线图&#xff0c;x轴是时间&#xff0c;y轴是温度temperature 和体感温度feels_like_temperature 。可以选择县市近1小时&#xff0c;近1天&#xff0c;近1个月的。sqlite文件weather_data.db当前目录下&#xff0c;建表结构如下…

window下kafka安装

kafka下载 下载好,直接解压即可 默认是带有zookeeper(注册中心) 需要先启动zookeeper zookeeper配置 先配置下zookeeper 这个data文件夹是自定建的 随意建在哪里 注意 这里斜杠用和linux一样 启动zookeeper 进入bin/windows目录 启动zookeeper zookeeper-server-start.ba…

开发HarmonyOS NEXT版五子棋游戏实战

大家好&#xff0c;我是 V 哥。首先要公布一个好消息&#xff0c;V 哥原创的《鸿蒙HarmonyOS NEXT 开发之路 卷1&#xff1a;ArkTS 语言篇》图书终于出版了&#xff0c;有正在学习鸿蒙的兄弟可以关注一下&#xff0c;写书真是磨人&#xff0c;耗时半年之久&#xff0c;感概一下…

2月26(信息差)

&#x1f30d;思科和英伟达新旧双王联手 目标重塑网络架构抢占下沉市场 &#x1f384;全球AI大混战升温&#xff01;超越Sora的阿里万相大模型开源 家用显卡都能跑 ✨小米15 Ultra、小米SU7 Ultra定档2月27日 雷军宣布&#xff1a;向超高端进发 1.全球首个&#xff01;人形机器…

物联网通信应用案例之《智慧农业》

案例概述 在智慧农业方面&#xff0c;一般的应用场景为可以自动检测温度湿度等一系列环境情况并且可以自动做出相应的处理措施如简单的浇水和温度控制等&#xff0c;且数据情况可远程查看&#xff0c;以及用户可以实现远程控制。 基本实现原理 传感器通过串口将数据传递到Wi…

C# Unity 唐老狮 No.1 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 目录 C# 1.其他类型转object类…

网络安全扫描--基础篇

前言 1、了解互联网安全领域中日趋重要的扫描技术 2、了解在不同网络场景下扫描技术手段 3、熟悉linux下系统内核防护策略并能大件一个有效的系统防护体系 4、增强工作安全意识&#xff0c;并能有效的实践于工作场景中 目录 1、熟悉主机扫描工具&#xff08;fping&#xff0c;…

P8697 [蓝桥杯 2019 国 C] 最长子序列

P8697 [蓝桥杯 2019 国 C] 最长子序列 题目 分析代码 题目 分析 先分析一波xdm 题意呢就是在s中找有多少个能和t匹配的字符&#xff0c;注意&#xff1a;连续匹配&#xff0c;输出连续的次数 欧克&#xff0c;开始分析&#xff0c;首先&#xff0c;哎~字母&#xff01;还强调…

一篇docker从入门到精通

Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙盒机制&#xff0c;相互之间不会有任何接口&#xff08;类似 iP…

TCP/IP 5层协议簇:物理层

目录 1. 物理层&#xff08;physical layer&#xff09; 2. 网线/双绞线 1. 物理层&#xff08;physical layer&#xff09; 工作设备&#xff1a;网线、光纤、空气 传输的东西是比特bit 基本单位如下&#xff1a;数字信号 信号&#xff1a;【模拟信号&#xff08;放大器&a…

生成对抗网络(GAN)

生成对抗网络&#xff08;GAN&#xff09;:生成对抗网络是一种深度学习模型&#xff0c;由 Ian Goodfellow 等人在 2014 年提出。GAN由生成器和判别器组成&#xff0c;生成器生成假数据&#xff0c;判别器区分真假数据。两者通过对抗训练不断提升&#xff0c;最终生成器能够生成…

FastJSON 默认行为:JSON.toJSONString 忽略 null 字段

完整的 FakeRegistrationController 代码&#xff0c;这让我可以全面分析后端逻辑&#xff0c;特别是为什么空的字段&#xff08;如 compareDate&#xff09;不返回给前端。我将详细分析代码的每个接口&#xff0c;尤其是与 list 请求和字段返回相关的部分&#xff0c;并解释原…

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…

中国的Cursor! 字节跳动推出Trae,开放Windows版(附资源),开发自己的网站,内置 GPT-4o 强大Al模型!

Trae是什么 Trae 是字节跳动推出的免费 AI IDE&#xff0c;通过 AI 技术提升开发效率。支持中文&#xff0c;集成了 Claude 3.5 和 GPT-4 等主流 AI 模型&#xff0c;完全免费使用。Trae 的主要功能包括 Builder 模式和 Chat 模式&#xff0c;其中 Builder 模式可帮助开发者从…