Kinova Jaco gen2 7dof 机械臂使用学习记录

目录

1. 基本操作(摘自kinova官方github)

1.1 打开kinova驱动

 1.2 回到初始位姿

1.3 通过关节角度控制

1.4 打印各个关节信息

1.5 通过笛卡尔坐标控制机械臂运动

1.6 控制夹爪

1.7 在仿真中进行交互控制1.7.1 打开交互式节点

1.7.2 打开仿真

1.8 通过 关节空间速度控制 和 笛卡尔空间速度控制

1.8.1 关节空间速度

1.8.2 笛卡尔空间速度

1.8.3 注意点

 1.9 Kinova ROS相关服务命令

1.9.1 复位机械臂到初始位置(Home Position)

1.9.2 启用 或 禁用 ROS 控制命令

1.10 笛卡尔容顺模式(Cartesian Admittance Mode)

1.10.1 启动 与 停止容顺模式

1.10.2 功能与特性

1.10.3 适用场景

1.10.4 注意事项

1.11 重新校准力矩传感器 (Re-calibrate Torque Sensors)

1.12 支持7自由度机械臂(7 DOF Spherical Wrist Robot)

1.12.1 7自由度机械臂的特点

1.12.2 在冗余空间中移动机械臂(Null Space Motion)

1.12.3 应用场景

1.12.4 注意事项

1.13 力矩控制(Torque Control)

1.13.1 力矩控制操作步骤

1.13.2 重力补偿(Gravity Compensation)

1.13.3 力矩控制的非活动处理

1.13.4 注意事项

1.14 高级参数设置

1.14.1 通用参数

1.14.2 以太网连接参数

1.14.3 力矩控制参数

1.15 以太网连接步骤(Ethernet Connection)

2. Kinova_moveit 功能包

2.1 环境配置

2.1.1 支持的版本

2.1.2 新版本功能

2.1.3 安装说明

2.2 Kinova机器人MoveIt配置文件:

2.1.1 移动组(move group)

2.2.2 启动MoveIt!和RViz

2.2.3 RViz MoveIt! 插件

2.2.4 使用MoveIt API与机器人交互

2.2.5 运动学插件

3. Kinova_gazebo功能包

3.1 环境配置

3.1.1 支持的版本

3.1.2 本次版本的新特性

3.1.3 安装说明

3.2 Gazebo/ros_control 参数已添加到 Gazebo

3.3 ros_control

3.4 Launching Gazebo with ros_control

3.4.1 使用以下命令启动 Gazebo

3.4.2 Moving the Robot

3.4.3 Interface with MoveIt

P.S. 本文基于 Kinova Gen2 7Dof型号进行修改和编写

1. 基本操作(摘自kinova官方github)

1.1 打开kinova驱动

roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2s7s300 use_urdf:=true

 1.2 回到初始位姿

rosservice call /j2s7s300_driver/in/home_arm

1.3 通过关节角度控制

6个数字对应6个关节角度

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

1.4 打印各个关节信息

rostopic echo -c /j2s7s300_driver/out/joint_state 

1.5 通过笛卡尔坐标控制机械臂运动

rosrun kinova_demo pose_action_client.py -v -r j2s7s300 mdeg -- 0.01 0 0 0 0 10

mq:米(位置)+ 四元数(姿态)
mdeg:米(位置)+ 角度(姿态)
mrad:米(位置)+ 弧度(姿态)
-r: 指定目标值是相对值还是绝对值
-v: 输出详细信息
-h: 显示帮助信息
当前位姿: 话题/${kinova_robotType}_driver/out/tool_pose。
末端力信息: 话题/${kinova_robotType}_driver/out/tool_wrench。
如果需要执行多个连续路径点,可以使用服务**AddPoseToCartesianTrajectories**,将路径点添加到缓存中
机械臂会按顺序执行缓存中的路径点,而不在每个路径点停顿
清除路径点缓存
使用服务**ClearTrajectories**清除路径点缓存

