技术标签: 机器人 c++ ubuntu 计算机视觉 人工智能
现在UR官方把机器人的仿真包更新了,和原来我用的不一样,这里还有我之前的版本,需要的可以去下载https://github.com/Luchuanzhao/UR5-robotiq85_gripper-gazebo
github地址:https://github.com/ros-industrial/universal_robot/tree/melodic-devel
这个是Ubuntu18.04+ROS melodic版本的,如果需要其他版本请在分支中选择。
下载完成后记得编译工作空间。
这里有两种版本的功能包
建议使用下面经过修改后的功能包。
这个是经过修改的:https://github.com/MetaMemoryT/robotiq_85_gripper-1
这个是ros-industrial的:https://github.com/ros-industrial/robotiq
我用的是修改过的,也就是第一个仓库中的,因为ros-industrial那个在使用robotiq_2f_85_gripper_visualization功能包时,其中的夹爪基座的dae文件是不正确的,在仓库的issue中也有人修改过,但是我还是没有修改成功,就用了另外一个仓库的功能包。而且这个包的好处就是支持在gazebo中仿真,因为作者已经修改好了xacro文件,添加了gazebo仿真必需的部分。
由于在robotiq夹爪中有几个关节是被动关节(mimic joint),标准Gazebo不支持Mimic 关节仿真, 所以需要安装一个插件。第一个功能包中用到了这个插件,如果出问题就用下面这个仓库中的代码代替:https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins
这个仓库含有的插件很全:https://github.com/JenniferBuehler/gazebo-pkgs
下载好之后记得编译。
下面来说一下如果下载的是最原始版本的代码,如何修改。(如果使用的是第一个经过修改的代码,这部分请略过)
找到robotiq_2f_140_gripper_visualization/urdf/robotiq_arg2f_transmission.xacro
这个文件,修改为:
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="robotiq_arg2f_transmission" params="prefix">
<transmission name="${prefix}finger_joint_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${prefix}finger_joint">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="${prefix}finger_joint_motor">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
<gazebo>
<!-- loading plugin: mimic joints works in gazebo now-->
<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_4">
<joint>${prefix}finger_joint</joint>
<mimicJoint>${prefix}right_outer_knuckle_joint</mimicJoint>
<multiplier>1.0</multiplier>
</plugin>
<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_2">
<joint>${prefix}finger_joint</joint>
<mimicJoint>${prefix}left_inner_finger_joint</mimicJoint>
<multiplier>-1.0</multiplier>
<!--<offset>0.0</offset>-->
</plugin>
<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_1">
<joint>${prefix}finger_joint</joint>
<mimicJoint>${prefix}right_inner_finger_joint</mimicJoint>
<multiplier>-1.0</multiplier>
</plugin>
<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_3">
<joint>${prefix}finger_joint</joint>
<mimicJoint>${prefix}left_inner_knuckle_joint</mimicJoint>
<multiplier>1.0</multiplier>
</plugin>
<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_5">
<joint>${prefix}finger_joint</joint>
<mimicJoint>${prefix}right_inner_knuckle_joint</mimicJoint>
<multiplier>1.0</multiplier>
</plugin>
</gazebo>
</xacro:macro>
</robot>
如果运行时有报错Deprecated syntax, please prepend ‘hardware_interface/’ to ‘PositionJointInterface’ within the tag in joint ‘finger_joint’
就把上面文件中的
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
改成
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
单独仿真夹爪时,需要用到ros-control,在此文件中添加:
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/</robotNamespace>
<legacyModeNS>true</legacyModeNS>
</plugin>
</gazebo>)
和ur机器人连接到一块时,一定要删掉这段!
在gazebo中仿真夹爪,要给它控制参数,即PID参数,在robotiq_2f_85_gripper_visualization
下创建config
文件夹,在config
下创建gazebo_controller.yaml
文件,把下面代码复制进去:
# Note: You MUST load these PID parameters for all joints that are using the
# PositionJointInterface, otherwise the arm + gripper will act like a giant
# parachute, counteracting gravity, and causing some of the wheels to lose
# contact with the ground, so the robot won't be able to properly navigate. See
# https://github.com/ros-simulation/gazebo_ros_pkgs/issues/612
gazebo_ros_control:
pid_gains:
# these gains are used by the gazebo_ros_control plugin
finger_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
# the following gains are used by the gazebo_mimic_joint plugin
left_inner_knuckle_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
left_inner_finger_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
right_outer_knuckle_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
right_inner_knuckle_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
right_inner_finger_joint:
p: 20.0
i: 0.1
d: 0.0
i_clamp: 0.2
antiwindup: false
publish_state: true
继续在config
下创建gripper_controller_robotiq.yaml
文件:
gripper_controller:
type: position_controllers/JointTrajectoryController
joints:
- finger_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
finger_joint: {
trajectory: 0.01, goal: 0.01}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
继续在config
下创建joint_state_controller.yaml
文件:
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
在robotiq_2f_85_gripper_visualization/launch
文件夹下创建gripper_gazebo.launch
文件:
<?xml version="1.0" ?>
<launch>
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find robotiq_2f_85_gripper_visualization)/urdf/robotiq_arg2f_85_model.xacro" />
<!-- Load gazebo controller configurations -->
<!-- Note: You MUST load these PID parameters for all joints that are using
the PositionJointInterface, otherwise the arm + gripper will act like a
giant parachute, counteracting gravity, and causing some of the wheels
to lose contact with the ground, so the robot won't be able to properly
navigate. See
https://github.com/ros-simulation/gazebo_ros_pkgs/issues/612 -->
<rosparam file="$(find robotiq_2f_85_gripper_visualization)/config/gazebo_controller.yaml" command="load" />
<!-- Gazebo -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="paused" value="false" />
</include>
<!-- Spawn the robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -x 0 -y 0 -z 0.1" />
<!-- Load ros_control controller configurations -->
<rosparam file="$(find robotiq_2f_85_gripper_visualization)/config/joint_state_controller.yaml" command="load" />
<rosparam file="$(find robotiq_2f_85_gripper_visualization)/config/gripper_controller_robotiq.yaml" command="load" />
<!-- Start the controllers -->
<node name="controller_spawner" pkg="controller_manager" type="spawner" output="screen" ns="/" args="joint_state_controller gripper_controller"/>
<!-- Robot state publisher -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" />
<node name="gui_controller" pkg="rqt_joint_trajectory_controller" type="rqt_joint_trajectory_controller" />
</launch>
其中最后调用的rqt_joint_trajectory_controller
是一个工具,可以实时发布并控制机器人各关节的角度,如果没安装可以使用sudo apt-get install ros-melodic-joint-trajectory-controller
来安装。
编译之后, 用roslaunch robotiq_2f_85_gripper_visualization gripper_gazebo.launch
命令就可以在gazebo中看到夹爪了(后面再放截图)。
这里需要修改ur5的描述文件
找到universial_robot/ur_description/urdf/
文件夹,新建一个ur5_robot_robotiq85_gripper.urdf.xacro
文件或直接复制ur5_robot.urdf.xacro
,然后把名字改成这个也可以。这个文件中包含如下代码:
可以对比下和原来的文件相比增加了哪些代码。
<?xml version="1.0"?>
<robot xmlns:xacro="http://wiki.ros.org/xacro" name="ur5" >
<xacro:arg name="transmission_hw_interface" default="hardware_interface/PositionJointInterface"/>
<!-- common stuff -->
<xacro:include filename="$(find ur_description)/urdf/common.gazebo.xacro" />
<!-- ur5_robotiq85_gripper -->
<xacro:include filename="$(find ur_description)/urdf/ur5.urdf.xacro" />
<xacro:include filename="$(find robotiq_85_description)/urdf/robotiq_85_gripper.urdf.xacro" />
<!-- arm -->
<xacro:ur5_robot prefix="" joint_limited="false"
transmission_hw_interface="$(arg transmission_hw_interface)"
/>
<!--robotiq_85_gripper-->
<xacro:robotiq_85_gripper prefix="" parent="ee_link"/>
<link name="world" />
<joint name="world_joint" type="fixed">
<parent link="world" />
<child link = "base_link" />
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>
</robot>
找到universial_robot/ur_description/launch/
文件夹,下面有view_ur5.launch
和ur5_upload.launch
两个文件,可以分别复制一份,然后进行修改。新复制的view_ur5.launch
可以命名为view_ur5_gripper.launch
,其中的
<include file="$(find ur_description)/launch/ur5_upload.launch"/>
修改为
<include file="$(find ur_description)/launch/ur5_upload_gripper.launch"/>
新复制的ur5_upload.launch
可以命名为ur5_upload_gripper.launch
,其中的
<param unless="$(arg limited)" name="robot_description" command="$(find xacro)/xacro --inorder $(find ur_description)/urdf/ur5_robot.urdf.xacro transmission_hw_interface:=$(arg transmission_hw_interface)" />
改为
<param unless="$(arg limited)" name="robot_description" command="$(find xacro)/xacro --inorder $(find ur_description)/urdf/ur5_robot_robotiq85_gripper.urdf.xacro transmission_hw_interface:=$(arg transmission_hw_interface)" />
上边这些是在rviz中查看的launch文件,下面,说一下gazebo中如何修改:
找到universial_robot/ur_gazebo/launch/
文件夹,下面的ur5.launch
修改如下:
将其中的
<include file="$(find ur_description)/launch/ur5_upload.launch">
修改为
<include file="$(find ur_description)/launch/ur5_upload_robotiq85_gripper.launch">
添加下面这两行代码:
<rosparam file="$(find robotiq_85_gazebo)/controller/gripper_controller_robotiq.yaml" command="load"/>
<node name="gui_controller" pkg="rqt_joint_trajectory_controller" type="rqt_joint_trajectory_controller" />
这一行:
<node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller" respawn="false" output="screen"/>
修改为
<node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller gripper" respawn="false" output="screen"/>
这样做可以对夹爪进行控制。
至此,所有文件修改完毕。
首先测试rviz中,运行roslaunch ur5_description view_ur5_gripper.launch
,不出意外应该可以看到以下效果,在joint_state_publisher_gui中调整可以控制机械臂和夹爪。
测试gazebo中效果:
运行roslaunch ur_gazebo ur5.launch
,可以看到以下效果:
通过滑动右边划块可以控制机械臂运动,controller选择gripper可以控制夹爪。
到上面应该就UR+robotiq85的配置全部完成了,所有涉及的代码我放到github上:UR5+robotiq85
我的仿真会出现夹爪一直在抖的问题,机械臂移动几下或者过一段时间,夹爪就散架了,没能找到解决方案,修改关节的effort也不行,希望有大佬如果可以解决这个问题,能够不吝赐教!
由于这个夹爪我没法使用,所以又换了dh_gripper,参考我的另一篇文章UR5+dh_ag95_gripper夹爪配置
现在问题解决啦,下一些插件就行了,参考另一篇博客:https://blog.csdn.net/qq_44642372/article/details/124462220
参考以下文章:
https://blog.csdn.net/Tepmoe/article/details/119455411
https://blog.csdn.net/weixin_42268975/article/details/106268506
文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法