专栏首页机器人课程与技术ROS资料----工业机器人 ROS-I Kinetic 培训课程

ROS资料----工业机器人 ROS-I Kinetic 培训课程

-----------☺----------

全部资料幻灯片和示例代码:http://download.csdn.net/detail/zhangrelay/9772491 

----------☻----------

ROSIN: Why Should You Care About Quality?

----------部分内容如下----------

#!/usr/bin/env python

import numpy
import math
import matplotlib.pyplot as pyplot
from mpl_toolkits.mplot3d import Axes3D


def generateLemniscatePoints():

    # 3D plotting setup
    fig = pyplot.figure()
    ax = fig.add_subplot(111,projection='3d')

    a = 6.0
    ro = 4.0
    dtheta = 0.1
    nsamples = 200
    nlemniscates = 4
    epsilon = 0.0001

    # polar angle
    theta = numpy.concatenate([numpy.linspace(-math.pi/4 + epsilon,math.pi/4 - epsilon,nsamples/2,endpoint=True),
      numpy.linspace(3*math.pi/4 + epsilon, 5*math.pi/4- epsilon,nsamples/2,endpoint=True)])

    # offset from polar angle
    omega = numpy.linspace(0.0,math.pi,nlemniscates,endpoint=False)

    r = len(theta)*[0]
    x = (len(theta)*len(omega))*[0]
    y = (len(theta)*len(omega))*[0]
    z = (len(theta)*len(omega))*[0]

    for j in range(0,len(omega)):

      index_offset = j*len(theta)
      for i in range(0,len(theta)):      

        r[i] = math.sqrt(math.pow(a,2)*math.cos(2*theta[i]))

        index = index_offset + i
        
        phi = math.asin(r[i]/ro) if r[i] < ro else (math.pi - math.asin((2*ro-r[i])/ro) )
        x[index] = ro*math.cos(theta[i] + omega[j]) * math.sin(phi)
        y[index] = ro*math.sin(theta[i] + omega[j]) * math.sin(phi)
        z[index] = ro*math.cos(phi) 

    #print "omega array: %s"%(str(omega))
    #print "x array: %s"%(str(x))
    #print "z array: %s"%(str(z))
    axis_size = 1.2*ro
    ax.plot(x, y, z, label='parametric curve',marker='.',color='yellow', linestyle='dashed',markerfacecolor='blue')
    ax.legend()
    ax.set_xlabel('X')
    ax.set_xlim(-axis_size, axis_size)
    ax.set_ylabel('Y')
    ax.set_ylim(-axis_size, axis_size)
    ax.set_zlabel('Z')
    ax.set_zlim(-axis_size, axis_size)

    pyplot.show()


if __name__ == "__main__":

  generateLemniscatePoints()
#include <ros/ros.h>
#include <tf/transform_datatypes.h>
#include <tf/transform_listener.h>
#include <tf/transform_broadcaster.h>
#include <sensor_msgs/PointCloud2.h> //hydro

// PCL specific includes
#include <pcl_conversions/pcl_conversions.h> //hydro
#include "pcl_ros/transforms.h"

//#include <pcl/filters/voxel_grid.h>
//#include <pcl/filters/passthrough.h>
//#include <pcl/sample_consensus/method_types.h>
//#include <pcl/sample_consensus/model_types.h>
//#include <pcl/segmentation/sac_segmentation.h>
//#include <pcl/filters/extract_indices.h>
//#include <pcl/segmentation/extract_clusters.h>
//#include <pcl/kdtree/kdtree_flann.h>
//#include <pcl/filters/statistical_outlier_removal.h>

