使用ros-master控制kinova jaco2机械臂

kinova 6自由度 j2n6s200

目录

    • 安装
      • 启动驱动程序
    • 控制
      • 关节位置控制
      • 笛卡尔位置控制
      • 关节空间、笛卡尔空间速度控制
        • 机械臂速度控制出现卡顿、无法达到设置速度
    • 用moveit和Rviz做仿真
    • moveit控制真实kinova

安装

cd ~/catkin_ws/src
git clone https://github.com/Kinovarobotics/kinova-ros.git kinova-ros
cd ~/catkin_ws
catkin_make

编译成功如下图
使用ros-master控制kinova jaco2机械臂_第1张图片

复制规则文件10-kinova-arm.rules(默认装在~/catkin_ws/src/kinova-ros/kinova_driver/udev中,如果)
使用命令复制:sudo cp ~/catkin_ws/src/kinova-ros/kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/
进入文件–计算机–etc–udev–rules.d ,可以看到10-kinova-arm.rlues文件已存在,代表复制成功

启动驱动程序

  1. 进入kinova_robot.launch所在的目录(我的是~/catkin_ws/src/kinova-ros/kinova_bringup/launch文件夹)
    使用ros-master控制kinova jaco2机械臂_第2张图片
    输入命令:
    $ roslaunch kinova_bringup kinova_robot.launch

使用ros-master控制kinova jaco2机械臂_第3张图片
(如果不成功会显示如下,可能是工作空间没有设置好和环境变量的问题,请参考:https://blog.csdn.net/tao_sc/article/details/89217864
https://zhangrelay.blog.csdn.net/article/details/51384724

使用ros-master控制kinova jaco2机械臂_第4张图片

控制

启动交互式控制的节点: rosrun kinova_driver kinova_interactive_control j2n6s200

关节位置控制

这是关于joints_action_client.py的帮助
通过-h命令查看:
rosrun kinova_demo joints_action_client.py -h
usage: joints_action_client.py [-h] [-r] [-v]
kinova_robotType [unit]
[joint_value [joint_value …]]

Drive robot joint to command position

positional arguments:
kinova_robotType kinova_RobotType is in format of:
[{j|m|r|c}{1|2}{s|n}{4|6|7}{s|a}{2|3}{0}{0}]. eg: j2n6a300
refers to jaco v2 6DOF assistive 3fingers. Please be noted
that not all options are valided for different robot
types.
unit Unit of joiint motion command, in degree, radian
joint_value joint values, length equals to number of joints.

optional arguments:
-h, --help show this help message and exit
-r, --relative the input values are relative values to current position.
-v, --verbose display joint values in alternative convention(degree or
radian)

可以调用kinova_demo包里的joints_action_client.py:
$ rosrun kinova_demo joints_action_client.py -v -r j2n6s200 degree -- 0 0 0 50 0 0
注意: j2n6s200是对应的机械臂型号,请确保你已通过usb正确连接虚拟机和机械臂。
此时机械臂的第四个关节会在当前角度的基础上正向运动50°
我用ubuntu20,装python3执行高命令提示文件有错误,这里因为py3和py2里面,print用法的不一样
使用ros-master控制kinova jaco2机械臂_第5张图片原文56行print 'position listener obtained message for joint position. ’
改为print ('position listener obtained message for joint position. ')
就是加上括号,因为在py3里print改为函数了,一定用英文括号,不然报错,改了就可以成功运行

笛卡尔位置控制

py程序文件为pose_action_client.py
如:

rosrun kinova_demo pose_action_client.py -v -r j2n6s200 mdeg -- 0 0 0 10 10 10

详细信息通过同上,使用-h命令查看

关节空间、笛卡尔空间速度控制

使用话题发布命令rostopic pub -r 100 /m1n4s200_driver/in/cartesian_velocity kinova_msgs/PoseVelocity+参数
参数格式可采用Tab键补全
-h获取详细信息

机械臂速度控制出现卡顿、无法达到设置速度

踩个坑,如果使用的是虚拟机,需要将虚拟机USB控制器的USB兼容性从2.0设置为3.0以上
在这里插入图片描述

用moveit和Rviz做仿真

1.先安装moveit
2.已经有ros-master包,在的工作空间里
在这里插入图片描述
3.启动ros

$ roscore

4.在kinova-ros包里,有kinova的模型kinova-ros/kinova_moveit/robot_configs
里面应该有四个文件夹,是四种型号的机械臂模型,我们用j2n6s300
使用ros-master控制kinova jaco2机械臂_第6张图片
5.打开j2n6s300_moveit_config/launch/ ,可以看到launch文件,启动demo

$ roslaunch j2n6s300_moveit_config demo.launch

可以看到kinova模型已经启动
6.可以用moveit的用户界面直接操作模型
7.使用moveit_commander控制机械臂

$ rosrun moveit_commander moveit_commander_cmdline.py

启动该脚本你就可以使用moveit_commander的命令直接和模型交互控制。

8.可以用python写脚本控制你的kinova模型,可以直接在j2n6s300_moveit_config文件夹下面创建一个scripts文件夹,存放写好的python脚本。
(注意,写完脚本之后要把python文件属性改为读写、可作为执行程序,否则运行会报错)

这是一个python脚本例子:使用ros-master控制kinova jaco2机械臂_第7张图片

#!/usr/bin/env python

import rospy, sys
import moveit_commander

class MyFkDemo:
    def __init__(self):
        # 初始化move_group的API
        moveit_commander.roscpp_initialize(sys.argv)

        # 初始化ROS节点
        rospy.init_node('my_fk_demo', anonymous=True)
 
        # 初始化需要使用move group控制的机械臂中的arm group
        arm = moveit_commander.MoveGroupCommander('arm')
        
        # 设置机械臂运动的允许误差值
        arm.set_goal_joint_tolerance(0.001)

        # 设置允许的最大速度和加速度
        arm.set_max_acceleration_scaling_factor(0.5)
        arm.set_max_velocity_scaling_factor(0.5)
        
         
        # 设置机械臂的目标位置,使用六轴的位置数据进行描述(单位:弧度)
        joint_positions = [-7.76161670485, 2.92477582596 ,1.00193522987 ,-2.07991521338 ,1.44570212266 ,1.3232299191]
        arm.set_joint_value_target(joint_positions)
                 
        # 控制机械臂完成运动
        arm.go()
        rospy.sleep(1)

        
        # 关闭并退出moveit
        moveit_commander.roscpp_shutdown()
        moveit_commander.os._exit(0)

if __name__ == "__main__":
    try:
        MyFkDemo()
    except rospy.ROSInterruptException:
        pass

这只提供一个范本,注意

        # 初始化需要使用move group控制的机械臂中的arm group
        arm = moveit_commander.MoveGroupCommander('arm')

这里的(‘arm’) 是你的模型中的move group ,请对应

moveit控制真实kinova

首先确保机械臂启动

roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=*robot_type*

启动机械臂轨迹控制服务端

rosrun kinova_driver joint_trajectory_action_server kinova_robotType:=*robot_type*

启动moveit

roslaunch robot_name_moveit_config robot_name_demo.launch

你可能感兴趣的:(ROS,linux)