一、什么是工作空间
在开发机器人过程中,将某个机器人的代码、参数、脚本等文件放在文件夹中管理,这个文件夹就是工作空间。
就像在vscode中创建了某个工程一样
二、ROS1和ROS2工作空间的区别
ROS1
曾经的ROS1使用Catkin编译系统,在经历catkin编译后会产生四个空间
src 代码空间:用于存储所有功能包的代码
build 编译空间:用于存储编译过程产生的缓存和中间文件
devel 开发空间:用于放置编译生成的可执行文件
install 安装空间:非必须的,可在工作目录下用catkin_make install生成,可以将可执行文件安装到此空间
ROS2
ROS2使用colcon编译,编译后产生的四个文件夹分别为
src 代码空间:用于存储所有功能包的代码、脚本等
build 编译空间:用于存储编译过程产生的缓存和中间文件
install 安装空间:用于放置编译生成的可执行文件和脚本
log 日志空间:用于保存编译和运行过程中警告、报错等日志的空间
三、创建工作空间
1.创建工作空间文件夹
mkdir -p ~/ROSLearningWorkspace/src
#mkdir -p中的 -p为-parent意思,如果该路径下有父目录不存在,则一并创建父目录
#“~”默认为系统根目录
cd ~/ROSLearningWorkspace/src
2.更新包依赖
将他人分享的功能包等放入工作空间时,这些功能包或多或少会有依赖的文件,此时需要更新一下这些功能包的依赖包
首次更新
首次更新时,需要
sudo apt install -y python3-pip
#安装pip3
sudo pip3 install rosdepc
#通过pip3安装rosdepc,rosdepc是中国区适配的rosdep
sudo rosdepc init
#rosdepc初始化
rosdepc update
#rosdepc更新
cd ~/ROSLearningWorkspace
#到工作空间目录下
rosdepc install -i --from-path src --rosdistro humble -y
#安装/更新依赖,此处版本为ROS2 Humble LTS
正常更新
之后更新时,只需要
sudo rosdepc init
#rosdepc初始化
rosdepc update
#rosdepc更新
cd ~/ROSLearningWorkspace
#到工作空间目录下
rosdepc install -i --from-path src --rosdistro humble -y
#安装/更新依赖,此处版本为ROS2 Humble LTS
当为工作空间下的包安装好对应的依赖时,将获得如下反馈
All required rosdeps installed successfully
3.编译工作空间
在完成对依赖的更新后,就可以编译工作空间了
安装编译工具colcon
当没有colcon时需要先获取colcon
sudo apt update
sudo apt upgrade
sudo apt install python3-colcon-ros
开始编译
cd ~/ROSLearningWorkspace
#到工作空间根目录下
colcon build
#colcon build 将编译文件夹下的所有源码并完成相应配置
进阶
1.需要单独编译某个包时,添加后缀–packages-select,可以节省时间
colcon build --packages-select package_name
2.若希望python脚本修改后,不再需要每次重新编译
警告:可能出现代码的不适配
colcon build --symlink-install
在colcon编译成功后,会在工作空间的install目录下生成对应的执行文件,因为python是解释性语言,因此会copy一份到install里面,ROS执行的是install里面的内容,如果不每次重新编译,ROS执行的在install里的copy版本不会更新
4.设置工作空间的环境变量
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录
执行setup.bash来设置工作空间的环境变量,便于调用新生成的文件
. install/setup.bash
# “.”为运行
与ros1区别
需要区别于ros1中的方式
这是在ros1中的方式,请不要使用:
source devel/setup.bash
自动设置环境变量
通过进一步设置可以使得该环境变量在每次打开终端时都自动生效
工作空间的目录可以用pwd命令来查看当前目录路径
此处WORKSPACE需要替换成需要设置的工作空间的目录
echo "source WORKSPACE/install/setup.bash" >> ~/.bashrc
例子:
echo "source /home/mtbotpc/ROSLearningWorkspace/install/setup.bash" >> ~/.bashrc