初窥机器人操作系统 ros2

初窥机器人操作系统 ros2

背景介绍

作为一个理工出生的人,从小就梦想自己能造机器人,能看到机器人与人共存的社会状态。但是技术壁垒是非常大的一个坎(加上自己也很懒,hhh)。

正不巧的是,在研究单片机去实现一些应用的时候,发现了机器人开发系统 ros,好家伙,这玩意儿可以用 python 作为开发语言,惊喜的是还有 JavaScript 的相关工具库。

我可来精神了

话不多说,就是干!

环境搭建

第一步就是搭建 ros机器人系统,我选择了更新一点的 ros2,它在原来的架构的基础上添加了更多的拓展性,并且性能上也比原来的ros1要好很多,毕竟底层架构都变了。另外也为了与时俱进,我可不想在学了一年之后又要开始学习2。索性一步到位选了 ros2。

ros1和ros2对比

开发板的话我手头正好还有一块 香橙派zero3 拿来用,看看能不能把它的最后一滴性能给榨干。之前的文章我介绍过这块板子,总体算的上是物美价廉。

方法一:脚本安装(推荐)

接下来开始搭建流程,目前国内的话有个叫 鱼香ros 的博主有一个一键搭建脚本很好用,直接运行脚本,并且按提示操作即可。脚本如下:

1
wget http://fishros.com/install -O fishros && . fishros

建议选择 humble 版本,从官方文档的介绍来说,humble 版本最稳定并且支持的时间最长,当然如果想要体验最新版的快乐也可以试试 iron 和 jazzy 版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Jazzy Jalisco:
发布日期:2024523日。
支持平台:Ubuntu 24.04 (Noble)、Windows 10 (Visual Studio 2019)、RHEL 9、macOS、Debian Bookworm。
生命周期:长期支持(LTS)版本,支持到20295月。
新特性:改进了与 Gazebo 的集成,新增了多个功能和改进,如 common_interfaces、image_transport、ros2cli、rosbag2 和 rviz2 的更新。

Iron Irwini:
发布日期:2023523日。
支持平台:Ubuntu 22.04 (Jammy)、Windows 10 (Visual Studio 2019)、RHEL 9
生命周期:短期支持,支持到202411月。

Humble Hawksbill:
发布日期:2022523日。
支持平台:Ubuntu 22.04 (Jammy)、Windows 10 (Visual Studio 2019)、RHEL 8
生命周期:长期支持(LTS)版本,支持到20275

Galactic Geochelone:
发布日期:2021523日。
支持平台:Ubuntu 20.04 (Focal)、Windows 10 (Visual Studio 2019)。
生命周期:短期支持,支持到202212

Foxy Fitzroy:
发布日期:202065日。
支持平台:Ubuntu 20.04 (Focal)、MacOS 10.14 (Mojave)、Windows 10 (Visual Studio 2019)。
生命周期:长期支持(LTS)版本,支持到20236

然后就是漫长的等待了,等待进度条结束即下载完成。

ros2下载中

2. 方法二:命令行安装

2.1. 设置编码

1
2
3
4
$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8

2.2. 修改源

这一步的作用主要是因为,Ubuntu 默认的镜像仓库源是国外,所以速度上会很慢,也有概率会连接不上。所以就需要修改它的源来提升速度。

1
2
3
$ sudo apt update && sudo apt install curl gnupg lsb-release 
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

2.3. 安装 ros2

1
2
3
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ros-humble-desktop

2.4. 修改环境变量

注意这里的 setup.bash 脚本是安装ros之后生成的,文件路引以ros的路径为主

1
2
$ source /opt/ros/humble/setup.bash
$ echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc

终端输入 ros2来测试是否安装成功:

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
2
# 乌龟会逆时针转动
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "theta: 3"

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
2
3
4
ros2 node list
# print
# /turtlesim
# ...

6. 查看系统某个节点详细信息

1
$ ros2 node info /turtlesim 

这个时候会打印出 /turtlesim 这个节点下的所有类型信息:

所有服务信息

7. 录制动作和重放

1
2
3
4
# 开始录制
ros2 bag record /turtle1/cmd_vel
# 重放动作
ros2 bag play rosbag2_2022_04_11-17_35_40/

执行上述命令来操作之前录制的动作回放。

创建工作空间

第一步:创建一个 workspace 目录

这个目录可以是自己经常使用的一个文件夹,在这个文件夹创建一个工作空间,名字可以自定义,我这里取名就叫 ros2-turturial。

第二步:安装 rosdepc

ros 库的一个安装工具,会自动识别当前目录下所有的依赖并且自动安装:

1
2
3
4
5
sudo pip3 install rosdepc
sudo rosdepc init
rosdepc update
# 以下这行代码在工作空间根目录执行
rosdepc install -i --from-path src --rosdistro humble -y

执行完以上的代码,如果最后提示:#All required rosdeps installed successfully,工作空间就算是安装完依赖了。

如果出现无法下载的情况,试试执行:sudo apt-get update

第三步:安装 colcon

colcon 是ros 的编译工具,执行以下代码来完成项目的编译:

1
2
sudo apt install python3-colcon-ros
colcon build

当终端提示: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 插件推荐

  1. ros:代码提示
  2. cmake:c++
  3. IntelliCode:代码自动补全
  4. Python:python代码提示
  5. URDF:机器人模型文件识别
  6. msg langurage support

参考

ros2

dev 的艺术空间

作者

dev

发布于

2024-12-07

更新于

2024-12-22

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×