int main(int argc, char *argv[])
{
  /*
   * INITIALIZE ROS NODE
   */
  ros::init(argc, argv, "perception_node");
  ros::NodeHandle nh;
  ros::NodeHandle priv_nh_("~");

  /*
   * SET UP PARAMETERS (COULD BE INPUT FROM LAUNCH FILE/TERMINAL)
   */
  std::string cloud_topic, world_frame, camera_frame;
  world_frame="world_frame";
  camera_frame="kinect_link";
  cloud_topic="kinect/depth_registered/points";

  /*
   * SETUP PUBLISHERS
   */
  ros::Publisher object_pub, cluster_pub, pose_pub;
  object_pub = nh.advertise<sensor_msgs::PointCloud2>("object_cluster", 1);
  cluster_pub = nh.advertise<sensor_msgs::PointCloud2>("primary_cluster", 1);

 while (ros::ok())
 {
  /*
   * LISTEN FOR POINTCLOUD
   */
  std::string topic = nh.resolveName(cloud_topic);
  ROS_INFO_STREAM("Cloud service called; waiting for a PointCloud2 on topic "<< topic);
  sensor_msgs::PointCloud2::ConstPtr recent_cloud =
               ros::topic::waitForMessage<sensor_msgs::PointCloud2>(topic, nh);

  /*
   * TRANSFORM POINTCLOUD FROM CAMERA FRAME TO WORLD FRAME
   */
  tf::TransformListener listener;
  tf::StampedTransform stransform;
  try
  {
    listener.waitForTransform(world_frame, recent_cloud->header.frame_id,  ros::Time::now(), ros::Duration(6.0));
    listener.lookupTransform(world_frame, recent_cloud->header.frame_id,  ros::Time(0), stransform);
  }
  catch (tf::TransformException ex)
  {
    ROS_ERROR("%s",ex.what());
  }
  sensor_msgs::PointCloud2 transformed_cloud;
//  sensor_msgs::PointCloud2::ConstPtr recent_cloud =
//               ros::topic::waitForMessage<sensor_msgs::PointCloud2>(topic, nh);
  pcl_ros::transformPointCloud(world_frame, stransform, *recent_cloud, transformed_cloud);

  /*
   * CONVERT POINTCLOUD ROS->PCL
   */
  pcl::PointCloud<pcl::PointXYZ> cloud;
  pcl::fromROSMsg (transformed_cloud, cloud);

  /* ========================================
   * Fill Code: VOXEL GRID
   * ========================================*/


  //ROS_INFO_STREAM("Original cloud  had " << cloud_ptr->size() << " points");
  //ROS_INFO_STREAM("Downsampled cloud  with " << cloud_voxel_filtered->size() << " points");

  /* ========================================
   * Fill Code: PASSTHROUGH FILTER(S)
   * ========================================*/
  //filter in x

  //filter in y

  //filter in z 

  /* ========================================
   * Fill Code: CROPBOX (OPTIONAL)
   * ========================================*/

  /* ========================================
   * Fill Code: PLANE SEGEMENTATION
   * ========================================*/
 

  /* ========================================
   * Fill Code: PUBLISH PLANE MARKER (OPTIONAL)
   * ========================================*/


  /* ========================================
   * Fill Code: EUCLIDEAN CLUSTER EXTRACTION (OPTIONAL/RECOMMENDED)
   * ========================================*/


  /* ========================================
   * Fill Code: STATISTICAL OUTLIER REMOVAL (OPTIONAL)
   * ========================================*/


  /* ========================================
   * CONVERT POINTCLOUD PCL->ROS
   * PUBLISH CLOUD
   * Fill Code: UPDATE AS NECESSARY
   * ========================================*/
  sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2);
  //pcl::toROSMsg(*cloud_ptr, *pc2_cloud);
  pc2_cloud->header.frame_id=world_frame;
  pc2_cloud->header.stamp=ros::Time::now();
  object_pub.publish(pc2_cloud);

  /* ========================================
   * Fill Code: PUBLISH OTHER MARKERS (OPTIONAL)
   * ========================================*/


  /* ========================================
  * BROADCAST TRANSFORM (OPTIONAL)
  * ========================================*/


  /* ========================================
   * Fill Code: POLYGONAL SEGMENTATION (OPTIONAL)
   * ========================================*/


  }
  return 0;
}

----------详细介绍如下----------

ROS工业机器人 ROS-I Kinetic培训课程资料