1.6 控制夹爪

rosrun kinova_demo fingers_action_client.py j2s7s300 percent -- 100 100 100

(三个都是100就是完全闭合,都是0就算完全张开)
当前手指位置信息:/j2s7s300_driver/out/finger_position 

1.7 在仿真中进行交互控制
1.7.1 打开交互式节点

rosrun kinova_driver kinova_interactive_control j2s7s300

1.7.2 打开仿真

rosrun rviz rviz

更改 Global Options -> Fixed Frame 为 world
添加机器人模型:Add -> RobotModel
添加交互式标记:Add -> InteractiveMarkers
在 InteractiveMarkers -> Update Topic 中设置为 /j2s7s300_interactive_control_Cart/update

1.8 通过 关节空间速度控制 和 笛卡尔空间速度控制

1.8.1 关节空间速度

(1)操作方法

  • 目标:以指定速度控制机械臂的关节运动。
  • 实现:通过向 /‘${kinova_robotType}_driver‘/in/joint_velocity 主题发布 kinova_msgs/JointVelocity 消息。
  • 示例命令
    rostopic pub -r 100 /j2s7s300_driver/in/joint_velocity kinova_msgs/JointVelocity "{joint1: 0.0, joint2: 0.0, joint3: 0.0, joint4: 0.0, joint5: 0.0, joint6: 10.0}"
    • 此命令将让 Jaco 机械臂的第六个关节以约 10 度/秒 的速度旋转。

(2)注意事项

  • 发布频率:频率必须为 100Hz,因为机械臂内部 DSP 的循环时间是 10ms(即 100Hz)。
    • 高于 100Hz:速度不会增加,但可能导致指令缓存堆积,机械臂在停止后继续运动一段时间。
    • 低于 100Hz:机械臂无法达到目标速度。
  • 停止运动:当停止向该主题发布消息时,运动也会随之停止。

1.8.2 笛卡尔空间速度

(1)操作方法

  • 目标:控制机械臂末端执行器的线速度和角速度。
  • 实现:通过向 /‘${kinova_robotType}_driver‘/in/cartesian_velocity 主题发布 kinova_msgs/PoseVelocity 消息。
  • 消息字段
    • twist_linear_x, twist_linear_y, twist_linear_z: 线速度(单位:米/秒)。
    • twist_angular_x, twist_angular_y, twist_angular_z: 角速度(单位:弧度/秒)。
  • 示例命令
    rostopic pub -r 100 /j2s7s300_driver/in/cartesian_velocity kinova_msgs/PoseVelocity "{twist_linear_x: 0.0, twist_linear_y: 0.0, twist_linear_z: 0.0, twist_angular_x: 0.0, twist_angular_y: 0.0, twist_angular_z: 10.0}"
    • 此命令将让机械臂末端以 10 弧度/秒 的角速度旋转。

(2)坐标系定义

  • 笛卡尔坐标系以机械臂基座为参考:
    • 原点:基座底面与圆柱中心线的交点。
    • +x:面对基座面板(有电源开关和电缆接口)时向左。
    • +y:面对基座面板时向外(朝向用户)。
    • +z:机械臂垂直站立时向上。

(3)注意事项

  • 角速度定义:基于旋转矩阵的反对称矩阵计算角速度向量
  • 停止运动:同样,发布停止后运动停止。

1.8.3 注意点

  1. 连续运动风险

    • 速度控制是连续的,没有明确的停止位置。
    • 如果不小心,可能导致意外碰撞或超出关节/工作空间限制。
  2. 频率要求:需要严格维持 100Hz 发布频率以确保准确控制。

  3. 缓存效应:内部缓存可能导致停止发布后机械臂仍短暂运动,应提前预估。

  4. 自定义控制:可以通过 ROS 的节点编写脚本实现更精确的速度控制逻辑,例如在特定条件下自动停止。


这种速度控制非常适合需要动态调整运动速度的任务,例如:

  • 跟随目标(如动态抓取)。
  • 持续追踪指定路径(如喷涂或焊接任务)。

 1.9 Kinova ROS相关服务命令

