Ubuntu18.04系统下通过ROS控制Kinova真实机械臂-多种实现方式

所用测试工作空间test_ws:包含官网最原始的功能包

一、使用Kinova官方Development center控制真实机械臂

0.在ubuntu系统安装Kinova机械臂的Development center,这一步自行安装,很简单。

1.使用USB连接机械臂和电脑

2.Development center路径:文件夹Other Locations—Computer—opt—JACO-SDK—GUI—Development center(双击打开即可)

在这里插入图片描述在这里插入图片描述

3.我们实验室自己搭建的双臂kinova机器人,通过Virtual Joystick窗口控制各个关节角度或直接控制笛卡尔空间下的位置和姿态。如果我们的kinova机械臂运动起来像乌龟一样慢,在这里还可以调节机械臂的移动速度。

在这里插入图片描述

left-arm左臂序列号:PJ00650019162710001
right-arm右臂序列号:PJ00650019003483-0

4.使用Development center控制真实机械臂的优势

之前我在做机械臂和相机的手眼标定时,需要调整末端执行器夹取标定版的位姿,以获取相机和机械臂的标定矩阵。用过kinova机械臂的都知道,用他的Joystick来控制机械臂到达目标位置是非常困难的,所以这里使用Development center控制机械臂笛卡尔空间的位置,简单方便到达目标位置。

二、使用Kinova官方kinova-ros包控制一个真实机械臂之关节空间控制

1.下载kinova-ros功能包到工作空间的src文件夹

这里注意版本,我的系统是ubuntu18.04+ROS melodic,所下载kinova-ros-melodic-devel

地址为:https://github.com/Kinovarobotics/kinova-ros/tree/melodic-devel

该网页包括一些基础的使用说明,如:
a.要通过usb访问arm,请将udev规则文件10-kinova-arm.rules从~/catkin_ws/src/kinova-ros/kinova_driver/udev复制到/etc/udev/rules.d/:

sudo cp kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/

b. kinova_control文件夹是Gazebo使用的文件

2.关节空间下控制kinova真实机械臂方法一:命令行方式

a.启动launch文件

roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300 kinova_robotSerial:=PJ00650019003483-0

b.打开rviz可视化机械臂

rosrun rviz rviz