ROS工业联盟美洲在2017年2月13-15日在位于德克萨斯州圣安东尼奥的SwRI举办了ROS-工业开发者培训班。包括空军研究实验室,波音公司,卡特彼勒,加拿大国家研究委员会,SwRI,德克萨斯大学奥斯汀分校和安川美国公司Motoman机器人部门的多种组织由17名与会者代表。这三天的课程面向具有C ++编程背景的个人,他们试图学习构成自己的ROS节点。

  • 第一天:侧重于介绍ROS技能
  •  第二天:使用MoveIt!检查运动规划以及使用笛卡尔路径规划器
  • 第三天:对感知的介绍,并以实验室编程练习(可选择)结束:拾取和放置应用,笛卡尔应用

非常感谢Jeremy Zoss和Levi Armstrong带领培训班。还要感谢Austin Deric,Jonathan Meyer和Geoffrey Chiou,他们将培训课程更新为ROS Kinetic。培训课程是开源的,可在这里

有关此类的更多详细信息,请参阅事件页面

如果您有兴趣参加下一课程,请关注此活动页面

ROS工业机器人(Kinetic)训练

设置您的电脑

· PC设置

预备条件

Linux基础

· 演示幻灯片 - Linux基础

· 练习0.1 - 介绍Ubuntu GUI

· 练习0.2 - Linux文件系统

· 练习0.3 - 使用终端

C ++

· MIT开放课件:C ++简介

· Bruce Eckel:用C ++思考

介绍

· 演示幻灯片 - 简介

章节1 - ROS概念和基础

· 演示幻灯片 - 章节1

· 练习1.0 - ROS设置

· 练习1.1 - 创建Catkin工作区

· 练习1.2 - 安装现有软件包

· 练习1.3 - 创建ROS包和节点

· 练习1.4 - 主题和消息

章节2 - 基本ROS应用程序

· 演示幻灯片 - 章节2

· 练习2.0 - 服务

· 练习2.1 - 操作

· 练习2.2 - ROS启动文件

· 练习2.3 - 参数

章节3 - 操纵器的运动控制

· 演示幻灯片 - 章节3

· 练习3.0 - URDF简介

· 练习3.1 - Workcell XACRO

· 练习3.2 - 使用TF进行坐标变换

· 练习3.3 - 构建一个MoveIt!包

· 练习3.4 - 使用RViz的运动规划

章节4 - 笛卡尔和感知

· 演示幻灯片 - 章节4

· 练习4.0 - 使用C ++的运动规划

· 练习4.1 - 笛卡尔路径规划

· 练习4.2 - 感知导论

· 练习4.3 - 构建感知流水线

· 重复幻灯片

章节5 - 高级主题

· 演示幻灯片 - 会议5

· 练习5.0 - 使用rosdoc_lite从注释源生成文档

· 练习5.1 - 单元测试

· 练习5.2 - 使用rqt工具分析ROS系统

· 练习5.3 - 风格指南和ros_lint

· 练习5.4 - STOMP简介

应用程序演示 - 感知驱动操作

· 介绍 - 介绍

· 感知驱动操作练习1 - 检查“pick_and_place_exercise”包

· 感知驱动操作练习2 - 软件包设置

· 感知驱动操纵练习3 - 在仿真模式下启动ROS系统

· 感知驱动操作练习4 - 检查初始化和全局变量

· 感知驱动操纵练习5 - 将手臂移动到等待位置

· 感知驱动操纵练习6 - 打开夹具

· 感知驱动操纵练习7 - 检测箱选择点

· 感知驱动操纵练习8 - 创建拾取移动

· 感知驱动操纵练习9拾音

· 感知驱动操纵练习10 - 创建地点移动

· 感知驱动操纵练习11 - 放置盒

应用程序演示 - 下降规划和执行

· 介绍

· 应用程序结构

· 一般说明

· 笛卡尔计划和执行练习1 - 加载参数

· 笛卡尔计划和执行练习2 - 初始化ROS

· 笛卡尔计划和执行练习3 - 初始化笛卡尔

