适合初学者的ROS机器人教程(3): ROS下使用Python对UR5机器人建模与控制

摘要:
在ROS中是用过topic和service这两种通信机制实现发送命令和接收数据。topic是单方面通信,就是我只管发不管收,或只管收不发东西。查看下UR机器人给我们提供了那些topic通信接口。~$rostopiclist/arm_controller/command/arm_controller/follow_joint_trajectory/cancel/arm_controller/follow_joint_trajectory/feedback/arm_controller/follow_joint_trajectory/goal/arm_controller/follow_joint_trajectory/result/arm_controller/follow_joint_trajectory/status/arm_controller/state/calibrated/clock/gazebo/link_states/gazebo/model_states/gazebo/parameter_descriptions/gazebo/parameter_updates/gazebo/set_link_state/gazebo/set_model_state/gazebo_gui/parameter_descriptions/gazebo_gui/parameter_updates/joint_states/rosout/rosout_agg/tf/tf_static使用MoveIt控制UR5机器人参见:https://blog.csdn.net/varyshare/article/details/89212971运行UR5机器人三行命令,每行命令都是得在一个新的独立terminal命令行终端里面执行。不知道下载的包各消息接口的时候可以用rqt可以可视化的显示消息而且还可以监听消息。能获取意味着能发送命令控制它。

作者:知乎@Ai酱

  1. 安装UR机器人ROS包
    $ sudo apt-get install ros-kinetic-universal-robot
  2. 查询下看看有哪些包是和UR机器相关
    $ sudo rospack list | grep ur
    ur5_moveit_config /opt/ros/kinetic/share/ur5_moveit_config moveit!配置功能包
    ur_description /opt/ros/kinetic/share/ur_description UR机器模型包
    ur_gazebo /opt/ros/kinetic/share/ur_gazebo UR机器人仿真包
    ur_kinematics /opt/ros/kinetic/share/ur_kinematics  UR机器人运动学求解
    
  3. 在Gazebo中启动UR5机器人
    $ roslaunch ur_gazebo ur5.launch
  4. 了解一个机器人首先得了解怎么发送命令控制它。在ROS中是用过topic和service这两种通信机制实现发送命令和接收数据。topic是单方面通信,就是我只管发不管收,或只管收不发东西。service这种是双向通信,我既可以发给你,你也可以反馈信息给我。他们通信的格式叫做message(不是我们理解的消息),这是指消息的格式。
  5. 查看下UR机器人给我们提供了那些topic通信接口。
~$ rostopic list
/arm_controller/command
/arm_controller/follow_joint_trajectory/cancel
/arm_controller/follow_joint_trajectory/feedback
/arm_controller/follow_joint_trajectory/goal
/arm_controller/follow_joint_trajectory/result
/arm_controller/follow_joint_trajectory/status
/arm_controller/state
/calibrated
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/gazebo_gui/parameter_descriptions
/gazebo_gui/parameter_updates
/joint_states
/rosout
/rosout_agg
/tf
/tf_static

使用MoveIt控制UR5机器人参见:https://blog.csdn.net/varyshare/article/details/89212971
运行UR5机器人三行命令,每行命令都是得在一个新的独立terminal命令行终端里面执行。

roslaunch ur_gazebo ur5.launch limited:=true
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

rqt可视化非常有用:启动rqt命令 rosrun rqt_gui rqt_gui,rqt简直是ROS中的J20啊,太有用了。不知道下载的包各消息接口的时候可以用rqt可以可视化的显示消息而且还可以监听消息。不知道现在运行的节点有哪些,它也可以可视化显示。

UR5有用的一些消息接口

获取机械臂速度和位置信息监听topic:/arm_controller/state
获取机械臂位置和姿态、角速度和速度监听topic:/gazebo/link_states。pose是位姿,twist是线速度角速度。
能获取意味着能发送命令控制它。
还有可以获取位置和线速度方法:joint_states

怎么编程控制UR5机器人

首先把安装的包都加入到catkin工作空间
catkin config --extend /opt/ros/kinetic

catkin 命令不存在?请尝试这个安装catkin sudo apt-get install ros-kinetic-catkin python-catkin-tools
python控制UR5机器人随机转动参考:https://github.com/vfdev-5/move_group_tutorial_ur5