1.9.1 复位机械臂到初始位置(Home Position)

  • 命令:
rosservice call /j2s7s300_driver/in/home_arm
  • 功能:将机械臂移动到预定义的初始位置(Home Position)。
  • 特点:
    • 该命令不需要任何参数。
    • 初始位置可以通过 Kinova SDK 或 JacoSoft 自定义。

1.9.2 启用 或 禁用 ROS 控制命令

  • 启用控制:
rosservice call /j2s7s300_driver/in/start
  • 功能:允许机械臂接受来自 ROS 的运动命令。
  • 禁用控制:
rosservice call /j2s7s300_driver/in/stop
  • 功能:暂停机械臂接收 ROS 指令的控制,但机械臂仍可通过操纵杆(Joystick)控制。

  • 注意:
    • 当禁用 ROS 控制(stop)后,机械臂不会响应 ROS 发送的命令,直到再次启用(start)。
    • 启用和禁用 ROS 控制适用于需要手动操作或暂停 ROS 控制的场景。

1.10 笛卡尔容顺模式(Cartesian Admittance Mode)

笛卡尔容顺模式允许用户通过施加物理力(手动推动或拉动机械臂)来控制机械臂的运动。这种模式通常用于力控任务示教模式

1.10.1 启动 与 停止容顺模式

启动容顺模式:
启动后,用户可以通过施加力/扭矩(手动移动)来控制机械臂。

rosservice call /j2s7s300_driver/in/start_force_control

停止容顺模式:
停止后,机械臂将不再响应施加的外力,仅接受传统的位置或速度控制命令。

rosservice call /j2s7s300_driver/in/stop_force_control

1.10.2 功能与特性

  • 用户可以通过对机械臂末端执行器(End-effector)或关节施加力/扭矩来改变其位置或姿态。

  • 当同时发送笛卡尔空间或关节空间的位置命令时,机械臂的运动将是外力(手动力控)和位置命令的组合

    • 例如,在启动容顺模式的情况下,你可以在 ROS 中发送一个运动指令,同时用手辅助调整机械臂路径。

1.10.3 适用场景

  • 示教任务:
    用户手动引导机械臂,通过力控模式使其记录路径。

  • 柔性操作:
    允许机械臂在受限环境下,通过轻微推动灵活调整动作路径。

1.10.4 注意事项

  • 使用力控模式时,需确保环境安全,避免由于误操作导致机械臂意外运动。

  • 如果力控不响应或失效,可以检查是否正确启动模式,或者通过home_arm命令复位机械臂。

这种模式非常适合用来开发基于人机协作柔性力控的功能。

1.11 重新校准力矩传感器 (Re-calibrate Torque Sensors)

随着时间推移,机械臂的力矩传感器可能会出现偏移,导致报告的绝对力矩值不准确。为了解决这一问题,需要重新校准传感器。以下是校准过程的具体步骤:

1.11.1 校准步骤

  1. 将机械臂调整到蜡烛状姿态(Candle-like Pose):

    • 所有关节角度设为 180°,即使机械臂的连杆竖直向上。

    • 这种姿态确保关节处的力矩为零。

  2. 调用校准服务:

        使用以下命令设置所有关节的力矩为零:

rosservice call /j2s7s300_driver/in/set_zero_torques

1.11.2 注意事项

  • 确保无外力干扰:
    在执行校准时,确保机械臂未受到外部力的影响(如碰触或移动)。

  • 检查蜡烛状姿态:
    校准前,请确认机械臂已准确移动到蜡烛状姿态。

  • 何时需要校准:

    • 力控操作(例如容顺模式)表现异常。

    • 传感器反馈的力矩值与预期偏差较大。

    • 定期维护机械臂。

1.11.3 为什么校准重要?

  • 校准后可以恢复传感器的精度,确保在力控和其他需要精确力矩测量的任务中表现可靠。

  • 若长期未校准,可能导致:

    • 误判负载情况。

    • 力控或路径规划中出现偏差。