· 笛卡尔计划和执行练习4 - 移动原点

· 笛卡尔计划和执行练习5 - 生成半约束轨迹

· 笛卡尔计划和执行练习6 - 计划机器人路径

· 笛卡尔计划和执行练习7 - 运行机器人路径

------

ROS-工业概述

ROS-Industrial是一个BSD(传统)/ Apache 2.0(首选)许可程序,包含工业硬件的库,工具和驱动程序。它由ROS工业联盟支持和指导。ROS-Industrial的目标是:

  • 创建由工业机器人学研究人员和专业人员支持的社区
  • 为与行业相关的ROS应用程序提供一站式服务
  • 开发强大可靠的软件,满足工业应用的需求
  • 结合ROS与现有工业技术(即将ROS高级功能与工业机器人控制器的低级可靠性和安全性相结合)的相对优势。
  • 创建标准接口以激励“硬件无关”软件开发(使用标准化ROS消息)
  • 提供一个简单的途径,在工业应用中应用尖端研究,使用通用的ROS架构
  • 提供简单,易于使用,记录良好的API

请浏览rosindustrial.org网站,了解ROS-Industrial的概况。

开发人员名单

加入开发人员列表,了解最新的ROS-Industrial开发。

视频

查看我们的视频页面,了解ROS-Industrial可以做什么。

新闻

支持的硬件

用于ABB,Adept,Fanuc,Motoman和Universal Robots的工业机械手由ROS-Industrial软件包支持。有关相关软件包的链接,请参阅供应商特定包。

有关特定供应商硬件的更多信息,请参见支持的硬件页面

安装

ROS-工业安装说明可以在安装页上找到。

发展

浏览源代码

ROS-Industrial软件已迁移到Github。以前,ROS-Industrial代码托管在Google代码上。转换到Github发生在ROS Groovy发布之后

贡献

成为ROS-Industrial 组织的一部分。有很多方法来贡献。查看我们的未平仓头寸

软件开发过程

工业级代码需要严格的代码开发过程

拉动请求审核指南

ROS-工业开发人员承诺不断提高他们的代码和包的质量。作为此承诺的一部分,已经定义了用于提交和处理拉取请求的协议。有关详细信息,请参阅IndustrialPullRequestReview页面。

软件包摘要

简单消息

简单消息定义了用于与工业机器人控制器通信的简单消息连接和协议。包括用于处理连接受限系统的附加处理程序和管理器类。

工业机器人客户端

新在树干(Fuerte)/ Groovy 工业机器人客户端是与任何支持以太网插座通信的工业机器人控制器通信的客户端库。客户端节点服务器作为任何遵守简单消息协议的机器人的驱动程序。此封装中的节点遵循ROS-Industrial驱动程序标准

工业校准

工业校准是一个工具箱,其目标是实现传感器,传感器阵列和机器人的外在和内在校准。目前正在开发的一个软件包是工业外部校准

供应商特定包

ROS-Industrial分发包含几个工业供应商的元包。更多信息可以在支持的硬件页面上找到 。

路线图

ROS-工业路线图(包括战略和技术目标)可以在这里找到。

规格

工业机器人驱动器规格

ROS-Industrial的一个目标是在工业机器人平台之间提供互操作性,以便利用更高级别的ROS软件。为了实现这一点,需要用于工业机器人控制器的ROS接口标准。创建ROS-Industrial驱动程序的任何人都必须遵守此标准

软件状态规格

ROS-Industrial软件状态规范是高级别,颜色编码,软件准备就绪的指示。这些指标用于向ROS-Industrial用户/开发人员传达软件元包的可靠性和可用性。有关更多信息,请参阅此处

教程

可以在这里找到一组详细的教程,涵盖ROS-Industrial和相关软件包。

联系我们/技术支持

联系我们使用ROS-Industrial Google组(注册会员可以使用直接电子邮件到ROS-Industrial)。

报告错误

