初窥机器人操作系统 ros2
背景介绍
作为一个理工出生的人,从小就梦想自己能造机器人,能看到机器人与人共存的社会状态。但是技术壁垒是非常大的一个坎(加上自己也很懒,hhh)。
正不巧的是,在研究单片机去实现一些应用的时候,发现了机器人开发系统 ros,好家伙,这玩意儿可以用 python 作为开发语言,惊喜的是还有 JavaScript 的相关工具库。
话不多说,就是干!
环境搭建
第一步就是搭建 ros机器人系统,我选择了更新一点的 ros2,它在原来的架构的基础上添加了更多的拓展性,并且性能上也比原来的ros1要好很多,毕竟底层架构都变了。另外也为了与时俱进,我可不想在学了一年之后又要开始学习2。索性一步到位选了 ros2。
开发板的话我手头正好还有一块 香橙派zero3 拿来用,看看能不能把它的最后一滴性能给榨干。之前的文章我介绍过这块板子,总体算的上是物美价廉。
方法一:脚本安装(推荐)
接下来开始搭建流程,目前国内的话有个叫 鱼香ros 的博主有一个一键搭建脚本很好用,直接运行脚本,并且按提示操作即可。脚本如下:
1 | wget http://fishros.com/install -O fishros && . fishros |
建议选择 humble 版本,从官方文档的介绍来说,humble 版本最稳定并且支持的时间最长,当然如果想要体验最新版的快乐也可以试试 iron 和 jazzy 版本:
1 | Jazzy Jalisco: |
然后就是漫长的等待了,等待进度条结束即下载完成。
2. 方法二:命令行安装
2.1. 设置编码
1 | $ sudo apt update && sudo apt install locales |
2.2. 修改源
这一步的作用主要是因为,Ubuntu 默认的镜像仓库源是国外,所以速度上会很慢,也有概率会连接不上。所以就需要修改它的源来提升速度。
1 | $ sudo apt update && sudo apt install curl gnupg lsb-release |
2.3. 安装 ros2
1 | $ sudo apt update |
2.4. 修改环境变量
注意这里的 setup.bash 脚本是安装ros之后生成的,文件路引以ros的路径为主
1 | $ source /opt/ros/humble/setup.bash |
终端输入 ros2来测试是否安装成功:
案例1:hello world
这一步用来测试底层通信是否正常。首先创建一个发布者:
1 | ros2 run demo_nodes_cpp talker |
然后创建另外一个终端,创建一个订阅者
1 | ros2 run demo_nodes_py listener |
如果终端发布和订阅的信息正常打印说明通信没问题,以上就是设计模式里最基本的发布订阅模式。
案例2:会动的乌龟
这个是 ros 最经典的测试功能的项目。
1. 召唤乌龟
通过以下命令召唤出一只乌龟
1 | ros2 run turtlesim turtlesim_node |
它大概会是这个样子:
2. 添加摇杆
接下来就是让它动起来,另外开一个终端,执行以下命令,这句命令可以让你在键盘上通过方向键操作乌龟的行进方向:
1 | ros2 run turtlesim turtle_teleop_key |
3. 命令行控制乌龟
以下的代码是给乌龟(turtle1)发布一个命令,数据结构为geometry_msgs/msg/Twist,json 内容为具体传递的数据变量来控制乌龟的行动。
1 | $ ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" |
不出意外这个乌龟会开始做圆周运动,如下所示。
如果是想立刻控制乌龟执行某个指令,则可以使用:
1 | # 乌龟会逆时针转动 |
4. 新增一个乌龟
以下代码的意思是创建一个 坐标为 x:2,y:2,z: 0.2,名字叫 Raphael 的乌龟。
1 | ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'raphael'}" |
5. 查看系统当前运行中节点
1 | ros2 node list |
6. 查看系统某个节点详细信息
1 | $ ros2 node info /turtlesim |
这个时候会打印出 /turtlesim 这个节点下的所有类型信息:
7. 录制动作和重放
1 | # 开始录制 |
执行上述命令来操作之前录制的动作回放。
创建工作空间
第一步:创建一个 workspace 目录
这个目录可以是自己经常使用的一个文件夹,在这个文件夹创建一个工作空间,名字可以自定义,我这里取名就叫 ros2-turturial。
第二步:安装 rosdepc
ros 库的一个安装工具,会自动识别当前目录下所有的依赖并且自动安装:
1 | sudo pip3 install rosdepc |
执行完以上的代码,如果最后提示:#All required rosdeps installed successfully,工作空间就算是安装完依赖了。
如果出现无法下载的情况,试试执行:sudo apt-get update
第三步:安装 colcon
colcon 是ros 的编译工具,执行以下代码来完成项目的编译:
1 | sudo apt install python3-colcon-ros |
当终端提示:Summary: 21 packages finished [4min 26s],即为安装完成。
第四步:设置环境变量
这一步主要是为了能在每次进入终端的时候,让全局能够访问到我们的功能位置
1 | echo " source ~/${你的工作空间路径}/install/local_setup.sh" >> ~/.bashrc |
创建一个功能包
这个功能主要是当我们想要复用一个能力,或者是想把我们自己封装的一个能力分享给别人使用的时候。
就可以通过 build 一个功能包的方式去将它封装起来。在src目录下执行以下代码:
1 | ros2 pkg create --build-type <build-type> <package_name> |
- build-type: 如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python;
- package_name:包名称
用这个语句创建的功能包,一般从文件结构就可以分辨出来是用的 c 还是 python,从便利性上来说的话,c 需要二次编译,而 python 可以直接使用。但是性能上 python 肯定是不如 c 的。所以看情况取舍吧。
vscode 插件推荐
- ros:代码提示
- cmake:c++
- IntelliCode:代码自动补全
- Python:python代码提示
- URDF:机器人模型文件识别
- msg langurage support
参考
初窥机器人操作系统 ros2