在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618。这两款产品分别是4轴,6轴运动控制卡。

ECI2418支持4轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,其中特定输出口支持高速PWM控制。ECI2618支持6轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,其中特定输出口支持高速PWM控制。

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

在《运动控制卡应用开发教程之ROS(上)》里,我们讲了ROS应用背景,以及Ubuntu18.04安装ROS Melodic详细过程,并且通过ROS编程案例——消息发布和订阅,来详细说明正运动技术运动控制卡ROS的应用开发。从上篇中,我们得知,ROS作为一个灵活的操作系统,系统上的节点具有很大的随意性,它们可以位于不同的计算机上,甚至可以位于不同的网络上。我们可以使用一个Arduino作为一个节点发布信息,使用一台笔记本电脑作为一个节点订阅上述信息以及使用一台手机作为一个节点驱动电机等。上述灵活性使得ROS可以适应很多不同场合的应用。

ROS具有分布式点对点设计、多语言支持、精简与集成、工具包丰富以及免费并且开源等特点。ROS系统正在机器人行业一步一步的主导中国市场。

本篇文章我们主要讲配置正运动技术动态链接库环境以及运动控制卡在ROS下的单轴运动。一配置正运动技术动态链接库环境

1.添加动态链接库

在程序包目录zmotion(catkin_ws/src/zmotion/)下新建文件夹lib,存放动态链接库libzmotion.so。

在CMakeLists.txt中添加第三方库路径(build下):link_directories(lib${catkin_LIB_DIRS})

并在CMakeLists.txt文件中链接动态链接库(调用链接库时文件名去掉lib和.so):target_link_libraries(talker ${catkin_LIBRARIES} zmotion)

2.添加库函数zmcaux.cpp、zmotion.h、zmcaux.h

添加zmcaux.cpp文件到catkin_ws/src/zmotion/src目录下:

添加头文件zmotion.h、zmcaux.h到catkin_ws/src/zmotion/include/ zmotion目录下:

并在CMakeLists.txt中添加这三个库文件:add_executable(talkersrc/talker.cppsrc/zmcaux.cppinclude/zmotion/zmotion.hinclude/zmotion/zmcaux.h)

修改头文件引用,如下图所示(要填include文件的相对地址,zmotion为程序包名)#include 'zmotion/zmotion.h'#include 'zmotion/zmcaux.h'

二ROS下的单轴运动

这部分主要讲运动控制卡在ROS下的单轴运动。talker节点实现轴0的运动,并将其位置实时发送给listener节点,修改talker.cpp如下:

1.添加句柄和头文件#include 'zmotion/zmotion.h'#include 'zmotion/zmcaux.h'ZMC_HANDLE g_handle=NULL;

2.通过EtherNET链接运动控制卡ZMC_LinuxLibInit();//以太网(Ethernet)链接char ipaddr[16] = {'192.168.0.11'};int x =ZAux_OpenEth(ipaddr,&g_handle);   //***ZMCROS_INFO('以太网链接控制器:%d',x);//返回0则连接成功

3.实现单轴运动ZAux_Direct_SetSpeed(g_handle, 0, 200); //设置轴0运动速度为200units/sZAux_Direct_SetAccel(g_handle, 0, 2000); //设置轴0加速度为2000units/s/sZAux_Direct_SetDecel(g_handle, 0, 2000); //设置轴0减速度为2000units/s/sZAux_Direct_SetSramp(g_handle, 0, 100); //设置轴0 S曲线时间100msZAux_Direct_Single_Move(g_handle, 0, 300); //轴0 相对与当前位置运动100 units

