概要:这篇主要介绍工作空间的创建
环境:ubuntu20.04,ros2-foxy,vscode
最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.
2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Workspace/Creating-A-Workspace.html
)
>>
教程>>
创建工作空间
你正阅读的是ros2
较老版本(Foxy
),但仍然支持的说明文档.想查看最新版本的信息,请看galactic
版本链接( https://docs.ros.org/en/galactic/Tutorials.html
)
创建工作空间
目标:创建一个工作空间,学习如何配置以方便开发和测试.
课程等级:初级
时长:20min
目录:
1.背景
2.预备知识
3.步骤
3.1Source一下ROS2环境
3.2创建一个新的目录
3.3拉取一个简单的仓库
3.4解决依赖问题
3.5使用colcon构建工作空间
3.6 Source一下上层(环境变量)
3.7 修改上层
4.总结
5.下一步
1.背景
工作空间是包含ros2
包的目录.在使用ros2
之前,你应该准备使用的终端,source
一下安装ros2
的工作空间(也就添加ros2
环境变量).这可以让你的终端找到ros2
提供的包.
你也可以source
一下上层,也就是第二个工作空间,你可以在上层添加一些新的包,但不干扰现有的你所拓展的ROS2
工作空间,(该空间)又称为底层.你的底层一定包含上层所有包的依赖.上层包会覆盖底层包.很有可能有好几个上下层,并且每一个连续上层会使用其对应的底层包.
2.预备知识
ros2
安装colcon
安装git
安装turtlesim
安装rosdep
安装
懂得基本的终端指令(linux常用指令指导http://www.ee.surrey.ac.uk/Teaching/Unix/
)
自己选择的文本编辑器
3.步骤
3.1Source一下ROS2环境
安装了ros2
是本课程的前提.记住底层不单单只有ros2
(还得有其他的).
记住,无论是通过发行版本还是源进行ros2安装,都得在你的平台source
一下ros2
环境变量,使用如下指令:
source /opt/ros/foxy/setup.bash
如果有些指令失灵了,可以查阅安装引导(https://docs.ros.org/en/foxy/Installation.html#installationguide
)
3.2创建一个新的目录
为了方便学习,每个工作空间都新建一个目录.命名不重要,但是最好说明这个工作空间的作用.这里选择一个dev_ws名字,表示开发型工作空间.
linux:
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
另一很好的练习就是拉取许多包到你工作空间的src
目录下.在dev_ws
下面创建src
目录,把上面代码放到里面,并可以找到它.
3.3拉取一个简单的仓库
拉取前,确定你是在dev_ws/src
目录.
(学习)初级开发教程之余,你将会创建自己的包,但现在你得练习使用现有的包构建一个工作空间.
现有的包,可以从ros_tutorials
仓库(repo
)来拿.如果你完成了"初级:命令行工具"教程,你会很熟悉turtlesim
,它也是这个仓库的一个包.
你可以从github(https://github.com/ros/ros_tutorials/
)查看这个包.
注意左边分支下拉列表上面的目录清单.当你拉取仓库时,增加-b参数使得拉取的分支对应你的ros2
版本.
例如,你用的是foxy
版本,在dev_ws/src
目录,运行下面指令获取你用的ros2
版本的包:
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
现在,ros_tutorials
包被拉到你的工作空间.如果你看看dev_ws/src
内容,你会发现新目录ros_tutorials
.
为了查看ros_tutorials
包内容,输入以下指令:
ls ros_tutorials
所罗列的是你刚刚拉取的仓库的内容,像这样子:
roscpp_tutorials rospy_tutorials ros_tutorials turtlesim
忽视前面三个包,turtlesim
包是仓库里唯一一个真实的ros2
包.
现在,你有一些简单包在工作空间里面,但是它还不是一个完整功能的工作空间.你需要解决依赖和重新编译这个工作空间.
3.4解决依赖问题
在编译工作空间前,你需要解决包的依赖问题.你或许已经有了这些依赖,但最好时刻检查一下你拉取的(内容)依赖.你总不会希望经过漫长的等待编译,结果因为缺少依赖导致失败.
在你工作空间的根目录(也就是dev_ws
目录),运行下面指令:
linux:
rosdep install -i --from-path src --rosdistro foxy -y
如果你是在linux
上从源或者"fat
"归档(版本)安装ros2
,你使用的rosdep
指令应该从它们安装教程来.这里有从源安装(https://docs.ros.org/en/foxy/Installation/Ubuntu-Development-Setup.html#linux-development-setup-install-dependencies-using-rosdep
)和从"fat
"版本(https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Binary.html#linux-install-binary-install-missing-dependencies
)的rosdep
.
如果你的依赖齐全,控制台会返回:
#All required rosdeps installed successfully
包会在它们的.xml
文件中声明依赖的(你会在下一节课学习包更多知识).这个指令会过一遍这些声明的依赖,并且会安装缺失的依赖.你会在另一个课程(快有了)了解更多rosdep.
3.5使用colcon构建工作空间
在工作空间的根目录(也就是dev_ws
下面),使用下面指令编译你的工作空间:
linux:
colcon build
控制台会返回一下信息:
Starting >>> turtlesim
Finished <<< turtlesim [5.49s]
Summary: 1 package finished [5.58s]
注意:
colcon build
其他一些有用的参数:
--packages-up-to
:编译你想要(指定)的包,加上该包的所有依赖,但并不是整个工作空间(节省时间)
--symlink-install
:省去每次微调python脚本都得重建(功夫)
--event-handlers console_direct+
:编译过程在控制台显示(否则只能在日志目录里面找来看了)
一旦编译结束,在工作空间根目录(~/dev_ws
)输入ls
,你可以看见colcon
已经创建一个一些新目录:
build install log src
这个install
目录放的是工作空间的设置文件setup
,也就是你用来source
上层的(就是给系统传送工作空间环境变量).
3.6 Source一下上层(环境变量)
在source
一下上层之前,你应该新开一个终端,与你编译工作空间的终端分开.在你已编译或者正在的终端source
一下上层的话,会导致一些麻烦事情发生.
在新终端,source
一下ros2
环境变量作为底层(ros2
环境变量写到启动脚本的话,这步跳过),然后你就可以在上面建个顶盖住它了.
linux:
source /opt/ros/foxy/setup.bash
返回工作空间根目录:
cd ~/dev_ws
在根目录,source
一下你的上层:
. install/local_setup.bash
注意:source
上层的local_setup
仅是在你环境中增加上层可用的包.setup
使你source
了上层和下层,可以让你使用两个工作空间.
所以,source
一下你的ros2
安装配置文件,和dev_ws
上层的local_setup
,正如你刚才做的那样,如同也source
了dev_ws
工作空间的配置,因为那波操作也包括了你创建的上层环境变量了.
现在,你可以在上层运行turtlesim
包:
ros2 run turtlesim turtlesim_node
但是,你要怎么告诉,这是上层的turtlesim
在运行,而不是主安装版本的呢?
让我们修改一下上层的turtlesim
,你会看见这样效果:
你可以修改,并且不依赖底层来重编译上层包.
上层会优先底层.
3.7 修改上层
你可以修改上层turtlesim
的仿真窗口的标题.为了完成这个,找到 ~/dev_ws/src/ros_tutorials/turtlesim/src
路径下的turtle_frame.cpp
文件.使用文本编辑器打开turtle_frame.cpp
.
52行,你会看见 setWindowTitle("TurtleSim");
函数,修改”TurtleSim”
参数成”MyTurtleSim”
,保存文件.
返回你之前运行colcon build
的终端,再运行一次(colcon build
).
返回第二个终端(你source
上层地方)然后再次运行turtlesim
:
ros2 run turtlesim turtlesim_node
你会看见turtlesim
窗口标题变成了MyTurtleSim
尽管ros2
环境变量之前在这个终端也source
了,但是上层dev_ws
优先级高于底层的内容.
为了确认底层的还是没有影响的,新开一个终端,只是source
一下底层的ros2
环境变量,再次启动turtlesim
:
ros2 run turtlesim turtlesim_node
你会发现上层的修改并没有给底层造成影响.
4.总结
在本课程,你source
一下安装的ros2版本作为底层,然后在一个新工作空间拉取和编译一些包作为上层.上层的路径具有(执行的)优先权,正如上面修改turtlesim
案例一样.
操作一些小包时,推荐使用上层,这样子,你就不用在同一个工作空间添加每一样东西,并且迭代更新不用再重编译一个巨大的工作空间.
5.下一步
现在,你认识了创建,编译工作空间,source
工作空间环境变量的细节内容,你可以学习如果创建自己的包了.
其他
个人认为重点:
工作空间的创建,编译;依赖检查;环境变量设置;上下层工作空间的优先级.
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