技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 運動控制卡應(yīng)用開發(fā)教程之ROS(上)

運動控制卡應(yīng)用開發(fā)教程之ROS(上)

時間:2020-12-23 15:26:44來源:正運動技術(shù)

導(dǎo)語:?

  今天,正運動技術(shù)為大家分享一下《運動控制卡應(yīng)用開發(fā)教程之ROS(上)》。

  本文從ROS應(yīng)用背景講起,再講Ubuntu18.04安裝ROS Melodic詳細(xì)過程,最后通過ROS編程案例——消息發(fā)布和訂閱,來詳細(xì)說明正運動技術(shù)運動控制卡ROS的應(yīng)用開發(fā)。

  在正式學(xué)習(xí)之前,我們先了解一下正運動技術(shù)的運動控制卡ECI2418和ECI2618。這兩款產(chǎn)品分別是4軸,6軸運動控制卡。

  

  運動控制

  

  ECI2418支持4軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。

  

  運動控制

  

  ECI2618支持6軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。

  

  運動控制

  

  ECI2418,ECI2618均使用同一套API函數(shù),均支持C、C++、C#、LabVIEW、Python、Delphi等開發(fā)語言,支持VC6.0、VB6.0、Qt、.Net等平臺,支持Windows、Linux、WinCE、iMac等操作系統(tǒng)。

  

  

          以下是ROS應(yīng)用開發(fā)教程(上)    

               一 ROS應(yīng)用背景    

  

  ROS(robot operating system)是用于機器人的一種開源后操作系統(tǒng)(次級操作系統(tǒng))。首要設(shè)計目標(biāo)是在機器人研發(fā)領(lǐng)域提高代碼復(fù)用率。ROS是一種分布式處理框架(又名Nodes)。這使可執(zhí)行文件能被單獨設(shè)計,并且在運行時松散耦合。這些過程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級別到社區(qū)一級的設(shè)計讓獨立地決定發(fā)展和實施工作成為可能。上述所有功能都能由ROS的基礎(chǔ)工具實現(xiàn)。

  簡單來說,ROS作為一個靈活的操作系統(tǒng),系統(tǒng)上的節(jié)點具有很大的隨意性,它們可以位于不同的計算機上,甚至可以位于不同的網(wǎng)絡(luò)上。我們可以使用一個Arduino作為一個節(jié)點發(fā)布信息,使用一臺筆記本電腦作為一個節(jié)點訂閱上述信息以及使用一臺手機作為一個節(jié)點驅(qū)動電機等。上述靈活性使得ROS可以適應(yīng)很多不同場合的應(yīng)用。

  

  運動控制

  

               1.ROS的主要特點可以歸納為以下幾條    

  (1)分布式點對點設(shè)計

  ROS的點對點設(shè)計以及服務(wù)和節(jié)點管理器等機制可以分散由計算機視覺和語音識別等功能帶來的實時計算壓力,能夠適應(yīng)多機器人遇到的挑戰(zhàn)。

  

  運動控制

  

  (2)多語言支持

  ROS支持許多種不同的語言,例如C++、Python、Octave和LISP,也包含其他語言的多種接口實現(xiàn)。

  

  運動控制

  

  (3)精簡與集成

  ROS建立的系統(tǒng)具有模塊化的特點,各模塊中的代碼可以單獨編譯,而且編譯使用的CMake工具使它很容易的就實現(xiàn)精簡的理念。ROS基本將復(fù)雜的代碼封裝在庫里,只是創(chuàng)建了一些小的應(yīng)用程序為ROS顯示庫的功能,就允許了對簡單的代碼超越原型進(jìn)行移植和重新使用。

  (4)工具包豐富

  為了管理復(fù)雜的ROS軟件框架,我們利用了大量的小工具去編譯和運行多種多樣的ROS組建,從而設(shè)計成了內(nèi)核,而不是構(gòu)建一個龐大的開發(fā)和運行環(huán)境。

  

  運動控制

  

  (5)免費并且開源

  ROS所有的源代碼都是公開發(fā)布的。

               2.ROS在行業(yè)中的一些應(yīng)用    

  近年來,國內(nèi)外機器人企業(yè)、無人駕駛企業(yè),無人機企業(yè)(大疆無人機)都紛紛加入ROS陣營。且在各大招聘中,不管是騰訊、小馬智行、阿里巴巴的菜鳥網(wǎng)絡(luò)、百度Apollo等,招聘無人駕駛規(guī)劃算法工程師、自主導(dǎo)航工程師、機器人感知算法工程師、系統(tǒng)平臺研發(fā)架構(gòu)師等崗位時,均要求“熟悉ROS”或者“具備ROS開發(fā)經(jīng)驗者優(yōu)先”。從這些我們可以看出來ROS系統(tǒng)的發(fā)展趨勢,正在機器人行業(yè)一步一步的主導(dǎo)中國市場。以下是一些ROS典型應(yīng)用場景:

  (1)機器人控制器中的大佬人物——KEBA,他們的控制器已經(jīng)支持ROS:

  

  運動控制

  

  (2)美國NASA基于ROS開發(fā)的Robonaut 2已經(jīng)在國際空間站里干活了:

  

  運動控制

  

  (3)百度apollo無人車的底層是基于ROS開發(fā)的,差點改成了ROS 2,可以在github上找到(apollo-platform):

  

  運動控制

  

  (4)ROS-I最近正準(zhǔn)備和微軟、寶馬合作,開發(fā)一套自動化解決方案(參考:A ROS-Industrial Collaboration with Microsoft and BMW):

  

  運動控制

  

  (5)許多工業(yè)機械臂已經(jīng)開始使用ROS系統(tǒng),其中2017年底ROS-I官方發(fā)布的五周年視頻不乏四大家族中的機器人。下圖的庫卡youbot機器人就是采用ROS系統(tǒng)開發(fā):

  

  運動控制

  

               二 軟件安裝過程    

  

  此部分主要講Ubuntu18.04安裝ROS Melodic詳細(xì)過程(本文以Ubuntu18.04為例,其他同理,并不影響運動控制卡的運用)。

  1.設(shè)置sources.list

  $ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

  2.設(shè)置key(公鑰已更新)

  $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

  

  運動控制

  

  3.更新package(時間有點長,耐心等待)

  $ sudo apt-get update

  此時可能會遇到以下問題:

  

  運動控制

  

  解決辦法如下,在終端輸入:

  $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F42ED6FBAB17C654

  $ sudo apt-get update

  

  運動控制

  

  當(dāng)出現(xiàn)Reading package lists… Done說明更新完成。

  4.安裝ROS melodic完整版

  $ sudo apt-get install ros-melodic-desktop-full

  5.初始化rosdep

  $ sudo rosdep init

  $ rosdep update

  $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

  $ source ~/.bashrc

  效果示意圖:

  

  運動控制

  運動控制

  

               輸入指令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.

 ?、僭诮K端輸入:sudo gedit /etc/hosts,打開hosts文件,內(nèi)容如下:

  

  運動控制

  


 ?、趯ⅲ?99.232.28.133 raw.githubusercontent.com添加在文件中,添加后的文件如下:

  

  運動控制

  

 ?、廴缓蟊4嫖募笸顺?

  

  運動控制

  

 ?、茉诮K端執(zhí)行:sudo rosdep init,問題解決。

  6.測試ROS是否安裝成功

  $ roscore

  成功打開如下圖所示:

  

  運動控制

  

               三 ROS編程案例    

  

  這部分主要講“消息發(fā)布”和“訂閱”兩個ROS編程案例。

  1.創(chuàng)建一個ROS工作空間

  $ mkdir -p ~/catkin_ws/src

  $ cd ~/catkin_ws/

  $ catkin_make

  2.創(chuàng)建ROS程序包(zmotion為程序包名,也可以定義為其他)

  $ cd ~/catkin_ws/src

  $ catkin_create_pkg zmotion std_msgs roscpp

  $ cd ~/catkin_ws

  $ catkin_make

  3.在創(chuàng)建完程序包后,每次運行需要source ~/catkin_ws/devel/setup.bash,否則無法找到文件。

  解決每次都要source方法:

  在終端輸入:

  $ gedit ~/.bashrc

  在文件末尾添加并保存:

  $ source ~/catkin_ws/devel/setup.bash

  4.新建節(jié)點文件

  在zmotion包目錄中創(chuàng)建一個src目錄:

  $ cd ~/catkin_ws/src/zmotion //進(jìn)入zmotion程序包路徑下

  $ mkdir -p src //新建src文件夾,用來存放c++程序

  $ cd src/ //進(jìn)入src文件夾路徑下

  $ touch talker.cpp //新建發(fā)布消息節(jié)點cpp文件

  $ touch listener.cpp //新建訂閱消息節(jié)點cpp文件

  5.撰寫發(fā)布節(jié)點(talker.cpp)

  實現(xiàn)功能:

  (1)初始化ROS系統(tǒng);

  (2)在chatter topic上發(fā)布std_msgs/Float64消息;

  (3)以每秒10次頻率發(fā)布消息。

  #include "ros/ros.h"

  #include "std_msgs/Float64.h"

  #include

  int main(int argc, char **argv)

  {

      //初始化ROS,名稱重映射(唯一),必須為base name,不含/

      ros::init(argc, argv, "talker");

      //為進(jìn)程的節(jié)點創(chuàng)建一個句柄,第一個創(chuàng)建的NodeHandle初始化節(jié)點

      ros::NodeHandle n;

      //告訴主機要在chatter topic上發(fā)布一個std_msgs消息

      //主機會訂閱所有chatter topic節(jié)點,參數(shù)表示發(fā)布隊列的大小(先進(jìn)先出)

      ros::Publisher chatter_pub = n.advertise("chatter", 1000);

      ros::Rate loop_rate(10); //自循環(huán)頻率

      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();

          //休眠,來使發(fā)布頻率為10Hz

          loop_rate.sleep();

          ++count;

      }

      return 0;

  }

  6.撰寫訂閱節(jié)點(listener.cpp)

  實現(xiàn)功能:

  (1)初始化ROS系統(tǒng);

  (2)訂閱chatter topic消息;

  (3)進(jìn)入自循環(huán),等待消息到達(dá);

  (4)消息到達(dá),調(diào)用chatterCallback()函數(shù)。

  #include "ros/ros.h"

  #include "std_msgs/Float64.h"

  //回調(diào)函數(shù)

  void chatterCallback(const std_msgs::Float64::ConstPtr& msg)

  {

         ROS_INFO("I heard: %f", msg->data);

  }

  int main(int argc, char **argv)

  {

      ros::init(argc, argv, "listener");

      ros::NodeHandle n;

      //告訴master需要訂閱chatter topic消息

      ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

      ros::spin(); //自循環(huán)

      return 0;

  }

  7.修改CMakeLists.txt

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

  

  運動控制

  

  (2) 最低版本修改為2.8.3

  cmake_minimum_required(VERSION 2.8.3)

  (3) 找到find_package,添加依賴包message_generation。

  find_package(catkin REQUIRED COMPONENTS

      roscpp

      std_msgs

      message_generation

  )

  (4) 確保generate_message被調(diào)用。

  generate_messages(

      DEPENDENCIES

      std_msgs

  )

  (5) 確保在運行時依賴中也添加了該消息的依賴。

  catkin_package(

  #      INCLUDE_DIRS include

  #      LIBRARIES beginner_tutorials

  #      CATKIN_DEPENDS roscpp std_msgs

  #      DEPENDS system_lib

          CATKIN_DEPENDS message_runtime

  )

  (6) 修改build下的設(shè)置

  

  運動控制

  

 ?、賹nclude_directories中include解注釋。

  

  運動控制

  

  include_directories(

      include

      ${catkin_INCLUDE_DIRS}

  )

 ?、谠谥付ㄎ恢锰砑酉铝写a下面的代碼可以任意添加在build中,我為了美觀所以添加在相應(yīng)位置的,只要在build中添加都生效。

  add_executable(talker src/talker.cpp)

  add_executable(listener src/listener.cpp)

  add_dependencies(talker $zmotion_generate_messages_cpp)//zmotion為程序包名

  target_link_libraries(talker

      ${catkin_LIBRARIES}

  )

  target_link_libraries(listener

      ${catkin_LIBRARIES}

  )

  

  運動控制

  

  (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文件

  

    
                
        <        
            build_depend        >    message_generation    
        build_depend    >    
        <        
            build_export_depend        >    message_generation    
        build_export_depend    >        
                
        <        
            exec_depend        >    message_runtime    
        exec_depend    >


  

  運動控制

  

  9.編譯

  $ cd ~/catkin_ws

  $ catkin_make

  10.運行程序

  (1) 打開一個新終端,啟動ROS系統(tǒng);

  $ roscore

  (2) 打開一個新終端,運行發(fā)布節(jié)點;

  $ cd ~/catkin_ws //進(jìn)入工作控件目錄下

  $ rosrun zmotion talker //運行發(fā)布節(jié)點程序

  (3) 打開一個新終端,運行訂閱節(jié)點;

  $ cd ~/catkin_ws

  $ rosrun zmotion listener

  (4)結(jié)果。

  運行發(fā)布節(jié)點程序的結(jié)果:

  [INFO] [WallTime: 1314931831.774057] Position is: 1.000000

  [INFO] [WallTime: 1314931832.775497] Position is: 2.000000

  [INFO] [WallTime: 1314931833.778937] Position is: 3.000000

  [INFO] [WallTime: 1314931834.782059] Position is: 4.000000

  [INFO] [WallTime: 1314931835.784853] Position is: 5.000000

  運行訂閱節(jié)點程序的結(jié)果:

  [INFO] [WallTime: 1314931970.262246] I heard: 1.000000

  [INFO] [WallTime: 1314931971.266348] I heard: 2.000000

  [INFO] [WallTime: 1314931972.270429] I heard: 3.000000

  [INFO] [WallTime: 1314931973.274382] I heard: 4.000000

  [INFO] [WallTime: 1314931974.277694] I heard: 5.000000

  參考文獻(xiàn):

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

  2.https://www.ncnynl.com/archives/201609/838.html

  3.https://blog.csdn.net/qq_42145185/article/details/80413380?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  4.https://www.zhihu.com/question/29025926?sort=created

  本次,正運動技術(shù)的《運動控制卡應(yīng)用開發(fā)教程之ROS(上)》就分享到這里,更多精彩內(nèi)容請關(guān)注“             正運動小助手    ”公眾號。

  本文由             正運動技術(shù)    原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。

  

  運動控制

  運動控制

標(biāo)簽:

點贊

分享到:

上一篇:快速入門 | 篇十九:正運動技...

下一篇:巖板深加工,維宏水刀控制軟...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號