校准是保证机械臂长时间运行精度的重要维护措施。

1.12 支持7自由度机械臂(7 DOF Spherical Wrist Robot)

1.12.1 7自由度机械臂的特点

  1. 支持所有已有的控制方法:
    对于7自由度机械臂,之前用于控制6自由度机械臂的方法均适用,包括关节控制、笛卡尔控制、力控等。

  2. 逆运动学(Inverse Kinematics, IK):

    • 7自由度机械臂的逆运动学由于关节冗余性,会产生无限多种解。

    • 冗余解的选择(冗余度解析)基于以下标准:

      • 关节范围限制。

      • 接近奇异点的程度。

1.12.2 在冗余空间中移动机械臂(Null Space Motion)

7自由度机械臂允许在冗余空间内调整关节姿态,而保持末端执行器的位置和方向不变。

  1. 功能描述:

    • 通过调用 KinovaAPI 提供的新函数 StartRedundantJointNullSpaceMotion(),可以进入冗余空间运动模式。

    • 在该模式下,用户可通过操纵杆或其他方式调整关节姿态,末端执行器保持不动。

  2. 激活/关闭冗余空间运动模式:

        使用以下ROS服务设置模式状态:

rosservice call /j2s7s300_driver/in/set_null_space_mode_state "state: 1" # 开启 
rosservice call /j2s7s300_driver/in/set_null_space_mode_state "state: 0" # 关闭

      3. 使用操纵杆进行冗余运动:

        在冗余运动模式下,可以使用Kinova操纵杆直接控制机械臂在冗余空间内的调整。

1.12.3 应用场景

  • 优化路径规划:
    在不改变末端任务位置的情况下,通过调整关节姿态,优化运动学性能。

  • 避免奇异点:
    通过冗余调整,可以远离奇异点,提高运动稳定性。

  • 实现更灵活的操作:
    在有限空间或复杂任务中,冗余自由度可以提供更多姿态选择,增强操作灵活性。

1.12.4 注意事项

  • 冗余空间运动模式仅适用于7自由度机械臂

  • 开启冗余运动模式后,机械臂的位置和方向需要确保受到精确控制,以避免碰撞或误动作。

  • 冗余运动调整应与任务规划相结合,充分利用7自由度的特性。

1.13 力矩控制(Torque Control)

1.13.1 力矩控制操作步骤

1.(可选)设置力矩参数:

  • 默认参数通常满足大多数应用,但用户可以根据需求调整。
  • 调整后通过以下服务应用参数:
rosservice call /j2s7s300_driver/in/set_torque_control_parameters

2. 从位置控制切换到力矩控制:
使用以下服务切换模式:

rosservice call /j2s7s300_driver/in/set_torque_control_mode

3. 发布力矩命令:
通过以下命令为第6个关节设置力矩值:

rostopic pub -r 100 /j2n6s300_driver/in/joint_torque kinova_msgs/JointTorque "{joint1: 0.0, joint2: 0.0, joint3: 0.0, joint4: 0.0, joint5: 0.0, joint6: 1.0}"

1.13.2 重力补偿(Gravity Compensation)

1. 默认重力补偿:

  • 重力补偿在机器人底层默认开启。
  • 如果不施加额外的力矩命令(零力矩),机器人不会因重力坠落。
  • 此时可将机器人视为“重力补偿模式”,可以通过手动推拉关节自由移动机械臂。

2. 进入重力补偿模式:
通过以下命令启动:

rosrun kinova_demo gravity_compensated_mode.py j2s7s300

  • 机器人会进入蜡烛状(candle-like)姿态。
  • 设置所有关节的力矩为零。
  • 启动力矩控制模式,同时发布力矩命令 [0, 0, 0, 0, 0, 0],允许通过推拉关节移动机器人。
  • 控制是否包括重力补偿:

用户可以通过以下参数控制力矩发布是否包含重力补偿:

