正运动技术
正运动技术
精准24码全年无错版
EN
精准24码全年无错版
精准24码全年无错版

协助伙伴成功,是我们的价值所在

The value of Zmotion is to bring customers more success!

首页 / 支持与服务 / 技术分享

Technical support

技术分享

EtherCAT运动控制器在ROS上的应用(上)

本文以正运动技术EtherCAT运动控制器ZMC432和ZMC408CE为例,介绍正运动技术运动控制器在ROS上的应用开发。

在正式学习之前,我们先了解一下正运动技术的EtherCAT运动控制器ZMC432和ZMC408CE。这两款产品分别是32轴,8轴EtherCAT运动控制器。

ZMC432功能简介

ZMC432是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。

ZMC432运动控制器.png

ZMC432最多可支持32轴运动控制,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。

ZMC432支持32轴脉冲输入与编码器反馈,通用IO包含24路输入口和12个输出口;2路AD,2路DA;其中特定输出口支持高速PWM控制。

ZMC432通过EtherCAT和CAN总线进行硬件资源扩展,可扩展至4096路输入和4096路输出。

ZMC432运动控制器架构图.png


ZMC408CE功能简介

ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。

ZMC408CE运动控制器.png

ZMC408CE支持8轴运动控制,最多可扩展至32轴,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。

ZMC408CE支持8轴运动控制,可采用脉冲轴(带编码器反馈)或EtherCAT总线轴,通用IO包含24路输入口和16路输出口,部分IO为高速IO,模拟量AD/DA各两路,EtherCAT最快125us的刷新周期。

ZMC408CE支持8个通道的硬件比较输出、硬件定时器、运动中精准输出,还支持8通道PWM输出,对应的输出口为OUT0-7,支持8个通道同时触发硬件比较输出。

ZMC408CE可灵活进行硬件资源扩展,通过CAN或EtherCAT总线可扩展至4096个输入和4096个输出。

ZMC408CE运动控制器架构图.png

ZMC432,ZMC408CE均使用同一套API函数,均支持C、C++、C#、LabVIEW、Python、Delphi等开发语言,支持VC6.0、VB6.0、Qt、.Net等平台,支持Windows、Linux、WinCE、iMac等操作系统。

多种上位机开发方式.png




01
ROS应用背景

ROS(robot operating system)是用于机器人的一种开源后操作系统(次级操作系统)。首要设计目标是在机器人研发领域提高代码复用率。

ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。

ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。

简单来说,ROS作为一个灵活的操作系统,系统上的节点具有很大的随意性,它们可以位于不同的计算机上,甚至可以位于不同的网络上。我们可以使用一个Arduino作为一个节点发布信息,使用一台笔记本电脑作为一个节点订阅上述信息以及使用一台手机作为一个节点驱动电机等。

上述灵活性使得ROS可以适应很多不同场合的应用。

ROS应用场景.png


ROS的主要特点可以归纳为以下几条

1.分布式点对点设计
ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。

分布式点对点设计.png

2.多语言支持

ROS支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。

多语言支持.png

3.精简与集成

ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。

ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进行移植和重新使用。

4.工具包丰富

为了管理复杂的ROS软件框架,我们利用了大量的小工具去编译和运行多种多样的ROS组建,从而设计成了内核,而不是构建一个庞大的开发和运行环境。

工具包丰富.png

5.免费并且开源

ROS所有的源代码都是公开发布的。


ROS在行业中的一些应用

近年来,国内外机器人企业、无人驾驶企业,无人机企业(大疆无人机)都纷纷加入ROS阵营。且在各大招聘中,不管是腾讯、小马智行、阿里巴巴的菜鸟网络、百度Apollo等,招聘无人驾驶规划算法工程师、自主导航工程师、机器人感知算法工程师、系统平台研发架构师等岗位时,均要求“熟悉ROS”或者“具备ROS开发经验者优先”。
从这些我们可以看出来ROS系统的发展趋势,正在机器人行业一步一步的主导中国市场。 以下是一些ROS典型应用场景:
1.机器人控制器中的大佬人物 - KEBA,他们的控制器已经支持ROS。

KEBA机器人.png

2.美国NASA基于ROS开发的Robonaut 2已经在国际空间站里干活了。

Robonaut 2机器人.png

3.百度apollo无人车的底层是基于ROS开发的,差点改成了ROS 2,可以在github上找到(apollo-platform)。

百度apollo无人车.png

4.ROS-I最近正准备和微软、宝马合作,开发一套自动化解决方案(参考:A ROS-Industrial Collaboration with Microsoft and BMW)。

ROS-I.png

5.许多工业机械臂已经开始使用ROS系统,其中2017年底ROS-I官方发布的五周年视频不乏四大家族中的机器人。下图的库卡youbot机器人就是采用ROS系统开发。
库卡youbot机器人.png




02
软件安装过程
此部分主要讲Ubuntu18.04安装ROS Melodic详细过程(本文以Ubuntu18.04为例,其他同理,并不影响运动控制器的运用)。

1.设置sources.list
01.png

2.设置key(公钥已更新)
02.png

