目录
一. ROS 的使用
1. 创建ROS工作空间
# 创建源码文件夹:
mkdir -p ~/catkin_ws/src
# 进入 src 文件夹:
cd ~/catkin_ws/src
# 初始化文件夹:
catkin_init_workspace
2. 编译ROS工作空间
# 进入工作空间目录
cd ~/catkin_ws/
# 开始编译
catkin_make
3. 设置环境变量
# 设置环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
# 让终端生效
source ~/.bashrc
# 查看环境变量
echo $ROS_PACKAGE_PATH
4. 创建ROS功能包
# (A)进入ROS源代码目录
cd ~/catkin_ws/src/
#(B)创建功能包
# 功能包格式:catkin_create_pkg [功能包名称] [依赖功能包1] ... [依赖功能包n]
# 功能包例子:catkin_create_pkg ros_demo std_msgs roscpp rospy
# std_msgs:包含常见消息类型
# roscpp:使用C++实现ROS各种功能
# rospy:使用python实现ROS各种功能
#(C)编译功能包
# 会自动生成 CMakeList.txt 和 package.xml 文件
cd ~/catkin_ws
catkin_make
5. 操作ROS功能包
# 编译所有的功能包
catkin_make
# 编译指定的功能包
catkin_make --pkg your_package_name
# 安装指定的功能包
catkin_make --pkg your_package_name --install
# 清除安装的功能包
catkin_make --pkg your_package_name --clean
# 强制生成消息和服务(当消息类型msg和服务类型srv有改动时)
catkin_make --force-cmake
# 指定编译语言(C++/Python)
catkin_make --only-pkg-with-deps <你的功能包>
二. ROS 功能包
1. 目录结构
# package_dir:
CMakeLists.txt → 构建配置文件
package.xml → 功能包配置文件
include → include 目录
src → 源代码目录
2. 配置文件
# package.xml: 它包含功能包信息,包括功能包名称、作者、许可证和依赖功能包。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?xml version="1.0"?>
<package format="2">
<name></name>
<version>1.0</version>
<description></description>
<maintainer email="link@163.com">link</maintainer>
<license>TODO</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<export></export>
</package>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<package> 这个语句到</package>的部分是ROS功能包的配置部分。
<name> 功能包名称,默认为创建时的名称,可以随时更改。
<version> 功能包的版本可以自由指定。
<description> 功能包的简要说明。
<maintainer> 功能包维护者的姓名和电子邮建地址。
<license> 记录版权许可证。
<url> 记录描述功能包的说明,如网页、错误管理、存储库的地址等。
<author> 记录参与功能包开发的开发人员的姓名和电子邮件地址。
<build_depend> 构建依赖关系,使用某种特定的依赖关系来构建包。
<build_export_depend> 导出头文件,当其他包需要依赖这个包,使用这个标签用来传递声明。
<exec_depend> 程序包运行中所需的依赖,如:动态库、可执行文件、Python模块、脚本等。
<depend> 以上三种depend的合集,通常使用它添加ROS功能包,是常用而简便的方法。
<buildtool_depend> 构建工具依赖的软件包。通常唯一的构建工具是catkin。
<test_depend> 测试依赖关系仅指定单元测试的附加依赖项
<doc_depend> 文档工具依赖关系指定此软件包需要生成文档的文档工具。
3. 构建配置文件
# ROS 在 CMakeList.txt 文件中描述环境构建,
# 它以设置可执行文件的创建、依赖包优先构建、连接器的创建等等。
#(A)添加要使用的对应的目录下的文件的选项:
# 其中 XXXX 可以是 message、service、actions,xxx 对应 msg、srv、action。
add_XXXX_files (
FILES
XXXX1.xxx
XXXX1.xxx
)
#(B)设置依赖的消息的选项:
generate_messages(
DEPENDENCIES
std_msgs
}
#(C)动态参数配置:
generate_dynamic_reconfigure_options(
cfg/DynReconf1.cfg
cfg/DynReconf2.cfg
}
#(D)指定包含目录的选项:
include_directories(${catkin_INCLUDE_DIRS})
#(E)指定要创建的库文件:
add_library(${PROJECT_NAME} src/${PROJECT_NAME}/demo_ros_pkg.cpp)
#(F)提前生成依赖
# add_dependencies 是在代码生成库之前,提前生成一些依赖,比如:消息生成或者动态的参数。
add_dependencies(
${PROJECT_NAME}
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
#(G)构建可执行文件
add_executable(${PROJECT_NAME}_node src/demo_ros_pkg_node.cpp)
#(H)生成的可执行文件重命名
# 生成的可执行文件重命名,简化操作,
# 比如使用 rosrun demo_pkg node 代替 rosrun demo_pkg demo_pkg_node
set_target_properties(
${PROJECT_NAME}_node
PROPERTIES OUTPUT_NAME node PREFIX "")
#(I)添加可执行文件的依赖项:
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)