#!/usr/bin/python
# Gazebo UR5
# Send joint values to UR5 using messages
#

from std_msgs.msg import Header
from trajectory_msgs.msg import JointTrajectory
from math import *
from random import uniform
from trajectory_msgs.msg import JointTrajectoryPoint
import rospy
# [0.0, -pi/2, pi/2, pi/3, 0, -pi/10]
# waypoints = [[uniform(-pi, pi) for _ in range(0,6)], [0,0,0,0,0,0]]

def main():

    rospy.init_node('send_joints')
    pub = rospy.Publisher('/arm_controller/command',
                          JointTrajectory,
                          queue_size=10)


    # Create the topic message
    traj = JointTrajectory()
    traj.header = Header()
    # Joint names for UR5
    traj.joint_names = ['shoulder_pan_joint', 'shoulder_lift_joint',
                        'elbow_joint', 'wrist_1_joint', 'wrist_2_joint',
                        'wrist_3_joint']

    rate = rospy.Rate(1)
    cnt = 0
    pts = JointTrajectoryPoint()
    traj.header.stamp = rospy.Time.now()

    while not rospy.is_shutdown():

        pts.positions = [uniform(0,pi),uniform(0,-pi/2),uniform(0,pi),uniform(0,pi),uniform(0,pi),uniform(0,pi)]
        pts.time_from_start = rospy.Duration(1.0)
        cnt+=1
        cnt%=2
        # Set the points to the trajectory
        traj.points = []
        traj.points.append(pts)
        # Publish the message
        pub.publish(traj)
        rate.sleep()

if __name__ == '__main__':
    try:
        main()
    except rospy.ROSInterruptException:
        print ("Program interrupted before completion")

MoveIt!工作机制

所有的接口都是和名字叫做move_group的这个节点通信。
机械臂关节点信息是通过Robot Sensors这个节点获取。
在这里插入图片描述

免责声明:文章转载自《适合初学者的ROS机器人教程(3): ROS下使用Python对UR5机器人建模与控制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Flask基础之返回值与form表单提交浅谈前端SPA(单页面应用)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MoveIt运动规划-1

按照帮助文档Setup Assistant Tutorial中的描述,用moveit_setup_assistant图形界面一步步配置机器人,最后生成机器人的配置文件保存到指定的文件夹中。 以UR5机器人为例,将生成的配置文件保存在ur5_moveit_config文件夹中。生成的config文件夹中包含了一些机器人和求解器相关的配置文件,launch文件...

ROS入门笔记(四):ROS实践(小海龟仿真)—ROS Topics

ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics 1 基础知识    1.1 运行ROS Master所在主机的资源地址    1.2 ROS常用命令        1.2.1 查看所有以ros开头的命令        1.2.2 命令的快捷方式    1.3 重要命令2 ROS Topics    2.1 使用rqt_graph ...

ROS向节点传递参数

ROS的节点有很多中调用方式,包括rosrun,launch,直接运行等,向节点内传递参数的方式也有很多。 1. rosrun + 参数服务器传递 ros::init(argc, argv, "imu2txt"); ros::NodeHandle nh("~"); std::string file_name; nh.param<std::string...

QT--图灵机器人

QT--图灵机器人 1.登陆图灵机器人官网注册一个图灵机器人 2.获取apikey 3.pro文件添加 QT       += core gui network 4.头文件 #include <QNetworkAccessManager> //三个http必须头文件 #include <QNetworkReply>...

智能对话机器人实战开发案例剖析(1)- 体系结构和分类

一、前言 人工智能时代,以智能对话机器人为最核心的技术应用方向之一,实现人机之间通过自然语言的沟通和交流,是智能人机对话机器人的核心目标之一。尤其是Google Assistant 语音助手近期的卓越表现,如何开发智能对话机器人系统,成为一个新的热点。本文是系列文章的第一部分,旨在较少智能对话系统的进行一个全面和具体的介绍。相关内容已同步录制成视...

ros学习之消息和服务

1 msg和srv简介 msg:msg文件是描述ROS消息字段的简单文本文件。它们用于为不同语言(c++或者python等)的消息生成源代码。 srv:srv文件用来描述服务。它由两部分组成:请求(request)和响应(response)。 msg文件存储在包的msg目录中,而srv文件存储在srv目录中。 msg只是简单的文本文件,每行有一个字段类...