1、Cartesian position control
笛卡尔位置控制可以通过在自定义节点中调用KinovaComm::setCartesianPosition()
来实现。或者,您可以简单地调用 kinova_demo 包中的节点pose_action_client.py
。
这个函数需要三个参数:kinova_robotType
(eg. j2n6s300), unit {mq | mdeg | mrad}
(指的是米和四元数、米和度和米和弧度)和pose_value
。
最后一个参数pose_value
是位置(坐标x,y,z)后跟方向(是3个还是4个值取决于单位)。位置单位总是米,旋转单位不同。度数和弧度与 XYZ 顺序的欧拉角有关。请注意,使用四元数和欧拉角时参数的个数是不同的。
该函数采用选项 -r 来告诉机器人角度值是相对的还是绝对的。它还具有用于更详细输出的选项 -v 和用于帮助的 -h 选项。以下代码将驱动 Jaco2 机器人沿 +x 轴移动 1cm,并沿手轴旋转 +10 度。
eg: rosrun kinova_demo pose_action_client.py -v -r j2n6s300 mdeg -- 0.01 0 0 0 0 10
机器人根坐标系的笛卡尔坐标由以下规则定义:
- 原点是底面与圆柱中心线的交点。
- +x 轴在面对底板时指向左侧(电源开关和电缆插座所在的位置)。
- +y 轴面向底板时朝向用户。
- 当机器人站在平面上时,+z 轴向上。
kinova_tool_pose_action(由pose_action_client.py
调用的动作服务器)将向机器人发送笛卡尔位置命令,并在机器人内处理逆运动学。
重要信息 在 Kinova 机器人中实施的逆运动学算法经过编程,可自动避免奇点和自碰撞。为了避免这些情况,算法将限制对机器人工作区某些部分的访问。你发送的笛卡尔姿态目标虽然属于机器人的工作空间,但可能会出现机器人无法达到的情况。
根据经验,如果您无法通过使用 Kinova 操纵杆移动 Kinova 机器人来达到您在pose_action_client.py
中命令的姿势,则机器人也将无法通过动作服务器达到相同的姿势。如果您不想使用机器人的 IK 解算器,您可以始终使用 MoveIt。
当前笛卡尔位置通过主题/'${kinova_robotType}_driver'/out/tool_pose
发布
此外,末端执行器的扳手通过主题/'${kinova_robotType}_driver'/out/tool_wrench
发布
同样,您还可以在 Rviz 中使用交互式标记作为笛卡尔位置:
- 1、启动驱动程序:
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2n6s300
- 2、启动交互控制节点:
rosrun kinova_driver kinova_interactive_control j2n6s300
- 3、打开 Rviz:
rosrun rviz rviz
- 4、在 RViz 中(在显示部分)将 Global Options -> Fixed Frame 更改为
world
- 5、使用 Add -> RobotModel(在 rviz 文件夹中)添加机器人模型
- 6、使用 Add -> InteractiveMarkers(在 rviz 文件夹中) 添加交互式标记
- 7、将 InteractiveMarkers -> Updated Topic 更改为
/j2n6s300_interactive_control_Cart/update
- 末端执行器应出现一个具有 3 轴(平移)和 3 个环(旋转)的立方体,您可以通过拖动轴或环来移动机器人。
New in release 1.2.0
不停止地执行多个笛卡尔路点
action 客户端一次执行一个目标。如果用户想为机器人提供多个路点而不在每个航点处停下来,可以使用服务 AddPoseToCartesianTrajectories
。此服务将指令姿势添加到由机器人维护的缓冲区中。机器人按照添加顺序执行此缓冲区中的指令姿势,而不会在不同的姿势之间停止。
服务ClearTrajectories
可用于清除原有的轨迹缓冲区。
2、Finger position control
手指位置控制可以通过在自定义节点中调用KinovaComm::setFingerPositions()
来实现。
或者,可以简单地调用 kinova_demo 包中的节点finger_action_client.py
。这个函数需要三个参数:kinova_robotType
(eg. j2n6s300), unit {turn | mm | percent}
和finger_value
。
手指基本上是通过turn
来控制的,其余的单元为了方便而按比例turn
。值 0 表示完全打开,而finger_maxTurn
表示完全关闭。finger_maxTurn
的值可能因多种因素而异。手指转动的正确参考值是 0(全开)到 6800(全关)。如有必要,请在代码中修改此变量。该函数还采用选项 -r 来告诉机器人角度值是相对的还是绝对的。它还具有用于更详细输出的选项 -v 和用于帮助的 -h 选项。以下代码完全闭合手指。
eg: rosrun kinova_demo fingers_action_client.py j2n6s300 percent -- 100 100 100
手指位置通过主题/'${kinova_robotType}_driver'/out/finger_position
发布