時間:2021-09-26 17:43:21來源:深圳市正運動技術有限公司
今天,正運動技術為大家分享一下《運動控制卡在ROS上的應用(下)》。本章節在《運動控制卡在ROS上的應用(上)》程序的基礎上稍作修改,實現在ROS下正運動技術運動控制卡的開發。
在正式學習之前,我們先了解一下正運動技術的運動控制卡ECI2618和ECI2828。這兩款產品分別是6軸,8軸運動控制卡。
ECI2618支持6軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。
ECI2828支持8軸總線型輸入與編碼器反饋,板載24點輸入,16點輸出,2路AD,2路DA,支持手輪接口,其中特定輸出口支持高速PWM控制。
ECI2618,ECI2828均使用同一套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(talker src/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/cout ROS_INFO("Position is: %f", msg.data); chatter_pub.publish(msg); ros::spinOnce(); //休眠,來使發布頻率為10Hz loop_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
本次,正運動技術的《運動控制卡在ROS上的應用(下)》就分享到這里,更多精彩內容請關注“正運動小助手”公眾號。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-06-06
2025-05-19
2025-04-30
2025-04-11
2025-04-08
2025-03-31