Fixed Frame:选root
Add:RobotModel
注意:这里如果满屏幕报错[rospack] Error: package 'kinova_description' not found [librospack]: error while executing command [ERROR] [1693814462.315590353]: Could not load resource [package://kinova_description/meshes/shoulder.dae]: Unable to open file "package://kinova_description/meshes/shoulder.dae".

在这里插入图片描述
原因:没有sorce工作空间

总之,如果出现[rospack] Error: package 'kinova_description' not found [librospack]: error while executing command ,也就是找不到包。回到工作空间source一下就可

source devel/setup.bash

c. 通过关节控制机械臂:Joint position control
例如:

rosrun kinova_demo joints_action_client.py -v -r m1n6s300 degree -- 0 0 0 0 0 10

这里也是,如果报错找不到kinova_demo的package,原因是没有source工作空间。

3.控制kinova真实机械臂方法二:rviz交互方式

控制关节位置的另一种方法是在Rviz中使用交互式Marker。可按照以下步骤进行交互式控制:

#1. launch the drivers: roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300 kinova_robotSerial:=PJ00650019003483-0#2. start the node of interactive conrol: rosrun kinova_driver kinova_interactive_control m1n6s300#3. open Rviz: rosrun rviz rviz#4. in RViz (in the display section) change Global Options -> Fixed Frame to world#5. add robot's model with Add -> RobotModel (in rviz folder)#6. add interactive markers with Add -> InteractiveMarkers (in rviz folder)#7. change InteractiveMarkers -> Updated Topic to /m1n6s300_interactive_control_Joint/update#8. And then, A ring should appear around each joint, you can move the robot by movings those rings.

三、使用Kinova官方kinova-ros包控制一个真实机械臂之笛卡尔位置控制

1.笛卡尔空间下使用终端指令控制Kinova机械臂
a. 启动launch文件
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300 kinova_robotSerial:=PJ00650019003483-0
rosrun kinova_demo pose_action_client.py -v -r m1n6s300 mdeg -- 0.01 0 0 0 0 10

解释: pose_action_client.py函数共有三个参数
参数一:kinova_robotType (eg. m1n6s300)
参数二:unit {mq | mdeg | mrad} (单位参数,分别指的是米和四元数、米和度以及米和弧度)
参数三:pose_value:(坐标为x、y、z),然后是方向(基于不同单位可能是3个值,也可能是4个值)
该函数使用选项-r来告诉机器人角度值是相对的还是绝对的。它还有选项-v用于更详细的输出。

上述指令表示:驱动mico机器人沿+x轴移动1cm,并沿手轴旋转+10度。

重要重要重要:机器人root frame的笛卡尔坐标系由以下规则定义:

原点:原点是底部平面和圆柱体中心线的交点。

+x方向:当面对基板(电源开关和电缆插座所在的位置)时,+x轴指向左侧。

+y方向:当面对基板时,+y轴朝向用户。

+z方向:当机器人站在平面上时,+z轴向上。

2.笛卡尔空间下使用rviz交互方式控制Kinova机械臂

同样,笛卡尔空间下控制机械臂末端运动的另一种方法是在Rviz中使用交互式Marker。可按照以下步骤进行交互式控制:

#1. launch the drivers: roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300 kinova_robotSerial:=PJ00650019003483-0#2. start the node of interactive conrol: rosrun kinova_driver kinova_interactive_control m1n6s300#3. open Rviz: rosrun rviz rviz#4. in RViz (in the display section) change Global Options -> Fixed Frame to world#5. add robot's model with Add -> RobotModel (in rviz folder)#6. add interactive markers with Add -> InteractiveMarkers (in rviz folder)#7. change InteractiveMarkers -> Updated Topic to /m1n6s300_interactive_control_Cart/update#8. And then, a cubic with 3 axis (translation) and 3 rings(rotation) should appear at the end-effector, you can move the robot by dragging the axis or rings.
3.笛卡尔空间下,在不停止运行的情况下,平滑到达多个路径点:

不停地执行多个笛卡尔航路点:动作客户端一次执行一个目标。如果用户想在不停在每个航路点的情况下为机器人提供多个航路点,可以使用AddPoseToCartesianTrajectories服务。该服务将命令的位姿添加到由机器人维护的缓冲区中。机器人按照添加的顺序执行该缓冲区中的位姿,而不会在位姿之间停止。

服务ClearTrajections可用于清除轨迹缓冲区。

四、kinova机械臂手指控制

a. 启动launch文件
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300 kinova_robotSerial:=PJ00650019003483-0
b.启动手指控制指令
rosrun kinova_demo fingers_action_client.py m1n6s300 percent -- 100 100 100

解释:fingers_action_client.py函数有三个参数:
第一个参数:kinova_robotType(例如m1n6s300)
第二个参数:unit{turn|mm|percent}
第三个参数:finger_value。
重点说明1:当第二个单位参数为percent时,代表手指张开和闭合的百分比,很好理解,当为100时,则表示手指完全闭合,如上面的控制指令;当为50时,则手指处于张开一半状态;当为0是,则表示手指完全张开;

重点说明2:当第二个单位参数为turn时,代表手指张开的程度,取值区间为0-6800,0表示完全打开,6800表示完全关闭,一般用turn作为单位,如下参考指令:

rosrun kinova_demo fingers_action_client.py m1n6s300 turn -- 0 0 0

五、笛卡尔导纳模式(力控/拖动示教)

该模式下,我们可以手动(手动)控制机器人。导纳力控制可以通过以下命令启用和停用:

rosservice call /'m1n6s300_driver'/in/start_force_control
rosservice call /'m1n6s300_driver'/in/stop_force_control

用户可以通过向末端执行器/关节施加力/扭矩来移动机器人。当存在笛卡尔/关节位置命令时,结果运动将是力和位置命令的组合。

六、7自由度机械臂零空间控制(鸡头模式:末端执行器位姿不变,机械臂可正常运动)

kinova有7自由度冗余机械臂,虽然我们实验室没有,但还是记录一下。该模式下,末端执行器位姿不变,机械臂可正常运动

${kinova_robotType}_driver /in/set_null_space_mode_state

七、力矩控制:暂时用不到,省略

八、以太网连接

考虑到使用USB连接机械臂时,笔记本电脑和机械臂距离不能太远(USB线长有限),限制了机械臂的使用,所以考虑使用以太网连接连接,官网给出步骤如下:就不翻译了,很容易看懂。

Setup a static IP address for your ethernet network say - 192.168.100.100With the robot connected to your PC via USB open kinova's Develepment CenterOpen tab General/Ethernet - Set robot IP Address to something like - 192.168.100.xxxMake sure MAC address is not all zero. If so contact support@kinova.caPress 'Update' and restart robotIn a terminal ping your robot's IP, your robot is setup for ethernet

要通过ROS中的以太网连接到机器人,只需在robot_parameters.yaml中设置这些参数:

connection_type: Ethernet  
local_machine_IP: [your PC network IP]  
subnet_mask: [your network subnet mask]  

终于总结完了~~

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

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

相关文章

【jmeter】连接mysql无法使用executeQuery()

Can not issue data manipulation statements with executeQuery(). 翻译为: 在这里插入图片描述 看一下JDBC Request里的Query Type 改为Prepared Updata Statement,改完再试一下

生动理解深度学习精度提升利器——测试时增强(TTA)

测试时增强(Test-Time Augmentation,TTA)是一种在深度学习模型的测试阶段应用数据增强的技术手段。它是通过对测试样本进行多次随机变换或扰动,产生多个增强的样本,并使用这些样本进行预测的多数投票或平均来得出最终预…

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想:排序维护最大利润。首先我们需要对工人按照能力排序,前面工人满足的最大利润后面的工人肯定是满足的,所以我们只需要用一个tmp来维护小于等于当前工人的最大利润,然后如何得到tmp&#xff…

flutter开发实战-实现自定义bottomNavigationBar样式awesome_bottom_bar

flutter开发实战-实现自定义bottomNavigationBar样式awesome_bottom_bar 在开发过程中,需要自定义bottomNavigationBar样式,可以自定义实现,这里使用的是awesome_bottom_bar库 一、awesome_bottom_bar 在pubspec.yaml中引入awesome_bottom_…

es滚动查询分析和使用步骤

ES在进行普通的查询时,默认只会查询出来10条数据。我们通过设置es中的size可以将最终的查询结果从10增加到10000。如果需要查询数据量大于es的翻页限制或者需要将es的数据进行导出又当如何? Elasticsearch提供了一种称为"滚动查询"&#xff08…

探索Apache Hive:融合专业性、趣味性和吸引力的数据库操作奇幻之旅

文章目录 版权声明一 数据库操作二 Hive数据表操作2.1 表操作语法和数据类型2.2 Hive表分类2.3 内部表Vs外部表2.4 内部表操作2.4.1 创建内部表2.4.2 其他创建内部表的形式2.4.3 数据分隔符2.4.4 自定义分隔符2.4.5 删除内部表 2.5 外部表操作2.5.1 创建外部表2.5.2 操作演示2.…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时,JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户,从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤: 准备主机和从机: 首…

QT 插件化图像算法软件架构

为什么要做插件化软件架构? 通过 结构化、模块化、松耦合、高内聚、插件化,有助于提升软件开发效率。 1、通过结构化、模块化、插件化方式的软件设计与开发,减少重复开发、重复测试、重复BUG修复,从而提高开发效率、提升代码质量…

flask bootstrap页面json格式化

html <!DOCTYPE html> <html lang"en"> <head><!-- 新 Bootstrap5 核心 CSS 文件 --> <link rel"stylesheet" href"static/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css"><!-- 最新的 Bootstrap5 核心 …

算法通关村17关 | 透析跳跃游戏

1. 跳跃游戏 题目 LeetCode55 给定一个非负整数数组&#xff0c;最初位于数组的第一个位置&#xff0c;数组中的每个元素代表你再该位置可以跳跃的最大长度&#xff0c;判断你是否能够达到最后一个位置。 思路 如果当前位置元素如果是3&#xff0c;我们无需考虑是跳几步&#…

【HTTP爬虫ip实操】智能路由构建高效稳定爬虫系统

在当今信息时代&#xff0c;数据的价值越来越受到重视。对于许多企业和个人而言&#xff0c;网络爬取成为了获取大量有用数据的关键手段之一。然而&#xff0c;在面对反爬机制、封锁限制以及频繁变动的网站结构时&#xff0c;如何确保稳定地采集所需数据却是一个不容忽视且具挑…

【前端】CSS-Grid网格布局

目录 一、grid布局是什么二、grid布局的属性三、容器属性1、display①、语句②、属性值 2、grid-template-columns属性、grid-template-rows属性①、定义②、属性值1&#xff09;、固定的列宽和行高2&#xff09;、repeat()函数3&#xff09;、auto-fill关键字4&#xff09;、f…