// yaml
publish_torque_with_gravity_compensation: false

1.13.3 力矩控制的非活动处理

  • 机制:
    如果超过指定时间未发送力矩命令(默认250ms),控制器将执行以下操作之一:

    1. 切换回位置模式(Option 0):
      默认用于通用模式。
    2. 力矩命令归零(Option 1):
      默认用于Kinova经典机器人(Jaco2和Mico)。
  • 说明:
    默认行为可根据需要修改,确保控制过程的安全性。


1.13.4 注意事项

  1. 安全性: 力矩控制模式可能带来较高的风险,确保充分测试和验证后再应用到实际环境中。
  2. 频率要求: 发布频率为100Hz是强制要求。低于此频率可能无法实现指定力矩,高于此频率会影响控制稳定性。
  3. 推拉移动风险: 在重力补偿模式下,避免施加过大的推力以免对机器人或外界物体造成损伤。

1.14 高级参数设置

在 Kinova 1.2.0 版本中,可以使用多种参数进行机械臂的高级配置。这些参数适用于各种功能,包括一般配置、以太网连接、力矩控制等。


1.14.1 通用参数

  • serial_number:
    例如 PJ00000001030703130,用于指定控制的机器人。如果不填,默认控制找到的第一个机器人。

  • jointSpeedLimitParameter1:
    设置关节1、2、3的速度限制,单位为度/秒。例如:10

  • jointSpeedLimitParameter2:
    设置关节4、5、6的速度限制,单位为度/秒。例如:20

  • payload:
    有效载荷配置,格式为 [质量, 重心x, 重心y, 重心z],单位分别为千克和米。例如:[0, 0, 0, 0]

  • connection_type:
    指定连接类型,可选值为 USBEthernet


1.14.2 以太网连接参数

// yaml
ethernet:
  local_machine_IP: 192.168.100.100  
  subnet_mask: 255.255.255.0  
  local_cmd_port: 25000  
  local_broadcast_port: 25025  

这些参数用于配置以太网连接。需要根据您的网络环境填写PC的IP地址和子网掩码。


1.14.3 力矩控制参数

如果未定义,系统将使用默认值。

  • publish_torque_with_gravity_compensation:
    布尔值,true 表示力矩控制包含重力补偿;false 表示不包含。默认值:false

  • torque_min / torque_max:
    每个关节的最小和最大力矩值,单位为Nm。需要对所有关节设置值。例如:

    // yaml
    torque_min: [1, 0, 0, 0, 0, 0, 0]
    torque_max: [50, 0, 0, 0, 0, 0, 0]
    
  • safety_factor:
    用于确定机器人在速度达到阈值时,从力矩模式切换到位置模式的安全因子。取值范围:0 ~ 1

  • com_parameters:
    机器人中心偏移参数,格式为:
    [m1, m2, ..., m7, x1, x2, ..., x7, y1, y2, ..., y7, z1, z2, ..., z7]
    分别表示7个关节的质量和重心的x/y/z坐标。例如:

    // yaml
    com_parameters: [0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0]

示例

下面是一个配置 robot_parameters.yaml 的完整示例:

serial_number: PJ00000001030703130
jointSpeedLimitParameter1: 10
jointSpeedLimitParameter2: 20
payload: [0, 0, 0, 0]
connection_type: Ethernet
ethernet:
  local_machine_IP: 192.168.100.100
  subnet_mask: 255.255.255.0
  local_cmd_port: 25000
  local_broadcast_port: 25025
torque_parameters:
  publish_torque_with_gravity_compensation: false
  torque_min: [1, 0, 0, 0, 0, 0, 0]
  torque_max: [50, 0, 0, 0, 0, 0, 0]
  safety_factor: 1
  com_parameters: [0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0]

1.15 以太网连接步骤(Ethernet Connection)

步骤 1:设置静态IP地址

  • 为您的以太网网络配置一个静态IP,例如:192.168.100.100


