文章目录
1. CMakeLists.txt相关问题
1.1 CMakeLists.txt的作用
CMakeLists.txt文件规定了编译的时候的规则
1.2 哪里有CMakeLists.txt文件
通常,在工作空间下的src文件(mkdir -p ws/src)目录下有一个CMakeLists.txt文件,该文件一般不需要进行修改。此外,在每一个功能包下也有一个CMakeLists.txt文件以及一个package.xml文件,该文件规定了该功能包的一些编译运行规则,需要进行修改,重点了解。
1.3 CMakeLists.txt中的一些命令解释
# 规定cmake的最小版本
cmake_minimum_required(VERSION 3.0.2)
# 该项目的名称,即功能包的名称
project(topic)
#添加功能包依赖,使用catkin_creat_pkg topic rospy roscpp std_msgs时会自动添加
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
# 生成可执行文件,rosrun topic pub中的pub就是在此刻生成的
# 生成的可执行文件被保存在devel对应的功能包下面,可以直接运行
add_executable(pub src/topic_pub.cpp)
add_executable(sub src/topic_sub.cpp)
# 为可执行文件链接依赖包
target_link_libraries(pub
${catkin_LIBRARIES}
)
target_link_libraries(sub
${catkin_LIBRARIES}
)
2. rosrun 包名 可执行文件名
此处的节点名,实在CMakeLists.txt中通过add_executable(pub src/topic_pub.cpp)
进行生成的可执行文件,所以rosrun本质上执行的是一个可执行文件,这和通过ros::init(argc, argv, "talker")
进行明明的节点名是不同的。前者是一个可执行文件的名称,后者是一个在rosmaster中的名称,二者具有一一对应关系,名称可以相同,也可以不同。
rqt_graph
:
3. 节点名,话题名,可执行文件名之间的关系
节点名指的是在rosmaster中的节点名称(在ros::init()中初始化),可执行文件名(在CMakeLists.txt中初始化)与之对应。话题名在创建发布对象的时候进行初始化ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);