工作空间(workspace):存放项目开发相关文件的文件夹,项目的根目录。
工作空间结构如下:
- src:代码空间(Source Space),源码所在地
- install:安装空间(Install Space),代码的编译结果,可执行程序
- build:编译空间(Build Space),编译过程产生的中间文件,一般不可读
- log:日志空间(Log Space)
创建工作空间:
mkdir -p ./test_ws/src
在当前目录下创建工作空间test_ws及其代码空间,-p指定自动创建目标路径中所有不存在的父目录,且如果目标目录已存在也不会报错。
常规python环境配置:
sudo apt install -y python3-pip
为了便于ros2环境管理,还需安装python的rosdep库:
sudo pip3 install rosdepc
sudo rosdepc init
rosdepc update
在实际操作情况下,执行第三条语句时出现了如下问题:
ERROR: unable to process source [file:///usr/share/python3-rosdep2/debian.yaml]:
<urlopen error [Errno 2] No such file or directory: '/usr/share/python3-rosdep2/debian.yaml'> (file:///usr/share/python3-rosdep2/debian.yaml)
询问deepseek老师得知,需要用apt方式安装rosdepc才会出现那个文件,避免报错。
执行:
sudo apt update
sudo apt install python3-rosdep2
rosdepc update
此外,还需要配置另一个工作空间搭建工具,执行:
sudo apt install python3-colcon-ros
到此,环境已正常配置。
创建工作空间后,可以使用rosdep便捷地引入所需依赖,在工作空间目录下执行:
rosdepc install -i --from-path src --rosdistro humble -y
然后准备正式启动项目,来到工作空间目录下,执行:
colcon build
自动对工作空间进行编译。在项目写完后(即src内的源码写完)执行该语句,会在install内构建对应的可执行程序。
此时还应将依赖等环境引入环境变量:
source install/local_setup.sh
须知,该命令仅对当前命令行窗口有效。想要避免每个窗口多次设置,可以去home文件夹内,找到.bashrc文件(本身是隐藏文件),在文末加入相关语句。
功能包
降低不同功能间的耦合度,增加程序可复用性。
在工作空间的src目录下创建功能包代码形式如下:
ros2 pkg create --build-type <build-type> <package_name>
创建c++功能包时,build-type参数类型为ament_cmake;创建python功能包时,build-type参数类型为ament_python。
在功能包内编写源码后,需要编译(即colcon build语句)后才能加入到install形成可执行文件,并再次执行source代码更新环境变量才可被执行。
c++文件功能包必然存在两个文件:package.xml和CMakerLists.txt。
package.xml文件的主要内容如下,包含功能包的版权描述,和各种依赖的声明。
CMakeLists.txt文件是编译规则,C++代码需要编译才能运行,所以必须要在该文件中设置如何编译,使用CMake语法。
python功能包会有这两个文件:package.xml和setup.py。
package.xml文件的主要内容和C++版本功能包一样,包含功能包的版权描述,和各种依赖的声明。
setup.py文件里边也包含一些版权信息,除此之外,还有“entry_points”配置的程序入口。