与特定供应商堆栈相关的Bug应报告给堆栈的问题跟踪器,请参阅链接的不同页面。所有其他问题都可以提交到通用问题跟踪器。使用GitHub 报告错误或提交功能请求。[ 查看活动期 ]

------

ROS-Industrial教程概述

ROS-Industrial包含许多软件包。这些包分为两类:一般和特定于供应商。有关每个包的一般信息可以通过以下指向包的特定wiki的链接找到。

如果您发现这些教程的任何问题/问题,请使用开发人员组(swri-ros-pkg-dev)联系我们。

与特定供应商堆栈相关的错误应报告给堆栈的问题跟踪器,请参阅包页面的链接。所有其他问题都可以提交到通用问题跟踪器。使用GitHub 报告错误或提交功能请求。[ 查看活动期 ]

一般ROS-工业

以下部分介绍ROS-Industrial通用功能,库,消息等。

训练

培训课程被推荐给ROS和ROS-Industrial的新用户。

  1. 基本开发人员培训课程课程 - ROS-I Consortium类,用于C ++程序员,从基本Linux开始,并结束了具有视觉功能的拾取和放置项目。包括幻灯片,分步练习和测试代码。访问GitHub的代码。

一般

这些教程涵盖了ROS-Industrial上的各种主题。教程没有特定的顺序,并且旨在逐个主题地遵循。

  1. 为工业机器人创建URDF详细介绍了为工业机器人创建统一机器人描述格式(URDF)的步骤和约定。
  2. 为工业机器人创建MoveIt包 逐步介绍为工业机器人创建moveIt包的步骤。moveIt软件包为机器人提供碰撞感知路径规划。
  3. 使用ROS工业机器人支持包 本教程将提供构成ROS-Industrial机器人支持包的文件和目录的概述,并展示如何正确使用此类包提供的功能。
  4. 使用TCP套接字库创建联合位置流接口 这些注释适用于使用ROS-Industrial TCP套接字库在工业控制器上创建关节位置流接口。此接口适用于基本运动和概念验证集成。
  5. 使用IK Fast创建运动学解决方案 本教程介绍如何使用OpenRAVE的IKFast模块为机器人自动创建快速闭合形式的分析运动学解决方案。

工业校准工具箱

  1. 本征相机校准(工作中) 本教程介绍如何使用内置相机校准软件包使用导轨和校准目标计算相机内在参数。该过程使用与OpenCV和Matlab略有不同的成本函数。它依赖于知道相机在连续图像之间移动的距离。当精确执行时,例程更快,因为它需要更少的图像和更准确,因为参数具有更低的协方差。
  2. 使用目标的多相机外部校准 本教程通过两个示例说明如何执行摄像机网络的外部校准。您将学习如何编写和运行一个定义摄像机,目标和一系列观察的校准脚本。您还将学习如何修改现有的Xacro或Urdf模型,以提供用于安装校准结果的无缝接口。您还将介绍成本函数的概念。这个库的一个重要贡献是它包含的各种成本函数。
  3. 安装在机器人上的David SLS-2的外在校准 本教程介绍如何在工业Fanuc机器人上执行David SLS-2 3D传感器的外部校准。
  4. 相机对静态目标的外部校准(已弃用)本教程将解释如何使用industrial_extrinsic_cal包将一个或两个摄像机校准为棋盘或圆网格目标。如果使用两个摄像机,他们应该在他们的视野中有相同的目标。如果使用未更改的存储库提供了yaml文件的参数,那么您将需要至少一个华硕/ Kinect相机和棋盘(12x12正方形棋盘(11x11点))或圆形网格(5x7圆)。
  5. 网络摄像头校准 使用网络摄像头的工业外在校准的简单示例

创建新教程:

工业移动

工业MoveIt软件包包含工业的加载项的MoveIt运动规划库。

  1. 使用constrained_ik创建自定义IK解算器 使用约束IK软件包创建IK解算器的自定义实例
  2. 将constrained_ik添加到MoveIt运动学涵盖的步骤揭露constrained_ik作为IK解算器MoveIt

创建新教程:

工业轨迹滤波器

