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]
终于总结完了~~
相关文章:
Ubuntu18.04系统下通过ROS控制Kinova真实机械臂-多种实现方式
所用测试工作空间test_ws:包含官网最原始的功能包 一、使用Kinova官方Development center控制真实机械臂 0.在ubuntu系统安装Kinova机械臂的Development center,这一步自行安装,很简单。 1.使用USB连接机械臂和电脑 2.Development center…...
聊聊如何玩转spring-boot-admin
前言 1、何为spring-boot-admin? Spring Boot Admin 是一个监控工具,旨在以良好且易于访问的方式可视化 Spring Boot Actuators 提供的信息 快速开始 如何搭建spring-boot-admin-server 1、在服务端项目的POM引入相应的GAV <dependency><grou…...
rocky(centos) 安装redis,并设置开机自启动
一、下载并安装 1、官网下载Redis 并安装 Download | RedisRedisYou can download the last Redis source files here. For additional options, see the Redis downloads section below.Stable (7.2)Redis 7.2 …https://redis.io/download/ 2、上传下载好的redis压缩包到 /…...
Flask狼书笔记 | 06_电子邮件
文章目录 6 电子邮件6.1 使用Flask-Mail发送6.2 使用事务邮件服务SendGrid6.3 电子邮件进阶6.4 小结 6 电子邮件 Web中,我们常在用户注册账户时发送确认邮件,或是推送信息。邮件必要的字段包含发信方(sender),收信方(to),邮件主题…...
ChatGPT追祖寻宗:GPT-1论文要点解读
论文地址:《Improving Language Understanding by Generative Pre-Training》 最近一直忙着打比赛,好久没更文了。这两天突然想再回顾一下GPT-1和GPT-2的论文, 于是花时间又整理了一下,也作为一个记录~话不多说,让我们…...
回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现
这周有粉丝私信想让我出一期GWO-KELM的文章,因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现,ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点,而KEL…...
Mysql JSON
select json_extract(c2, $.a) select c2->"$.a" // json_extract的语法糖 (取出的值会保留"双引号" so不适合实战) 注:mysql若是引擎Mariadb则不支持json操作符->>语法糖 select c2->…...
使用Vue + axios实现图片上传,轻松又简单
目录 一、Vue框架介绍 二、Axios 介绍 三、实现图片上传 四、Java接收前端图片 一、Vue框架介绍 Vue是一款流行的用于构建用户界面的开源JavaScript框架。它被设计用于简化Web应用程序的开发,特别是单页面应用程序。 Vue具有轻量级、灵活和易学的特点…...
C# 中什么是重写(子类改写父类方法)
方法重写是指在继承关系中,子类重新实现父类或基类的某个方法。这种方法允许子类根据需要修改或扩展父类或基类的方法功能。在面向对象编程中,方法重写是一种多态的表现形式,它使得子类可以根据不同的需求和场景提供不同的方法实现。 方法重…...
【Leetcode-面试经典150题-day22】
目录 97. 交错字符串 97. 交错字符串 题意: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s s1 s2 …...
LDAP服务器如何重启
1、find / -name ldap 该命令只会从根路径下查看ldap文件夹 find / -name ldap2、该命令会从根路径/查看所有包含ldap路径的文件夹,会查询出所有,相当于全局查询 find / -name *ldap*2、启动OpenLADP 找到LDAP安装目录后,执行以下命令 #直…...
AP51656 LED车灯电源驱动IC 兼容替代PT4115 PT4205 PWM和线性调光
产品描述 AP51656是一款连续电感电流导通模式的降压恒流源 用于驱动一颗或多颗串联LED 输入电压范围从 5V 到 60V,输出电流 可达 1.5A 。根据不同的输入电压和 外部器件, 可以驱动高达数十瓦的 LED。 内置功率开关,采用高端电流采样设置 …...
浅析安防视频监控平台EasyCVR视频融合平台接入大量设备后是如何维持负载均衡的
安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…...
SIEM 中不同类型日志监控及分析
安全信息和事件管理(SIEM)解决方案通过监控来自网络的不同类型的数据来确保组织网络的健康安全状况,日志数据记录设备上发生的每个活动以及整个网络中的应用程序,若要评估网络的安全状况,SIEM 解决方案必须收集和分析不…...
【java基础复习】java中的数组在内存中是如何存储的?
基本数据类型与内存存储数组类型与内存存储为什么数组需要两块空间?感谢 💖 基本数据类型与内存存储 首先,让我们回顾一下基本数据类型的内存存储方式。对于一个基本类型变量,例如int类型的变量a,内存中只有一块内存空…...
MySQL数据库 MHA高可用
MySQL MHA 什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…...
leetcode669. 修剪二叉搜索树(java)
修剪二叉搜索树 题目描述递归代码演示: 题目描述 难度 - 中等 LC - 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留…...
计算机网络的故事——确认访问用户身份的认证
确认访问用户身份的认证 HTTP使用的认证方式:BASIC认证(基本认证)、DIGEST(摘要认证)、SSL客户端认证、FormBase认证(基于表单认证)。 基于表单的认证:涉及到session管理以及cookie…...
C#禁用或启用任务管理器
参考文档https://zhuanlan.zhihu.com/p/95156063 借助上述参考文档里的C#操作注册表类,禁用或启用任务管理器 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HideTaskMgr { class Program { …...
【Redis】NoSQL之Redis的配置及优化
关系数据库与非关系数据库 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言&a…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
