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

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

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

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()

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 <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";
cloud_topic="kinect/depth_registered/points";

/*
* SETUP PUBLISHERS
*/
ros::Publisher object_pub, cluster_pub, pose_pub;

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
{
}
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);
object_pub.publish(pc2_cloud);

/* ========================================
* Fill Code: PUBLISH OTHER MARKERS (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!检查运动规划以及使用笛卡尔路径规划器
• 第三天：对感知的介绍，并以实验室编程练习（可选择）结束：拾取和放置应用，笛卡尔应用

# ROS工业机器人（Kinetic）训练

· PC设置

## 预备条件

### Linux基础

· 练习0.1 - 介绍Ubuntu GUI

· 练习0.2 - Linux文件系统

· 练习0.3 - 使用终端

## 章节1 - ROS概念和基础

· 练习1.0 - ROS设置

· 练习1.1 - 创建Catkin工作区

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

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

· 练习1.4 - 主题和消息

## 章节2 - 基本ROS应用程序

· 练习2.0 - 服务

· 练习2.1 - 操作

· 练习2.2 - ROS启动文件

· 练习2.3 - 参数

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

· 练习3.0 - URDF简介

· 练习3.1 - Workcell XACRO

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

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

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

## 章节4 - 笛卡尔和感知

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

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

· 练习4.2 - 感知导论

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

## 章节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

## 安装

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

## 发展

### 拉动请求审核指南

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

## 软件包摘要

### 供应商特定包

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

## 路线图

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

## 规格

### 工业机器人驱动器规格

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

### 软件状态规格

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

------

## ROS-Industrial教程概述

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

## 一般ROS-工业

### 训练

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

### 一般

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. 网络摄像头校准 使用网络摄像头的工业外在校准的简单示例

### 工业移动

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

### 工业轨迹滤波器

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

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

## 供应商特定教程

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

### ABB

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

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

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

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

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

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型夹具

### 通用机器人

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

## 外部软件包教程

### MoveIt

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

## 实现注释

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

## 已弃用

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

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

------

# 你为什么要关心质量？

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. 模型驱动的开发：确定并展示使用模型驱动开发范例进行代码生成的机会。

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

------

End

------

0 条评论

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

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

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

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

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

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

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

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

• ### 2018年智能机器人技术综合实训专题一系统基础

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

• ### 离线ROS API文档（Zeal或Dash）

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

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

现在，最常用的ROS indigo或ROS Kinetic等都是1.0时代的ROS，这个时代的ROS有一个master（roscore）。

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

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

Exbot讲师