工业轨迹过滤包中包含的过滤器trajectory_msgs / JointTrajectory消息。

以下是工业轨迹过滤器的具体教程:

  1. 将手臂导航轨迹过滤器转换为MoveIt计划请求适配器本教程介绍如何将臂导航 轨迹过滤插件转换为可在catkin 包中编译的MoveIt 计划请求适配器。(<= Groovy)
  2. 开发计划请求适配器本教程是使用简单平滑滤波器作为示例的计划请求适配器的逐步开发
  3. 在MoveIt中使用规划适配器。本教程将向您介绍如何将规划请求适配器与MoveIt一起使用。

使用Arm Navigation中的轨迹过滤器教程(在Groovy中已弃用,Hydro和更高版本中不支持)

  1. 利用生成臂导航包中的轨迹滤波器概述常见的工业轨迹过滤器,并显示如何将其应用于自动生成的武器导航包

供应商特定教程

ROS-Industrial为许多供应商平台提供支持软件。每个平台需要不同的设置和配置步骤,以便与ROS-Industrial一起使用。

ABB

ABB软件包中包含了ABB工业机器人驱动程序和支持包。

提供以下教程以演示使用ROS工业接口的ABB机器人的安装和操作:

  1. 安装ABB ROS服务器本教程将介绍在ABB机器人控制器上安装ROS服务器代码和配置所需的控制器设置的步骤。
  2. 运行ROS服务器本教程介绍如何运行ABB ROS服务器,因此机器人将执行从ROS客户机节点发送的运动命令。

以下教程显示如何使用ABB Robot Studio与驱动程序:

  1. 在机器人工作室中使用模拟机器人 本教程介绍如何设置用于ROS-Industrial驱动程序的ABB RobotStudio模拟器。

创建新教程:

Fanuc

Fanuc的软件包中包含了Fanuc的工业机器人驱动程序和支持包。

靛青

  1. 在Fanuc控制器上安装ROS-Industrial本教程将指导您在Fanuc控制器上安装ROS-Industrial程序。
  2. ROS-Industrial在Fanuc控制器上的配置本教程将指导您完成控制器上ROS-Industrial Fanuc组件的配置。
  3. 在您的Fanuc机器人上运行ROS-Industrial程序本教程解释如何运行在前面的教程中安装的ROS-Industrial程序在仿真和真实硬件上。

  • 请参考Indigo教程。

动力学

  • 请参考Indigo教程。

Motoman

莫托曼软件包中包含的Motoman工业机器人驱动程序和支持包。

以下教程是一般motoman教程,并使用几个软件包:

  1. 使用Arm Warehouse Viewer在模拟中执行路径规划提供启动motoman sia10D机器人的臂仓库查看器的说明。

以下教程特定于dx100软件包(<= ROS Groovy)

  1. 创建DX100服务器应用程序(<= Groovy)本教程将介绍为dx100控制器创建服务器应用程序的步骤。服务器应用程序在控制器上运行,并允许与ROS节点通信。

以下教程特定于motoman_driver软件包(> = ROS Hydro)。此软件包支持DX100,DX200和FS100控制器的驱动程序:

  1. 安装Motoman FS / DX ROS服务器(Indigo) 本教程将介绍在FS和DX机器人控制器上安装ROS服务器代码的步骤
  2. 安装Motoman FS / DX100 ROS服务器(Hydro) 本教程将介绍在FS / DX100机器人控制器上安装ROS服务器代码的步骤
  3. 使用Motoman FS / DX ROS接口(Hydro) 本教程将介绍使用FS / DX接口的步骤
  4. 创建双臂系统(Indigo +)本教程与使用Motoman驱动程序的双臂系统(多组)的设置和配置相关

创建新教程:

机器人

Robotiq软件包中包含了Robotiq自适应夹具驱动程序和支持包。

  1. 使用Modbus TCP协议控制S型模型夹具 本教程解释如何使用“robotiq_s_model_control”和“robotiq_modbus_tcp”软件包来控制使用Modbus TCP协议配置的S模型夹具。有关Robotiq 自适应机器人夹具的更多信息,请访问此网站。
  2. 无题本教程介绍如何使用ROS-I Robotiq软件包通过modbus RTU协议控制Robotiq C型夹具

