-----------☺----------
全部资料幻灯片和示例代码: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工业联盟美洲在2017年2月13-15日在位于德克萨斯州圣安东尼奥的SwRI举办了ROS-工业开发者培训班。包括空军研究实验室,波音公司,卡特彼勒,加拿大国家研究委员会,SwRI,德克萨斯大学奥斯汀分校和安川美国公司Motoman机器人部门的多种组织由17名与会者代表。这三天的课程面向具有C ++编程背景的个人,他们试图学习构成自己的ROS节点。
非常感谢Jeremy Zoss和Levi Armstrong带领培训班。还要感谢Austin Deric,Jonathan Meyer和Geoffrey Chiou,他们将培训课程更新为ROS Kinetic。培训课程是开源的,可在这里。
有关此类的更多详细信息,请参阅事件页面。
如果您有兴趣参加下一课程,请关注此活动页面。
· PC设置
· 练习0.1 - 介绍Ubuntu GUI
· 练习0.2 - Linux文件系统
· 练习0.3 - 使用终端
· 练习1.0 - ROS设置
· 练习1.1 - 创建Catkin工作区
· 练习1.2 - 安装现有软件包
· 练习1.3 - 创建ROS包和节点
· 练习1.4 - 主题和消息
· 练习2.0 - 服务
· 练习2.1 - 操作
· 练习2.2 - ROS启动文件
· 练习2.3 - 参数
· 练习3.0 - URDF简介
· 练习3.1 - Workcell XACRO
· 练习3.2 - 使用TF进行坐标变换
· 练习3.3 - 构建一个MoveIt!包
· 练习3.4 - 使用RViz的运动规划
· 练习4.0 - 使用C ++的运动规划
· 练习4.1 - 笛卡尔路径规划
· 练习4.2 - 感知导论
· 练习4.3 - 构建感知流水线
· 重复幻灯片
· 练习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 - 创建拾取移动
· 感知驱动操纵练习10 - 创建地点移动
· 感知驱动操纵练习11 - 放置盒
· 介绍
· 应用程序结构
· 一般说明
· 笛卡尔计划和执行练习1 - 加载参数
· 笛卡尔计划和执行练习2 - 初始化ROS
· 笛卡尔计划和执行练习3 - 初始化笛卡尔
· 笛卡尔计划和执行练习4 - 移动原点
· 笛卡尔计划和执行练习5 - 生成半约束轨迹
· 笛卡尔计划和执行练习6 - 计划机器人路径
· 笛卡尔计划和执行练习7 - 运行机器人路径
------
ROS-Industrial是一个BSD(传统)/ Apache 2.0(首选)许可程序,包含工业硬件的库,工具和驱动程序。它由ROS工业联盟支持和指导。ROS-Industrial的目标是:
请浏览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包含许多软件包。这些包分为两类:一般和特定于供应商。有关每个包的一般信息可以通过以下指向包的特定wiki的链接找到。
如果您发现这些教程的任何问题/问题,请使用开发人员组(swri-ros-pkg-dev)联系我们。
与特定供应商堆栈相关的错误应报告给堆栈的问题跟踪器,请参阅包页面的链接。所有其他问题都可以提交到通用问题跟踪器。使用GitHub 报告错误或提交功能请求。[ 查看活动期 ]
以下部分介绍ROS-Industrial通用功能,库,消息等。
培训课程被推荐给ROS和ROS-Industrial的新用户。
这些教程涵盖了ROS-Industrial上的各种主题。教程没有特定的顺序,并且旨在逐个主题地遵循。
创建新教程:
该工业MoveIt软件包包含工业的加载项的MoveIt运动规划库。
创建新教程:
该工业轨迹过滤包中包含的过滤器trajectory_msgs / JointTrajectory消息。
以下是工业轨迹过滤器的具体教程:
使用Arm Navigation中的轨迹过滤器教程(在Groovy中已弃用,Hydro和更高版本中不支持)
ROS-Industrial为许多供应商平台提供支持软件。每个平台需要不同的设置和配置步骤,以便与ROS-Industrial一起使用。
在ABB软件包中包含了ABB工业机器人驱动程序和支持包。
提供以下教程以演示使用ROS工业接口的ABB机器人的安装和操作:
以下教程显示如何使用ABB Robot Studio与驱动程序:
创建新教程:
该Fanuc的软件包中包含了Fanuc的工业机器人驱动程序和支持包。
靛青
玉
动力学
该莫托曼软件包中包含的Motoman工业机器人驱动程序和支持包。
以下教程是一般motoman教程,并使用几个软件包:
以下教程特定于dx100软件包(<= ROS Groovy):
以下教程特定于motoman_driver软件包(> = ROS Hydro)。此软件包支持DX100,DX200和FS100控制器的驱动程序:
创建新教程:
该Robotiq软件包中包含了Robotiq自适应夹具驱动程序和支持包。
创建新教程:
在通用机器人软件包中包含了通用机器人工业机器人驱动程序和支持包。
提供以下教程以演示使用ROS工业接口的通用机器人的安装和操作:
创建新教程:
以下部分提供了指向ROS-Industrial所依赖的外部软件包的链接。
该MoveIt包是ROS-工业的核心手臂规划库。教程可以在这里找到。
下面的教程只包括实现注释。他们可能或可能不会成为完整的教程本身。它们包括在这里,因为它们中的信息在其他地方找不到。
以下软件包的教程即将推出。
在善于软件包中包含了娴熟的工业机器人驱动程序和支持包。
快来了
该产业核心软件包中包含了ROS-工业核心功能。
快来了
以下教程已被弃用,因为它们不适用于当前版本的ROS-Industrial。描述表示它们应用的最后一个ROS-Industrial版本。
1. 为工业机器人创建臂导航包(<= Groovy)
------
这是哥本哈根IT大学Adam Alami的博客,他是一位博士。研究员,负责管理ROS / ROS-Industrial质量评估,并制定实现质量保证的路线图以及支持该目标的工具和生态系统。
问题的答案是“你为什么要关心质量?”就是我们都想要提供价值的代码。在软件工程的背景下,当代码无缺陷,可靠并且快速集成时,就可以实现价值。鉴于此,ROSIN向工业领域迈进了更高质量的智能机器人软件组件。ROSIN是创建一套工具以加速ROS使用和集成的倡议。“质量”是通过一套称为质量保证的工具和实践实现的最终产品的一项功能。
ROSIN的目标是为ROS创建质量保证公用事业和实践,以提高其质量。这将通过实施这些举措来实现:
通过建立标准,实践和工具,质量得到保证,并在社区文化中出现。质量影响信任以及品牌价值。通过提供证据证明质量要求正在社区的生产过程中发生,最大限度地增加对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
------