目录
1.9.1 复位机械臂到初始位置(Home Position)
1.10 笛卡尔容顺模式(Cartesian Admittance Mode)
1.11 重新校准力矩传感器 (Re-calibrate Torque Sensors)
1.12 支持7自由度机械臂(7 DOF Spherical Wrist Robot)
1.12.2 在冗余空间中移动机械臂(Null Space Motion)
1.13.2 重力补偿(Gravity Compensation)
1.15 以太网连接步骤(Ethernet Connection)
3.2 Gazebo/ros_control 参数已添加到 Gazebo
3.4 Launching Gazebo with ros_control
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 注意点
-
连续运动风险:
- 速度控制是连续的,没有明确的停止位置。
- 如果不小心,可能导致意外碰撞或超出关节/工作空间限制。
-
频率要求:需要严格维持 100Hz 发布频率以确保准确控制。
-
缓存效应:内部缓存可能导致停止发布后机械臂仍短暂运动,应提前预估。
-
自定义控制:可以通过 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 控制的场景。
- 当禁用 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 校准步骤
-
将机械臂调整到蜡烛状姿态(Candle-like Pose):
-
所有关节角度设为 180°,即使机械臂的连杆竖直向上。
-
这种姿态确保关节处的力矩为零。
-
- 调用校准服务:
使用以下命令设置所有关节的力矩为零:
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自由度机械臂的特点
-
支持所有已有的控制方法:
对于7自由度机械臂,之前用于控制6自由度机械臂的方法均适用,包括关节控制、笛卡尔控制、力控等。 -
逆运动学(Inverse Kinematics, IK):
-
7自由度机械臂的逆运动学由于关节冗余性,会产生无限多种解。
-
冗余解的选择(冗余度解析)基于以下标准:
-
关节范围限制。
-
接近奇异点的程度。
-
-
1.12.2 在冗余空间中移动机械臂(Null Space Motion)
7自由度机械臂允许在冗余空间内调整关节姿态,而保持末端执行器的位置和方向不变。
-
功能描述:
-
通过调用 KinovaAPI 提供的新函数
StartRedundantJointNullSpaceMotion()
,可以进入冗余空间运动模式。 -
在该模式下,用户可通过操纵杆或其他方式调整关节姿态,末端执行器保持不动。
-
- 激活/关闭冗余空间运动模式:
使用以下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),控制器将执行以下操作之一:- 切换回位置模式(Option 0):
默认用于通用模式。 - 力矩命令归零(Option 1):
默认用于Kinova经典机器人(Jaco2和Mico)。
- 切换回位置模式(Option 0):
-
说明:
默认行为可根据需要修改,确保控制过程的安全性。
1.13.4 注意事项
- 安全性: 力矩控制模式可能带来较高的风险,确保充分测试和验证后再应用到实际环境中。
- 频率要求: 发布频率为100Hz是强制要求。低于此频率可能无法实现指定力矩,高于此频率会影响控制稳定性。
- 推拉移动风险: 在重力补偿模式下,避免施加过大的推力以免对机器人或外界物体造成损伤。
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:
指定连接类型,可选值为USB
或Ethernet
。
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 机器人
-
确保机器人通过 USB 连接到您的PC。
-
打开 Kinova 的 Development Center 软件。
-
进入 General/Ethernet 选项卡。
-
设置机器人IP地址,例如:
192.168.100.xxx
。 -
确保 MAC地址 不为全零(如全零,请联系 Kinova 支持:
support@kinova.ca
)。
-
-
点击 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 新版本功能
-
机器人配置:
-
为Mico、Jaco、和Jaco 7-DOF机器人添加了配置文件。
-
-
IKFast插件:
-
为Mico、Jaco和Jaco 7-DOF机器人提供了IKFast插件。
-
-
轨迹跟踪:
-
添加了轨迹跟踪动作服务器和轨迹跟踪控制器,用于执行和跟踪预定义的运动轨迹。
-
-
抓取与放置示例:
-
提供了一个示例代码,展示如何使用MoveIt!控制所有Kinova机械臂进行抓取与放置任务。示例包括:
-
添加障碍物。
-
将障碍物或物体附加到机器人。
-
设置约束条件并测试运动规划。
-
-
2.1.3 安装说明
-
安装MoveIt!: 通过以下命令安装MoveIt!:
sudo apt-get install ros-<distro>-moveit
-
安装Trac_IK: 通过以下命令安装Trac_IK:
sudo apt-get install ros-<distro>-trac-ik
2.2 Kinova机器人MoveIt配置文件:
-
使用MoveIt! setup assistant来快速设置机器人配置文件,相关教程可参考文档。
-
机器人配置文件已经为Jaco、Mico和Jaco 7-DOF机器人预先设置,配置文件存放在
kinova-ros/kinova_moveit/robot_configs/
目录中。
2.1.1 移动组(move group)
-
机器人已设置为使用两个移动组:arm和gripper。
使用MoveIt RViz插件与机器人交互:
-
启动MoveIt!并与虚拟机器人或实际机器人进行交互是最简便的方式,您可以使用MoveIt! RViz插件来控制机器人。
2.2.2 启动MoveIt!和RViz
-
使用虚拟机器人(MoveIt假控制器):
roslaunch j2s7s300_moveit_config j2s7s300_virtual_robot_demo.launch
启动的内容包括:
-
move_group
节点,配置了虚拟控制器,定定义在/config/fake_controllers.yaml
中。 -
rviz
可视化工具,帮助进行模拟操作。
-
-
连接实际机器人:
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标签页(图中蓝色矩形标记处),您可以规划和执行轨迹。步骤如下:
-
设置起始姿态:拖动互动标记到您想要设置的起始姿态位置。如果您连接了真实机器人,可以将起始状态保持为当前状态。在查询菜单中设置起始状态。
-
设置目标姿态:按照同样的步骤设置目标姿态。
2. 规划与执行轨迹
-
点击Plan,MoveIt!会可视化规划路径,展示从起始姿态到目标姿态的移动路径。
-
如果可视化的规划路径符合要求,点击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 运动学插件
本包测试了三种类型的运动学插件:
-
Kinematics and Dynamics Library (KDL)
-
IKFast
-
Trac_IK
您可以通过在robot_config/config/kinematics.yaml
文件中设置kinematics_solver
参数来选择使用的插件。
-
推荐的插件是Trac_IK,并将参数
solve_type
设置为Distance或Manipulation2。 -
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 中:
-
在显示部分,将 Global Options -> Fixed Frame 设置为
world
-
添加机器人的模型:点击 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
启动控制程序