参考链接: Industrial/Tutorials - ROS Wiki
该部分wiki教程主要分两大块,一部分是讲通用部分,另一部分是针对例如ABB、发那科等机械臂进行的针对性应用;
我就先学general的部分了:
基础开发人员教程:
1.前提条件
C++基础:
(1)MIT to C++
Linux基础:
ROS Industrial (Melodic) Training Exercises — Industrial Training documentation
ROS基础:
ROS Industrial (Melodic) Training Exercises — Industrial Training documentation
2.教程内容简单提要:
1.创建功能包和节点:
功能包:
1)cd ~/catkin_ws/src
2)catkin create pkg myworkcell_core --catkin-deps roscpp 创建功能包并给出依赖
节点:
1)创建cpp文件;
2)#include
3)添加main函数
4)初始化节点ros::init(argc, argv, "vision_node");(注意,此时只是声明了一个节点,但不能操作它。)
5)创建句柄,名字叫nh(随便改),ros::NodeHandle nh;
6)用句柄可以操作节点做事情;
7)让节点占用线程,不自动退出,ros::spin();
8)修改功能包里面的CMakeList,带“+”号的是需要添加的,第一个是表示,添加的文件使用C++语言,第二个是要添加节点,之后为了转化为可执行文件,python就不用(因为python本身就是可执行文件),第三个要加是为了链接库。
project(myworkcell_core)
+ add_compile_options(-std=c++11)
...
###########
## BUILD ##
###########
include_directories(
${catkin_INCLUDE_DIRS}
)
+ add_executable(vision_node src/vision_node.cpp)
+ target_link_libraries(vision_node ${catkin_LIBRARIES})
2.订阅/发布模型(话题与消息)
1)怎么创建发布者/订阅者:ROS/Tutorials/WritingPublisherSubscriber(c++) - ROS Wiki
2)创建.msg文件或者.srv文件,
三种消息类型,Header是一种特殊类型,内包含信息啥的。
Header header string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/TwistWithCovariance twist
srv文件:
int64 A int64 B //这里AB是请求 --- int64 Sum //Sum是回应
创建一个.Msg文件,里面直接编写:
string first_name string last_name uint8 age uint32 score
另外需要打开:package.xml文件确保下列两行在里面,目的为了将msg文件转换成C或者Python可识别:
message_generation message_runtime
注意,在构建时,我们需要“message_generation”,而在运行时,我们只需“message_runtime”。
打开CMakeList,改动四个地方:
①确保message_generation依赖被添加:
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis find_package(catkin REQUIRED COMPonENTS roscpp rospy std_msgs message_generation )
②确保运行消息依赖:
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
③添加自己编辑的消息变量:
# add_message_files( # FILES # Message1.msg # Message2.msg # ) 找到这一部分代码,把#删除,并换成自己的msg文件名!
④确保generate_messages()函数被调用:
# generate_messages( # DEPENDENCIES # std_msgs # ) 去掉#号
注:消息类型包含两部分:package/名字,例:beginner_tutorials/Num
※srv的创建与msg创建方法类似,修改也是改CMakeList的四个地方,具体方式:ROS/Tutorials/CreatingMsgAndSrv - ROS Wiki
3.应用:创建一个用于接受激光扫描的节点。
问题描述:我们现在有一个基本ROS节点,我们希望在此节点上构建。现在我们想在我们的节点中创建一个订阅者。
目标:
1.消息结构;2.话题名字;3.订阅者服务器(C++)
步骤:
1.创建一个功能包fake_ar_publisher;
2.修改总的CMakeList:
1) find the fake_ar_publisher package.
## Find catkin macros and libraries ## if COMPonENTS list like find_package(catkin REQUIRED COMPonENTS xyz) ## is used, also find other catkin packages find_package(catkin REQUIRED COMPonENTS roscpp fake_ar_publisher )
2)Add The catkin runtime dependency for publisher.
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES myworkcell_core
CATKIN_DEPENDS
roscpp
fake_ar_publisher
# DEPENDS system_lib
)
3)在add_executable 规则下编写或uncomment(取消注释):
add_dependencies(vision_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
2.修改package.xml文件,添加依赖:
fake_ar_publisher
3.catkin_make与source编译.
创建发布者功能包完成,你可以通过rosmsg命令来查看该功能包内编写的message(按自己的需要添加),添加发布者节点教程见上面。
注意用到的一些命令:
rosmsg list //查看所有编译的消息类型 rosmsg package//查看某个功能包里面的消息 rostopic echo <消息名> //查看该消息的所有信息 Ctrl+C 退出



