文章目录
一、工作空间(workspace)
1.概念
-
src:代码空间(source space)
放置功能包源码 -
build :编译空间(build space)
放置编译过程中产生的中间文件 -
devel:开发空间(development space)
编译完成后的可执行文件
环境变量配置的脚本 -
install:安装空间(install space)
和devel放置的东西差不多,在ros2中与devel合并
2.工作空间的覆盖
- 工作空间的路径依次在
ROS_PACKAGE_PACH
环境变量中记录,用echo $ROS_PACKAGE_PATH
查看。 - 新设置的路径在
ROS_PACKAGE_PACH
中会自动放置在最前端 - 运行时,ROS会优先查找最前端的工作空间是否存在指定的功能包
- 如果不存在,就顺序向后查找其他的工作空间
- 注意事项:注意其他的包是否依赖于被覆盖的包,因为依赖项会被从系统包改为我们的包。
二、创建工作空间的命令
1.初始化工作空间
在src代码空间下初始化工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
输入成功后会在src下看到一个CMakeLists.txt
文件,src下的CMakeLists.txt
文件用来告诉系统这是一个ros的工作空间。
2.编译工作空间
在根目录下make
cd ~/catkin_ws
catkin_make
会生成build编译空间和devel开发空间
3.设置环境变量
XXX功能包没有找到的问题就是因为没有配置好环境变量
只对当前终端生效,打开新的终端还要再设置一遍。
让环境变量生效
cd ~/catkin_ws
source devel/setup.bash
也可以直接配置
~/.bashrc
环境变量文件,对所有终端都生效
- 编辑
~/.bashrc
文件
sudo gedit ~/.bashrc
- 在最后一行添加
source ~/catkin_ws/devel/setup.bash
- 让
.bashrc
环境变量生效,这样之后打开新的就不用配置环境变量了。
source ~/.bashrc
4.检查环境变量
echo $ROS_PACKAGE_PATH
意思:
这条命令是查看ros工具包所在的路径,如果显示出来的路径中包含我们的项目的工作空间的路径,那就证明我们的项目的环境变量配置好了。
这里有两个路径
- 前者是当前工作空间下的路径,证明ok
- 后者是ros安装时工具包存储的路径
三、功能包
1.创建功能包
(1)创建
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
package_name
:功能包的名字。
一般习俗是小写字母开头,只包含小写字母、数字、下划线和破折号。
同一工作空间下不允许有同名的功能包,不同的工作空间可以。depend
:依赖。
如std_msgs
(ros定义好的标准数据结构),roscpp
(c++接口)rospy
(python接口),一般这三个都要有(哪怕不用python,但加上不容易出错?)。
例子:
功能包是添加到src代码空间的,
cd ~/catkin_ws/src
catkin_create_pkg my_package std_msgs roscpp rospy
然后我们就可以看见在src代码空间下多一个文件夹my_package
(2)进入功能包my_package
:
src
:具体功能包的代码include
:放置头文件CMakeLists.txt
:放置cmake如何编译这个功能包
【精简CMakeLists.txt】
# project name,package.xml中的包名name也得同步改
project(my_package)
# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")
# cmake version
cmake_minimum_required(VERSION 2.8.3)
# find catkin package需要的组件
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
# 添加exec执行的依赖
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs
)
# link headers
include_directories(
${catkin_INCLUDE_DIRS}
)
之后可以将可执行文件部分加到include_directories
后面。
# 生成可执行文件
add_executable(talker src/talker.cpp)
# after ADD_EXECUTABLE,为生成文件target添加库
target_link_libraries(talker ${catkin_LIBRARIES})
package.xml
:放置描述功能包的具体信息:名字(CMakeLists.txt中的包名project()
也得同步改)、版本、描述、依赖项
其中重要的是依赖项,如果后续想要添加依赖项,要在这里修改添加。
2.编译功能包:进入工作空间+设置环境变量+编译工作空间
启动roscore
roscore
编译
# 进入工作空间
cd ~/catkin_ws
# 设置环境变量
source devel/setup.bash
# 编译工作空间
catkin_make
可以看到找到我们的功能包my_package
,并且成功编译没有报错。
注意:一定要打source devel/setup.bash
或其他的设置环境变量方法,不然找不到功能包,rosrun
运行不了。
3.运行功能包
运行功能包my_package
中的某个可执行文件your_target_name
rosrun my_package your_target_name
比如:
运行功能包turtlesim
中的某个可执行文件turtle_teleop_key
rosrun turtlesim turtle_teleop_key