-----------☺----------
全部资料幻灯片和示例代码: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节点。
- 第一天:侧重于介绍ROS技能。
- 第二天:使用MoveIt!检查运动规划以及使用笛卡尔路径规划器。
- 第三天:对感知的介绍,并以实验室编程练习(可选择)结束:拾取和放置应用,笛卡尔应用。
非常感谢Jeremy Zoss和Levi Armstrong带领培训班。还要感谢Austin Deric,Jonathan Meyer和Geoffrey Chiou,他们将培训课程更新为ROS Kinetic。培训课程是开源的,可在这里。
有关此类的更多详细信息,请参阅事件页面。
如果您有兴趣参加下一课程,请关注此活动页面。
ROS工业机器人(Kinetic)训练设置您的电脑
· PC设置
预备条件
Linux基础
· 练习0.1 - 介绍Ubuntu GUI
· 练习0.2 - Linux文件系统
· 练习0.3 - 使用终端
C ++
介绍
章节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.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-工业概述

ROS-Industrial是一个BSD(传统)/ Apache 2.0(首选)许可程序,包含工业硬件的库,工具和驱动程序。它由ROS工业联盟支持和指导。ROS-Industrial的目标是:
- 创建由工业机器人学研究人员和专业人员支持的社区
- 为与行业相关的ROS应用程序提供一站式服务
- 开发强大可靠的软件,满足工业应用的需求
- 结合ROS与现有工业技术(即将ROS高级功能与工业机器人控制器的低级可靠性和安全性相结合)的相对优势。
- 创建标准接口以激励“硬件无关”软件开发(使用标准化ROS消息)
- 提供一个简单的途径,在工业应用中应用尖端研究,使用通用的ROS架构
- 提供简单,易于使用,记录良好的API
请浏览rosindustrial.org网站,了解ROS-Industrial的概况。
开发人员名单
加入开发人员列表,了解最新的ROS-Industrial开发。
视频
查看我们的视频页面,了解ROS-Industrial可以做什么。
新闻
查看ROS-Industrial 博客。
订阅ROS-Industrial Twitter Feed。
支持的硬件
用于ABB,Adept,Fanuc,Motoman和Universal Robots的工业机械手由ROS-Industrial软件包支持。有关相关软件包的链接,请参阅供应商特定包。
有关特定供应商硬件的更多信息,请参见支持的硬件页面。
安装
ROS-工业安装说明可以在安装页上找到。
发展
浏览源代码
ROS-Industrial软件已迁移到Github。以前,ROS-Industrial代码托管在Google代码上。转换到Github发生在ROS Groovy发布之后。
旧版本(Groovy及更旧版本)code.google.com/p/swri-ros-pkg
最新版本(Hydro和更新版本)github.com/ros-industrial
贡献
成为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的新用户。
基本开发人员培训课程课程 - ROS-I Consortium类,用于C ++程序员,从基本Linux开始,并结束了具有视觉功能的拾取和放置项目。包括幻灯片,分步练习和测试代码。访问GitHub的代码。
一般
这些教程涵盖了ROS-Industrial上的各种主题。教程没有特定的顺序,并且旨在逐个主题地遵循。
-
为工业机器人创建URDF
详细介绍了为工业机器人创建统一机器人描述格式(URDF)的步骤和约定。
-
为工业机器人创建MoveIt包
逐步介绍为工业机器人创建moveIt包的步骤。moveIt软件包为机器人提供碰撞感知路径规划。
-
使用ROS工业机器人支持包
本教程将提供构成ROS-Industrial机器人支持包的文件和目录的概述,并展示如何正确使用此类包提供的功能。
-
使用TCP套接字库创建联合位置流接口
这些注释适用于使用ROS-Industrial TCP套接字库在工业控制器上创建关节位置流接口。此接口适用于基本运动和概念验证集成。
-
使用IK Fast创建运动学解决方案
本教程介绍如何使用OpenRAVE的IKFast模块为机器人自动创建快速闭合形式的分析运动学解决方案。
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv11889