步骤 2:通过 USB 配置 Kinova 机器人

  1. 确保机器人通过 USB 连接到您的PC。

  2. 打开 Kinova 的 Development Center 软件。

  3. 进入 General/Ethernet 选项卡。

    • 设置机器人IP地址,例如:192.168.100.xxx

    • 确保 MAC地址 不为全零(如全零,请联系 Kinova 支持:support@kinova.ca)。

  4. 点击 Update 并重新启动机器人。


步骤 3:验证连接

  • 在终端中运行 ping 命令,检查机器人IP地址是否可以被正常访问,例如:

    ping 192.168.100.xxx

步骤 4:在 ROS 中配置以太网连接

在 Kinova 的 robot_parameters.yaml 文件中添加或修改以下参数:

// yaml
connection_type: Ethernet
local_machine_IP: 192.168.100.100  # 您的PC网络IP
subnet_mask: 255.255.255.0         # 网络子网掩码

注意事项

  • 功能支持:以太网连接支持所有在 USB 中可用的功能。

  • 限制性支持:当前以太网功能仅开放给部分用户,功能完全开放后将另行通知。

  • MAC 地址配置:确保 MAC 地址合法且不为全零。

2. Kinova_moveit 功能包

(摘自:kinova-ros/kinova_moveit at noetic-devel · Kinovarobotics/kinova-ros · GitHub

2.1 环境配置

2.1.1 支持的版本

  • 推荐配置

    • ROS Noetic,支持64位Ubuntu 20.04。

  • 旧版本配置

    • 如果使用较老的配置,请查看以下分支:

      • melodic-devel

      • kinetic-devel

      • indigo-devel

2.1.2 新版本功能

  1. 机器人配置

    • MicoJaco、和Jaco 7-DOF机器人添加了配置文件。

  2. IKFast插件

    • MicoJacoJaco 7-DOF机器人提供了IKFast插件。

  3. 轨迹跟踪

    • 添加了轨迹跟踪动作服务器轨迹跟踪控制器,用于执行和跟踪预定义的运动轨迹。

  4. 抓取与放置示例

    • 提供了一个示例代码,展示如何使用MoveIt!控制所有Kinova机械臂进行抓取与放置任务。示例包括:

      • 添加障碍物。

      • 将障碍物或物体附加到机器人。

      • 设置约束条件并测试运动规划。

2.1.3 安装说明

  1. 安装MoveIt!: 通过以下命令安装MoveIt!:

    sudo apt-get install ros-<distro>-moveit
    
  2. 安装Trac_IK: 通过以下命令安装Trac_IK:

    sudo apt-get install ros-<distro>-trac-ik
    

2.2 Kinova机器人MoveIt配置文件:

  • 使用MoveIt! setup assistant来快速设置机器人配置文件,相关教程可参考文档。

  • 机器人配置文件已经为JacoMicoJaco 7-DOF机器人预先设置,配置文件存放在kinova-ros/kinova_moveit/robot_configs/目录中。

2.1.1 移动组(move group)

  • 机器人已设置为使用两个移动组:armgripper

使用MoveIt RViz插件与机器人交互:

  • 启动MoveIt!并与虚拟机器人或实际机器人进行交互是最简便的方式,您可以使用MoveIt! RViz插件来控制机器人。

2.2.2 启动MoveIt!和RViz

  1. 使用虚拟机器人(MoveIt假控制器)

    roslaunch j2s7s300_moveit_config j2s7s300_virtual_robot_demo.launch
    

    启动的内容包括:

    • move_group节点,配置了虚拟控制器,定定义在/config/fake_controllers.yaml中。

    • rviz可视化工具,帮助进行模拟操作。

  2. 连接实际机器人

    roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2s7s300
    roslaunch j2s7s300_moveit_config j2s7s300_demo.launch
    

    启动的内容包括:

    • move_group节点,控制器定义在/config/controllers.yaml中。

    • joint_trajectory_action_server节点,控制机器人关节轨迹。

    • gripper_command_action_server节点,控制夹爪动作。

使用Gazebo和ros_control:

  • 有关如何在Gazebo环境中使用ros_control的信息,请参考Gazebo页面的相关文档。

2.2.3 RViz MoveIt! 插件

在RViz中,您可以使用MoveIt!插件来交互式地移动机器人的末端执行器。通过拖动互动标记(如图所示的红色矩形框),MoveIt!会使用逆向运动学来更新关节位置。

1. 设置起始姿态和目标姿态

Planning标签页(图中蓝色矩形标记处),您可以规划和执行轨迹。步骤如下:

  1. 设置起始姿态:拖动互动标记到您想要设置的起始姿态位置。如果您连接了真实机器人,可以将起始状态保持为当前状态。在查询菜单中设置起始状态。

  2. 设置目标姿态:按照同样的步骤设置目标姿态。

2. 规划与执行轨迹

  1. 点击Plan,MoveIt!会可视化规划路径,展示从起始姿态到目标姿态的移动路径。

  2. 如果可视化的规划路径符合要求,点击Execute执行该轨迹。若您连接的是真实机器人,机器人将根据可视化的路径执行动作;如果使用的是虚拟机器人,模型的关节将移动到目标状态,但真实机器人不会动。

3. MoveIt! RViz插件的其他功能

  • 添加障碍物:您可以在环境中添加障碍物,进行碰撞检测。

  • 编辑规划参数:调整规划过程中使用的各种参数,以优化路径和运动规划。

这些功能您可以通过MoveIt! API进行探索和使用。


2.2.4 使用MoveIt API与机器人交互

MoveIt仓库中提供了API的示例。一个适用于Kinova机器人的抓取与放置示例已经被修改并适配,帮助用户开发自己的应用。

抓取与放置示例

1. 启动MoveIt和RViz

对于虚拟机器人:

roslaunch j2s7s300_moveit_config j2s7s300_virtual_robot_demo.launch
  • 对于连接实际机器人(警告:此序列需要较大的空间,确保机器人有足够的空间,并准备好随时关闭机器人):
    roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2s7s300
    roslaunch j2s7s300_moveit_config j2s7s300_demo.launch

2. 运行抓取与放置示例节点

rosrun kinova_arm_moveit_demo pick_place

该脚本包括了多个场景的测试,步骤如下:

  • 设置工作场景并添加障碍物。

  • 在关节空间设置机器人目标。

  • 在笛卡尔空间设置机器人目标。

  • 设置路径约束条件。

  • 将物体附加到机器人:如果机器人抓住物体,需要检查机器人和物体在移动过程中是否发生碰撞。


2.2.5 运动学插件

本包测试了三种类型的运动学插件:

  1. Kinematics and Dynamics Library (KDL)

  2. IKFast

  3. Trac_IK

您可以通过在robot_config/config/kinematics.yaml文件中设置kinematics_solver参数来选择使用的插件。

  • 推荐的插件Trac_IK,并将参数solve_type设置为DistanceManipulation2

  • IKFast也能正常工作,但有时会给出不理想的“肘部下垂”解。

  • KDL的失败率较高,通常不推荐使用。

注意:为了确保参数设置正确,示例启动文件会在参数服务器中设置/pick_place_demo/arm/solve_type参数。

3. Kinova_gazebo功能包

(摘自kinova-ros/kinova_gazebo at noetic-devel · Kinovarobotics/kinova-ros · GitHub

3.1 环境配置

3.1.1 支持的版本

推荐的配置是 ROS Noetic 和 64 位的 Ubuntu 20.04。

对于较旧的配置,请参考其他分支:melodic-devel、kinetic-devel 和 indigo-devel。

3.1.2 本次版本的新特性

  • 支持 Gazebo 中的 Jaco、Mico、7自由度机器人。

  • 在 URDF 中添加了 Gazebo/ros_control 参数。

  • 添加了 ros_control 配置文件。

  • 提供了启动 Gazebo 与 ros_control 的启动文件。

  • 提供了向机器人发送轨迹命令的脚本。

  • 与 MoveIt! 的接口。

3.1.3 安装说明

(1)安装 Gazebo

有关详细的安装说明,请参见安装页面。

sudo apt-get install ros-noetic-gazebo-ros*

(2)安装 ros_control 和 ros_controllers 库

sudo apt-get install ros-noetic-gazebo-ros-control
sudo apt-get install ros-noetic-ros-controllers
sudo apt-get install ros-noetic-trac-ik-kinematics-plugin

3.2 Gazebo/ros_control 参数已添加到 Gazebo

所有网格模型已添加惯性参数以支持 Gazebo。每个链接都具有该链接的惯性模型,并且每个致动器的一半位于一侧,另一半位于另一侧。链接的质心位置(COM)和质量经过准确计算,以确保正确的扭矩读取。

然而,惯性矩阵是近似值,假设链接为均匀的圆柱体。更精确的数值将在以后添加。

关节动力学参数,如阻尼、摩擦力、刚度等,并未准确代表硬件。

关节被配置为具有 effortJointInterface

3.3 ros_control

我们使用 ros_control 来控制 Gazebo 中的机器人模型。详情请参考 ros_control 教程

已经为三种机器人类型添加了控制关节的 ros-control 配置文件。提供了三种不同类型的控制器:effort(力矩控制)、position(位置控制)、velocity(速度控制)。

同时,已经添加了轨迹控制器,用于提供与 MoveIt! 的接口。

推荐的控制方式是使用轨迹控制器。

3.4 Launching Gazebo with ros_control

3.4.1 使用以下命令启动 Gazebo

roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=j2s7s300

该启动文件:

  • 启动 Gazebo

  • 加载机器人模型到 Gazebo 中

  • 启动 ros_control 控制器

  • 启动 RViz,显示默认的空视图

To show the robot's state in RViz

在 RViz 中:

  1. 在显示部分,将 Global Options -> Fixed Frame 设置为 world

  2. 添加机器人的模型:点击 Add -> RobotModel(在 rviz 文件夹中)

默认情况下,控制器设置为启动轨迹位置控制器,这也是 MoveIt! 控制机器人的方式。如果你想逐关节控制机器人,可以设置 use_trajectory_controller = false

roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=j2s7s300 use_trajectory_controller:=false

3.4.2 Moving the Robot

(1)要使用轨迹控制器在 Gazebo 中移动机器人,用户可以向以下主题发布 jointTrajectory 命令:

/robot_name/effort_joint_trajectory_controller/command

(2)可以使用以下示例脚本将机器人移动到原点位置:

rosrun kinova_control move_robot.py j2s7s300

(3)你也可以通过 rqt 一关节一关节地控制机器人(你也可以在初始启动 Gazebo 时添加 rqt:=true 参数以自动启动 rqt):

roslaunch kinova_control kinova_rqt.launch kinova_robotType:=j2s7s300

但请注意,在这种情况下需要将 use_trajectory_controller = false,如上所述。

3.4.3 Interface with MoveIt!

(1)启动 Gazebo

roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=j2s7s300

(2)启动 MoveIt! 和 RViz:

roslaunch j2s7s300_moveit_config j2s7s300_gazebo_demo.launch

你可以在 RViz 中使用交互式标记来规划轨迹,并且在你点击执行时,轨迹将在 Gazebo 中执行。

你也可以运行抓取与放置示例,详细信息请查看 MoveIt! Wiki

rosrun kinova_arm_moveit_demo pick_place

4. Moveit 控制Kinova机械臂

打开机械臂驱动

真机

roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2s7s300 use_urdf:=true

仿真

roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=j2s7s300

启动Moveit

真机

roslaunch j2s7s300_moveit_config j2s7s300_gazebo_demo.launch

仿真

roslaunch j2s7s300_moveit_config j2s7s300_virtual_robot_demo.launch

 启动控制程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值