時間:2020-12-23 15:26:44來源:正運動技術
今天,正運動技術為大家分享一下《運動控制卡應用開發教程之ROS(上)》。
本文從ROS應用背景講起,再講Ubuntu18.04安裝ROS Melodic詳細過程,最后通過ROS編程案例——消息發布和訂閱,來詳細說明正運動技術運動控制卡ROS的應用開發。
在正式學習之前,我們先了解一下正運動技術的運動控制卡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應用背景
ROS(robot operating system)是用于機器人的一種開源后操作系統(次級操作系統)。首要設計目標是在機器人研發領域提高代碼復用率。ROS是一種分布式處理框架(又名Nodes)。這使可執行文件能被單獨設計,并且在運行時松散耦合。這些過程可以封裝到數據包(Packages)和堆棧(Stacks)中,以便于共享和分發。ROS還支持代碼庫的聯合系統。使得協作亦能被分發。這種從文件系統級別到社區一級的設計讓獨立地決定發展和實施工作成為可能。上述所有功能都能由ROS的基礎工具實現。
簡單來說,ROS作為一個靈活的操作系統,系統上的節點具有很大的隨意性,它們可以位于不同的計算機上,甚至可以位于不同的網絡上。我們可以使用一個Arduino作為一個節點發布信息,使用一臺筆記本電腦作為一個節點訂閱上述信息以及使用一臺手機作為一個節點驅動電機等。上述靈活性使得ROS可以適應很多不同場合的應用。
1.ROS的主要特點可以歸納為以下幾條
(1)分布式點對點設計
ROS的點對點設計以及服務和節點管理器等機制可以分散由計算機視覺和語音識別等功能帶來的實時計算壓力,能夠適應多機器人遇到的挑戰。
(2)多語言支持
ROS支持許多種不同的語言,例如C++、Python、Octave和LISP,也包含其他語言的多種接口實現。
(3)精簡與集成
ROS建立的系統具有模塊化的特點,各模塊中的代碼可以單獨編譯,而且編譯使用的CMake工具使它很容易的就實現精簡的理念。ROS基本將復雜的代碼封裝在庫里,只是創建了一些小的應用程序為ROS顯示庫的功能,就允許了對簡單的代碼超越原型進行移植和重新使用。
(4)工具包豐富
為了管理復雜的ROS軟件框架,我們利用了大量的小工具去編譯和運行多種多樣的ROS組建,從而設計成了內核,而不是構建一個龐大的開發和運行環境。
(5)免費并且開源
ROS所有的源代碼都是公開發布的。
2.ROS在行業中的一些應用
近年來,國內外機器人企業、無人駕駛企業,無人機企業(大疆無人機)都紛紛加入ROS陣營。且在各大招聘中,不管是騰訊、小馬智行、阿里巴巴的菜鳥網絡、百度Apollo等,招聘無人駕駛規劃算法工程師、自主導航工程師、機器人感知算法工程師、系統平臺研發架構師等崗位時,均要求“熟悉ROS”或者“具備ROS開發經驗者優先”。從這些我們可以看出來ROS系統的發展趨勢,正在機器人行業一步一步的主導中國市場。以下是一些ROS典型應用場景:
(1)機器人控制器中的大佬人物——KEBA,他們的控制器已經支持ROS:
(2)美國NASA基于ROS開發的Robonaut 2已經在國際空間站里干活了:
(3)百度apollo無人車的底層是基于ROS開發的,差點改成了ROS 2,可以在github上找到(apollo-platform):
(4)ROS-I最近正準備和微軟、寶馬合作,開發一套自動化解決方案(參考:A ROS-Industrial Collaboration with Microsoft and BMW):
(5)許多工業機械臂已經開始使用ROS系統,其中2017年底ROS-I官方發布的五周年視頻不乏四大家族中的機器人。下圖的庫卡youbot機器人就是采用ROS系統開發:
二 軟件安裝過程
此部分主要講Ubuntu18.04安裝ROS Melodic詳細過程(本文以Ubuntu18.04為例,其他同理,并不影響運動控制卡的運用)。
1.設置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.設置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
當出現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.
①在終端輸入:sudo gedit /etc/hosts,打開hosts文件,內容如下:
②將:199.232.28.133 raw.githubusercontent.com添加在文件中,添加后的文件如下:
③然后保存文件后退出;
④在終端執行:sudo rosdep init,問題解決。
6.測試ROS是否安裝成功
$ roscore
成功打開如下圖所示:
三 ROS編程案例
這部分主要講“消息發布”和“訂閱”兩個ROS編程案例。
1.創建一個ROS工作空間
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
2.創建ROS程序包(zmotion為程序包名,也可以定義為其他)
$ cd ~/catkin_ws/src
$ catkin_create_pkg zmotion std_msgs roscpp
$ cd ~/catkin_ws
$ catkin_make
3.在創建完程序包后,每次運行需要source ~/catkin_ws/devel/setup.bash,否則無法找到文件。
解決每次都要source方法:
在終端輸入:
$ gedit ~/.bashrc
在文件末尾添加并保存:
$ source ~/catkin_ws/devel/setup.bash
4.新建節點文件
在zmotion包目錄中創建一個src目錄:
$ cd ~/catkin_ws/src/zmotion //進入zmotion程序包路徑下
$ mkdir -p src //新建src文件夾,用來存放c++程序
$ cd src/ //進入src文件夾路徑下
$ touch talker.cpp //新建發布消息節點cpp文件
$ touch listener.cpp //新建訂閱消息節點cpp文件
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
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()函數。
#include "ros/ros.h"
#include "std_msgs/Float64.h"
//回調函數
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(); //自循環
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被調用。
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下的設置
①將include_directories中include解注釋。
include_directories(
include
${catkin_INCLUDE_DIRS}
)
②在指定位置添加下列代碼下面的代碼可以任意添加在build中,我為了美觀所以添加在相應位置的,只要在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系統;
$ roscore
(2) 打開一個新終端,運行發布節點;
$ cd ~/catkin_ws //進入工作控件目錄下
$ rosrun zmotion talker //運行發布節點程序
(3) 打開一個新終端,運行訂閱節點;
$ cd ~/catkin_ws
$ rosrun zmotion listener
(4)結果。
運行發布節點程序的結果:
[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
運行訂閱節點程序的結果:
[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
參考文獻:
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
本次,正運動技術的《運動控制卡應用開發教程之ROS(上)》就分享到這里,更多精彩內容請關注“ 正運動小助手 ”公眾號。
本文由 正運動技術 原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
標簽:
下一篇:巖板深加工,維宏水刀控制軟...
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-04-11
2025-04-08
2025-03-31
2025-03-26
2025-03-20
2025-03-13