创建新教程:

通用机器人

通用机器人软件包中包含了通用机器人工业机器人驱动程序和支持包。

提供以下教程以演示使用ROS工业接口的通用机器人的安装和操作:

  1. 开始使用通用机器人和ROS-Industrial本教程将指导您完成ROS-Industrial与通用机器人控制器之间建立第一次联系的过程。

创建新教程:

外部软件包教程

以下部分提供了指向ROS-Industrial所依赖的外部软件包的链接。

MoveIt

MoveIt包是ROS-工业的核心手臂规划库。教程可以在这里找到。

实现注释

下面的教程只包括实现注释。他们可能或可能不会成为完整的教程本身。它们包括在这里,因为它们中的信息在其他地方找不到。

  1. 改进ROS - 工业机器人上的工业运动(实现注释)本教程提供了一些背景信息和提示/提示/技巧,以实现使用ROS-Industrial时更快更流畅的运动
  2. 从Google代码移植到Github(实现注释) 将包从Google代码移动到Github的简短说明
  3. 创建简单的EtherCAT IO网络(实现注释)
  4. ROS-工业拉动请求审查过程 ROS-Industrial核心仓库拉取请求审查过程的概述。
  5. 验证新机器人软件包(实施注意事项)
  6. 从Fuerte到Groovy的移植手臂导航包(实现注释)
  7. 在ParaView中安装PCL插件(实现注释)
  8. 机器人支持存储库的文件和目录布局(实现注释) 如何组织机器人支持存储库中的文件和目录

即将推出的教程

以下软件包的教程即将推出。

擅长

善于软件包中包含了娴熟的工业机器人驱动程序和支持包。

快来了

工业核心

产业核心软件包中包含了ROS-工业核心功能。

快来了

已弃用

以下教程已被弃用,因为它们不适用于当前版本的ROS-Industrial。描述表示它们应用的最后一个ROS-Industrial版本。

1. 为工业机器人创建臂导航包(<= Groovy)

  • 本教程介绍如何创建和手动导航包。

------

你为什么要关心质量?

2018年2月21日

这是哥本哈根IT大学Adam Alami的博客,他是一位博士。研究员,负责管理ROS / ROS-Industrial质量评估,并制定实现质量保证的路线图以及支持该目标的工具和生态系统。

问题的答案是“你为什么要关心质量?”就是我们都想要提供价值的代码。在软件工程的背景下,当代码无缺陷,可靠并且快速集成时,就可以实现价值。鉴于此,ROSIN向工业领域迈进了更高质量的智能机器人软件组件。ROSIN是创建一套工具以加速ROS使用和集成的倡议。“质量”是通过一套称为质量保证的工具和实践实现的最终产品的一项功能。

