《运动控制卡应用开发教程之ROS(上).docx》由会员分享,可在线阅读,更多相关《运动控制卡应用开发教程之ROS(上).docx(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、运动控制卡应用开发教程之ROS(上)以下是ROS应用开发教程(上) 一 ROS应用背景 ROS(robot operating system)是用于机器人的一种开源后操作系统(次级操作系统)。首要设计目的是在机器人研发领域进步代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些经过可以封装到数据包(Packages)和堆栈(Stacks)中,以便于分享和分发。ROS还支持代码库的结合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定开展和施行工作成为可能。上述所有功能都能由ROS的根底工具实现。 简单来讲,ROS
2、作为一个灵敏的操作系统,系统上的节点具有很大的随意性,它们可以位于不同的计算机上,甚至可以位于不同的网络上。我们可以使用一个Arduino作为一个节点发布信息,使用一台笔记本电脑作为一个节点订阅上述信息和使用一台手机作为一个节点驱动电机等。上述灵敏性使得ROS可以适应很多不同场合的应用。 1.ROS的主要特点可以归纳为以下几条 (1)分布式点对点设计 ROS的点对点设计和效劳和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,可以适应多机器人遇到的挑战。 (2)多语言支持 ROS支持许多种不同的语言,例如C+、Python、Octave和LISP,也包含其他语言的多种接口
3、实现。 (3)精简与集成 ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS根本将复杂的代码封装在库里,只是创立了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进展移植和重新使用。 (4)工具包丰富 为了管理复杂的ROS软件框架,我们利用了大量的小工具去编译和运行多种多样的ROS组建,进而设计成了内核,而不是构建一个庞大的开发和运行环境。 (5)免费并且开源 ROS所有的源代码都是公开发布的。 2.ROS在行业中的一些应用 近年度来,国内外机器人企业、无人驾驶企业,无人机企业(大疆无人机)都纷纷参加
4、ROS阵营。且在各大招聘中,不管是腾讯、小马智行、阿里巴巴的菜鸟网络、百度Apollo等,招聘无人驾驶规划算法工程师、自主导航工程师、机器人感悟算法工程师、系统平台研发架构师等岗位时,均要求“熟悉ROS或“具备ROS开发经历者优先。从这些我们可以看出来ROS系统的开展趋势,正在机器人行业一步一步的主导中国市场。以下是一些ROS典型应用场景: (1)机器人控制器中的大佬人物KEBA,他们的控制器已经支持ROS: (2)美国NASA基于ROS开发的Robonaut 2已经在国际空间站里干活了: (3)百度apollo无人车的底层是基于ROS开发的,差点改成了ROS 2,可以在github上找到(a
5、pollo-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 $ sud
6、o sh -c . /etc/lsb-release echo deb :/ $DISTRIB_CODENAME main /etc/apt/sources.list.d/ros-latest.list 2.设置key(公钥已更新) $ sudo apt-key adv -keyserver hkp:/keyserver.ubuntu :80 -recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 3.更新package(时间有点长,耐心等待) $ sudo apt-get update 此时可能会遇到以下问题: 解决方法如下,在终端输入: $ s
7、udo apt-key adv -keyserver keyserver.ubuntu -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 $ sou
8、rce /.bashrc 效果示意图: 输入指令sudo rosdep init假设遇到以下问题: (1)sudo: rosdep: command not found问题 在终端输入:sudo apt install rospack-tools (2)ERROR:cannot download default sources list from: s:/raw.githubusercontent /ros/rosdistro/master/rosdep/sources.list.d/20-default.list Website may be down. 在终端输入:sudo gedit /
9、etc/hosts,翻开hosts文件,内容如下: 将:199.232.28.133 raw.githubusercontent 添加在文件中,添加后的文件如下: 然后保存文件后退出; 在终端执行:sudo rosdep init,问题解决。 6.测试ROS是否安装成功 $ roscore 成功翻开如下列图所示: 三 ROS编程案例 这局部主要讲“消息发布和“订阅两个ROS编程案例。 1.创立一个ROS工作空间 $ mkdir -p /catkin_ws/src $ cd /catkin_ws/ $ catkin_make 2.创立ROS程序包(zmotion为程序包名,可以以定义为其他) $
10、 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/zmo
11、tion /进入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 #includ
12、e 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_
13、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 to
14、pic消息; (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需要订阅chatte
15、r 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(catk
16、in 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 messag
17、e_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_mes
18、sages_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
19、 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 # # #
20、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 ta
21、rget names across packages dont 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_librari
22、es(talker $catkin_LIBRARIES ) target_link_libraries(listener $catkin_LIBRARIES ) 8.修改package.xml文件 build_dependmessage_generationbuild_dependbuild_export_dependmessage_generationbuild_export_dependexec_dependmessage_runtimeexec_depend 9.编译 $ cd /catkin_ws $ catkin_make 10.运行程序 (1) 翻开一个新终端,启动ROS系统; $
23、 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: 131
24、4931833.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 hea
25、rd: 3.000000 INFO WallTime: 1314931973.274382 I heard: 4.000000 INFO WallTime: 1314931974.277694 I heard: 5.000000 参考文献: 1.ROS Wiki: :/wiki.ros.org/ 2. s:/ ncnynl /archives/201609/838.html 3. s:/ depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 4. s:/ zhihu /question/29025926?sort=created 本次,正运动技术的()运动控制卡应用开发教程之ROS(上))就共享到这里,更多精彩内容请关注“ 正运动小助手公众号。 本文由 正运动技术原创,欢送大众转载,共同学习,一起进步中国智能制造程度。文章版权归正运动技术所有,如有转载请注明文章来源。 0
限制150内