记录零基础ROS2学习和实践(一)(实物小车实现雷达建图和定点自动巡航)
安装ROS2
鱼香ros博主一键安装,在ubuntu上(我的是22.04版本)安装ROS2。
1 | wget http://fishros.com/install -O fishros && . fishros |
学习ROS的建议
我个人目前的实验场景是在实验室购买了一辆底盘小车和雷达,这个小车和雷达商家都会给出已经编写好的相关的ROS2的包,一开始学习怎么通过ROS平台控制小车和雷达做出相关功能,不需要太去钻入B站相关ROS2的教学中,了解一下各个基础的内容和结构就行,比如什么是工作空间、怎么创建工作空间,还有什么是功能包、节点、话题等。稍微了解一下他们之间的关系,一开始太深入不去实践反而不好。接下来的一些知识是我的一些理解。(如有理解错误,望改正)
ROS2的一些基础知识
工作空间(Workspace)
ros的工作空间顾名思义意思是你可以实现一个项目所有功能的一个空间,它是一个文件夹,一般可以命名为****_ws(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/1.png)
我这边建立的好几个工作空间,都是用来进行调试、测试里面功能包的代码的
工作空间如何建立
我这边新建了一个文件夹,命名为11_ws。(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/2.png)
再到11_ws中新建一个文件夹命名为src,而src文件夹在工作空间中是一定要有的,必不可少。(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/3.png)
在src文件夹下则是放着各种的功能包,比如购买的底盘小车和雷达的功能包,把你要调试的功能包放入src文件夹下。就比如我1_ws文件夹工作空间下的src中就有放入我所需要的功能包。(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/4.png)
放入你所需要的功能包之后,就要对你的工作空间进行编译,回到你的工作空间目录(这里是我的1_ws目录)下进行编译。
首先就是在当前工作空间目录下打开命令框输入colcon build(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/5.png)
如果编译错误,把错误信息报给AI自行解决。编译成功后,在工作空间目录会多几个文件夹build、install、log(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/6.png)
注意,如果在功能包中修改代码,或者做出其他改动的话,就要重新在工作空间进行colcon build,进行编译。
编译完成之后在进行功能包调用进行功能测试的时候,不能忘了进行工作空间的环境配置,意思是在这个工作空间进行工作了。就是在命令端输入代码,source一下在工作空间目录下install文件夹下的setup.sh或者是setup.bash都可以(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/7.png)
注意,每开一个命令端都需要进行工作空间的环境配置。如果不想这么麻烦,可以设置自动配置环境,可以输入以下命令一劳永逸(这里要根据你的ros版本以及工作空间名称修改):
1 | echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc && echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc && source ~/.bashrc |
功能包
功能包介绍
功能包,是要放到src文件夹下的。功能包是能实现一种、多种功能或者依赖的包,各个包可以互相调用来实现你想要的功能。如图下,depend包就是为其他提供依赖的包turn_on_dlrobot_robot包则是控制小车底盘的驱动包,其他包就是关于雷达驱动和建图导航的一些包。(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/8.png)
要实现如何进行雷达地图构建和小车的定点巡航就需要知道如何去调用这些包,也要去理解这些包里面的构造,这些细节后面或者下一章会讲到。
如何自己构建功能包
为什么自己构建功能包,一种 是大牛的话可以自己去编写几种功能的功能包,另一种是构建功能包,然后通过编写启动文件(launch文件)来启动和调用其他已经写好的功能包。(可能还有其他用途但我还不知道)
构建功能包:
要在src目录下打开命令终端,输入:
1 | $ ros2 pkg create --build-type ament_cmake learning_pkg_c # C++ |
上面一行创建是c++的功能包,下面一行是创建python的功能包,
其结构是这样,后面跟了两个参数,一个是build包的类型,另一个就是包名
1 | $ ros2 pkg create --build-type <build-type> <package_name> |
一般构建完新的功能包之后只有如下图勾画的4种文件(C++为例)
其他如像launch和scripts文件是要自己构建命名,在功能包中非常常见。(%E5%AE%9E%E7%89%A9%E5%B0%8F%E8%BD%A6%E5%AE%9E%E7%8E%B0%E9%9B%B7%E8%BE%BE%E5%BB%BA%E5%9B%BE%E5%92%8C%E5%AE%9A%E7%82%B9%E8%87%AA%E5%8A%A8%E5%B7%A1%E8%88%AA)/9.png)
关于功能包下各个文件的具体功能下一章再详细说明