ROSIN的目标是为ROS创建质量保证公用事业和实践,以提高其质量。这将通过实施这些举措来实现:

  1. 使ROS包的质量可见:创建可以测量,分配和显示包的质量的过程/工具。
  2. 指定所有权:指定质量保证实践和基础设施的所有权。
  3. 加强代码审查流程:代码审查是一个现有的流程; 不幸的是,它被松散地实施和实践。这一举措的目的是将这种做法带回ROS质量保证核心质量实践。
  4. 实施代码扫描方法和工具。
  5. 维护问题:目标是吸引和招募新的维护人员,并减少孤立包的数量。
  6. 促进持续集成:此项举措将审查并加强持续集成(CI)服务的当前实施。
  7. Quality Hub网站:这将成为质量保证知识分享和质量保证实践记录的中心“前往”之地。
  8. 形式化代码所有权过程:目前,社区拥有非正式的代码所有权惯例。定义和实施代码所有权过程将为软件组件和负责任的开发者建立责任关系。
  9. 核心和非核心社区成员的入职流程:每次有新成员加入核心团队或新维护者时,都会执行入职流程。新手整合速度更快,知识无缝传输。这应该可以提高新人的留存率。
  10. Model-in-the-Loop测试:这将识别和展示使用模型驱动开发范例进行代码生成的机会。
  11. 实施持续改进过程:持续改进过程是持续改进质量保证实践的努力。这些努力是逐步审查和改进已有的做法。这是一套确保质量保证实践的生存和连续性的社区活动和流程。
  12. 自动化单元测试生成:这一举措的目标是自动创建测试。这项工作包括以下内容:
    1. 开发和展示ROS各个部分的性能测试和测试数据合成
    2. 为开发人员制作指南以继续使用这些测试
    3. 开发自动化测试生成算法
    4. 针对ROS的目的评估,选择和整合组合相互作用测试方法
  13. 质量话语:这是一个致力于质量保证的论坛。
  14. 质量保证促进活动:定期的社区活动将促进质量保证实践或支持特定的社区需求。活动构想:Bug粉碎派对 - 定期举办志愿者聚会(虚拟或实物搭配)来修复错误的活动。
  15. 模型驱动的开发:确定并展示使用模型驱动开发范例进行代码生成的机会。
  16. #ROSQA:Twitter标签; 可能会将“Quality Hub”帐户与协作标签相关联。

通过建立标准,实践和工具,质量得到保证,并在社区文化中出现。质量影响信任以及品牌价值。通过提供证据证明质量要求正在社区的生产过程中发生,最大限度地增加对ROS和ROS-Industrial的信任。今天,ROS是机器人事实上的操作系统之一。这种状态伴随着对质量的固有承诺。

通过建立标准,实践和工具,质量得到保证,并在社区文化中出现。质量影响信任以及品牌价值。通过提供证据证明质量要求正在社区的生产过程中发生,最大限度地增加对ROS和ROS-Industrial的信任。今天,ROS是机器人事实上的操作系统之一。这种状态伴随着对质量的固有承诺。

通过http://rosin-project.eu了解更多信息

最近由Fraunhofer IPA主办的ROS-I Conference 2017展会,ROS 如何关注质量?,由Yvonne Dittrich提供了更多的见解。

------http://rosin-project.eu/

------

End

------

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ROS2教程文档使用说明与为什么选择ROS2?

    进行ROS2编程经常要查阅文档,对于开发人员而言可以选择Zeal和Dash查阅API文档资料,方便快捷,可以参考如下链接:

    zhangrelay
  • 快速了解 Robot Operating System(ROS) 机器人操作系统

    关于ROS About ROS http://www.ros.org/about-ros/

    zhangrelay
  • ROS2编程基础课程--概述

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    zhangrelay
  • ROS2教程文档使用说明与为什么选择ROS2?

    进行ROS2编程经常要查阅文档,对于开发人员而言可以选择Zeal和Dash查阅API文档资料,方便快捷,可以参考如下链接:

    zhangrelay
  • ROS之初识机器人操作系统[一]

    ROS(Robot Operating System)是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。

    李小白是一只喵
  • 2018年智能机器人技术综合实训专题一系统基础

    此部分对应教材:《ROS机器人项目开发11例》,采用翻转课堂模式,并未按书中章节顺序授课。

    zhangrelay
  • 快速了解 Robot Operating System(ROS) 机器人操作系统

    关于ROS About ROS http://www.ros.org/about-ros/

    zhangrelay
  • 离线ROS API文档(Zeal或Dash)

    通常而言,通过ROS进行机器人开发设计,需要查阅C++或Python等文档,也需要时常翻阅ROS wiki和GitHub。

    zhangrelay
  • ROS 1 和 ROS 2 的前世、今生、安装使用说明与资料汇总

    现在,最常用的ROS indigo或ROS Kinetic等都是1.0时代的ROS,这个时代的ROS有一个master(roscore)。

    zhangrelay
  • ROS2编程基础课程--概述

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    zhangrelay

扫码关注云+社区

领取腾讯云代金券