1.png
3.更新package(时间有点长,耐心等待)
03.png
此时可能会遇到以下问题:
2.png
解决办法如下,在终端输入:
$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F42ED6FBAB17C654
$ sudo apt-get update
3.png

当出现Reading package lists… Done说明更新完成。

4.安装ROS melodic完整版
04.png
5.初始化rosdep
05.png

效果示意图:

4.png

5.png
输入指令sudo rosdep init若遇到以下问题:

(1)sudo : rosdep : command not found问题

在终端输入:sudo apt install rospack-tools

(2)ERROR : cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list Website may be down.

①在终端输入:sudo gedit / etc / hosts,打开hosts文件,内容如下;

6.png

②将:199.232.28.133 raw.githubusercontent.com添加在文件中,添加后的文件如下;

7.png

③然后保存文件后退出;

8.png

④在终端执行:sudo rosdep init,问题解决。

6.测试ROS是否安装成功
06.png
成功打开如下图所示:

9.png




03
ROS编程案例
这部分主要讲“消息发布”和“订阅”两个ROS编程案例。
1.创建一个ROS工作空间。
111.png

2.创建ROS程序包( zmotion为程序包名,也可以定义为其他 )。
222.png

3.在创建完程序包后,每次运行需要source ~ / catkin_ws / devel / setup.bash,否则无法找到文件。
解决每次都要source方法:
333.png
4.新建节点文件。
在zmotion包目录中创建一个src目录:
444.png
5.撰写发布节点(talker.cpp)。

实现功能:

(1)初始化ROS系统;

(2)在chatter topic上发布std_msgs/Float64消息;

(3)以每秒10次频率发布消息。

#include "ros/ros.h"
#include "std_msgs/Float64.h"
#include int main(int argc, char **argv)
{
  //初始化ROS,名称重映射(唯一),必须为base name,不含/
  ros::init(argc, argv, "talker"); 
  //为进程的节点创建一个句柄,第一个创建的NodeHandle初始化节点
  ros::NodeHandle n;
  //告诉主机要在chatter topic上发布一个std_msgs消息
  //主机会订阅所有chatter topic节点,参数表示发布队列的大小(先进先出)
  ros::Publisher chatter_pub = n.advertise("chatter", 1000);
  ros::Rate loop_rate(10);  //自循环频率
  int count = 0;
  while (ros::ok())
  {
    std_msgs::Float64 msg;
    msg.data = count*1.0;
    //输出,用来替代prinf/cout
    ROS_INFO("Position is: %f", msg.data); 
chatter_pub.publish(msg);
    ros::spinOnce();
    //休眠,来使发布频率为10Hz
    loop_rate.sleep();
    ++count;
  }
  return 0;
}
6.撰写订阅节点(listener.cpp)。
实现功能:
(1)初始化ROS系统;
(2)订阅chatter topic消息;
(3)进入自循环,等待消息到达;
(4)消息到达,调用chatterCallback()函数。
666.png

7.修改CMakeLists.txt。

(1)打开程序包zmotion(catkin_ws / src / zmotion)路径,找到CMakeLists.txt文件。

10.png

(2) 最低版本修改为2.8.3。
72.png
(3) 找到find_package,添加依赖包message_generation。
73.png
(4)确保generate_message被调用。
74.png
(5)确保在运行时依赖中也添加了该消息的依赖。
75.png
(6)修改build下的设置

11.png

①将include_directories中include解注释。

12.png
761.png

②在指定位置添加下列代码下面的代码 可以任意添加在build中,我为了美观所以添加在相应位置的,只要在build中添加都生效。
762.png

13.png

(7)最后,列出完整的CMakeLists.txt。

cmake_minimum_required(VERSION 2.8.3)
project(zmotion)
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  message_generation
)
## Generate added messages and services with any dependencies listed here
generate_messages(
   DEPENDENCIES
   std_msgs
)
###################################
## catkin specific configuration ##
###################################
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES zmotion
# CATKIN_DEPENDS roscpp std_msgs
# DEPENDS system_lib
CATKIN_DEPENDS message_runtime
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(talker src/talker.cpp)
add_executable(listener src/listener.cpp)
## Rename C++ executable without prefix
add_dependencies(talker $zmotion_generate_messages_cpp)
## Specify libraries to link a library or executable target against
target_link_libraries(talker
   ${catkin_LIBRARIES}
)
target_link_libraries(listener
   ${catkin_LIBRARIES}
)
8.修改package.xml文件。
68.png

14.png

9.编译。
09.png
10.运行程序。
(1)打开一个新终端,启动ROS系统;
00.png
(2)打开一个新终端,运行发布节点;
001.png
(3)打开一个新终端,运行订阅节点;
002.png
(4)结果。
运行发布节点程序的结果:
003.png

运行订阅节点程序的结果:
004.png

本次,正运动技术EtherCAT运动控制器在ROS上的应用(上) ,就分享到这里。

更多精彩内容请关注“ 正运动小助手 ”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。

二维码-02.jpg

邮箱留言

Copyright © 2013 精准24码全年无错版 Design by Zmotion 版权所有   粤ICP备13037187号    Powered by 运动控制器-运动控制卡

在线咨询