4.将实时位置发送给listener节点float piValue;while (ros::ok()){std_msgs::Float64 msg;ZAux_Direct_GetMpos(g_handle, 0, & piValue);//获取时候msg.data = piValue;//输出,用来替代prinf/coutROS_INFO('Position is: %f', msg.data);chatter_pub.publish(msg);ros::spinOnce();//休眠,来使发布频率为10Hzloop_rate.sleep();}

5.编译cd ~/catkin_ws/catkin_make

6.运行程序//打开一个新终端roscore//打开另一个新终端cd ~/catkin_ws/rosrun zmotion talker//打开另一个新终端cd ~/catkin_ws/rosrun zmotion listener

运行效果如下,实时输出位置:

此外,我们在上位机上的示波器上可以看见,轴0做S曲线运动:

【参考文献】

1.ROS Wiki:http://wiki.ros.org/

2.正运动技术:ZMotion PC函数库编程手册

3.https://blog.csdn.net/weixin_42544625/article/details/86802753

运动控制卡的函数库与Linux,运动控制卡应用开发教程之ROS(下)相关推荐

  1. 运动控制卡的函数库与Linux,运动控制卡应用开发教程之使用Qt

    摘要:今天,我们来讲解一下正运动技术运动控制卡应用开发教程之Qt. 今天,我们来讲解一下正运动技术运动控制卡应用开发教程之Qt. 此前,我们与大家分享过"开放式Linux平台控制器XPLC5 ...

  2. python 运动控制卡_运动控制卡应用开发教程之Linux

    今天,正运动技术为大家分享一下运动控制卡应用开发教程之Linux.我们将从新建Qt项目,添加函数库讲起,再详细讲解函数的用法,最后通过一个连续插补例程讲解来了解项目实操. 在正式学习之前,我们先了解一 ...

  3. wince 开发_正运动技术运动控制卡应用开发教程之Python

    众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制. 今天正运动技术与大家分享一下运动控制卡应用开发教程之Pyth ...

  4. EtherCAT运动控制卡开发教程之python

    众所周知,Python作为一门面向对象的新兴开发语言,具有非常完善的基础代码库,更注重实用,同时代码可读极强,编写完程序即可直接运行,被越来越多的人广泛将它用于机器视觉和自动化控制. 今天正运动技术与 ...

  5. 运动控制卡应用开发教程之VC6.0

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之VC6.0. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. ECI2 ...

  6. 运动控制卡应用开发教程之LabVIEW

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之LabVIEW. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. EC ...

  7. EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续

    今天,正运动小助手给大家分享一下EtherCAT运动控制卡开发教程之Qt,主要介绍一下如何通过Qt编程实现小线段轨迹连续加工,暂停与继续. ECI2828运动控制卡的硬件介绍 ECI2828系列控制卡 ...

  8. 运动控制卡应用开发教程之MATLAB

    今天,正运动小助手给大家分享一下运动控制卡应用开发教程之MATLAB.  一 ECI2828硬件介绍 ECI2828系列运动控制卡支持多达16 轴直线插补.任意圆弧插补.空间圆弧.螺旋插补.电子凸轮. ...

  9. Linux Ubuntu 16.04 安装 yaml-cpp ROS 下参数服务器及yaml-cpp实现参数读写

    Linux Ubuntu 16.04 安装 yaml-cpp & ROS 下使用.yaml文件实现参数读写 0. 准备工作 1. 安装yaml-cpp 2. ROS中使用.yaml文件实现参数 ...

最新文章

  1. activiti任务TASK
  2. html的高度自适应,CSS布局自适应高度解决方法
  3. java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型
  4. 3详细参数_【前沿】一加7Pro拍照详细参数曝光 3倍光变30W快充
  5. POJ 1087 -- A Plug for UNIX(最大流,建图)(文末有极限数据)
  6. 通过CMOS设置定时开机
  7. JDK 6中新增的Java Console类功能概览
  8. leetcode 455. 分发饼干 思考分析
  9. 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
  10. ORA-02290:违反检查约束条件(sys_c0011321)什么原因
  11. 【Postgresql】pg掉电后无法重启
  12. GsonForamt插件的使用
  13. 置换元素和非置换元素
  14. 产品必备技能(五):如何使用商业画布分析一款产品?附实操报告
  15. AutoCAD字体安装教程
  16. 计算机辅助翻译实践语料库,《计算机辅助翻译实践》
  17. 企业联合体的形式_企业组织形式的概念与类型怎么分?
  18. 怎么设计计算机网络共享,怎么设置网络共享?教大家两种设置共享网络的方法...
  19. 使用phpword替换模板内容 在模板追加内容
  20. vue 环境配置.env;.env.development;.env.production配置

热门文章

  1. IIS6.0架构(续)
  2. vr计算机组装,VR技术在计算机组装与维护教学中的应用
  3. 淘宝大数据解析之timetunnel
  4. 计算机教学拼音打字教案,小学信息技术第2单元 Windows的常用功能第10课 中文输入法教案...
  5. MAC禁止chrome自动更新【绝对真实有效,无效剁吊】
  6. 支付宝手机网站支付示例
  7. windows server2012安装web服务以及运行asp
  8. Matlab之创建等间隔一维数组
  9. 我的世界java版hud怎么设置_修改配置文件以关闭HUD和怪物隐身
  10. 输入无线网密码后显示无法连接服务器,无线网连接失败