ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发

简介: 本文是 ROS2 入门的第一课,简单介绍了 ROS 系统,并演示了 ROS2 系统在 Ubuntu 22.04 中的安装(使用 gitee 和清华源)以及其中错误的解决。最后对其优势进行总结,为什么选择 ROS。最后介绍简单 Demo 和如何使用 .NET 接入的其中一种方式。

什么是 ROS

ROS(Robot Operating System,机器人操作系统,下文简称“ROS”)是一组软件库和工具的组合,可以帮助构建机器人应用程序。从驱动程序到最先进的算法,以及强大的开发工具,ROS 满足设计一个机器人项目所需要的一切东西,并且这些都是开源的。

版本

ROS 有两个版本 ROS1 和 ROS2:

  • ROS Noetic Ninjemys 是针对 Ubuntu 20.04 (Focal) 版本的最新 ROS 1 LTS 版本,将支持到 2025 年 5 月
  • Humble Hawksbill 是最新的长期支持 ROS 2 版本。支持 Ubuntu 22.04 和 Windows 10,支持日期 2022 年 5 月 - 2027 年 5 月

相关介绍

为什么说建造一个机器人非常困难,因为你需要考虑的东西非常多。电机、传感器、软件和电池,等等,各种软硬件之间需要无缝的协同配合才能完成你的指令任务。

组件

ROS 是一个从研究到原型设计,一直到部署和生产你都可以使用的开发工具包,它定义了用于构建机器人的组件、接口和工具,帮你简化了整个机器人开发项目的过程。

大多数的机器人运动控制系统都是由驱动器、传感器、控制器或机器人的大脑三部分组成。ROS 帮助开发人员快速构建这些组件,然后使用其话题消息通讯让 ROS 工具轻松的连接它们。在测试,教学和质量保证场景下,可以使用 ROS 的 Bag 文件或日志记录来记录这些通讯消息。

Bag

同时,这些消息可以发送到各种可视化和远程操作工具平台中,实现“数字孪生”,也就是说我们也可以通过仿真的方式,轻松的应对测试和教学场景下的使用。

数字孪生

在外围硬件的支持上,ROS 几乎可以和任何组件一起协同工作,只要有提供接口都可以接入进来。它也提供了许多常见的硬件接入,比如相机、激光雷达和电机控制器等,ROS 的模块化架构允许开发人员自行构建,而无需担心外围的硬件的提供商单一或是需要许可费的问题。

接入

使用 ROS 这个通用的开发架构工具,可以让我们更专注于解决实际的业务问题,而不是去重复的创造新的轮子。

ROS 社区也非常庞大,有很多成熟的解决方案。也在不断攻克更多的机器人市场,包括农业、工厂物流、自动驾驶、服务型机器人、餐饮机器人、重工业、无人机、行星探索等等。

行业

在 Ubuntu 22.04 中安装 ROS2

ROS是一个复杂的软件,需要与操作系统库密切的配合,因此建议使用官方推荐的操作系统进行安装使用,否则你可能需要其他非常多的额外的操作才能正常安装使用。这里介绍当前最新的 ROS2 版本 Humble Hawksbill 的安装:

1. 确认字符集

确保默认字符集为 UTF-8 ,可以使用 locale 后检查输出是否含有 UTF-8,中英皆可。

UTF-8

若未含有 UTF-8 则可进行如下操作:

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. 添加国内源

添加 ROS 2 GPG(已使用 gitee 上放置的 key ):

sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://gitee.com/sang93/ros_learn/raw/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

添加清华镜像的 ROS2 软件仓库,并更新索引:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

sudo apt update

3. 安装 ROS2 包

初学可以使用 Desktop 版 ros-humble-desktop 包含:ROS, RViz, demo 样例 和 教程。

sudo apt install ros-humble-desktop

Desktop 版的东西还挺多,大概需要 2.5G 空间,这个安装过程需要一段时间,做些其他事情安心等待。

安装

在正式部署使用时可以使用基础核心版本

sudo apt install ros-humble-ros-base

另有开发工具可以安装:用于构建 ROS 包的编译器和其他工具

sudo apt install ros-dev-tools
若安装出现错误:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。该问题大概率是系统有更新没有处理,先将系统升级完成后再次尝试安装。升级介绍可查看此篇文章: 《Ubuntu 桌面系统升级》

依赖错误

4. 环境测试

安装完成后,我们就可以尝试简单的测试示例了。刚刚安装的 ros-humble-desktop 中含有测试的示例,我们直接运行即可。

在终端中运行 c++ 的 talker

source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker

然后新开一个终端执行 Python 的 listener

source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener

以下就是运行截图,你可以看到发送和接收的消息日志,也可以尝试 Ctrl + C 关闭任意一个终端查看会发生结果。

运行demo

如果觉得执行配置环境的脚本,比较麻烦,可以直接加入 ~/.bashrc

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

这样就可不必每次执行环境配置了。

5. 经典小乌龟

讲了 ROS 安装的话,不讲经典的小乌龟控制,就总感觉少了些什么,接下来看如何使用 Turtlesim,其是一个用于学习 ROS 2 的轻量级模拟器,使用下面的命令可以启动它:

ros2 run turtlesim turtlesim_node

启动之后你就可以看到一个小乌龟啦,接着在一个新的终端中输入下面的命令就可以启动一个小乌龟的控制节点:

ros2 run turtlesim turtle_teleop_key

然后记得将鼠标放在这个控制台上保持这个命令行窗体激活,就可以通过方向键控制小乌龟移动了。

小乌龟控制

注意:前面需要安装桌面版,若未安装桌面版,可单独安装使用命令安装 Turtlesim: sudo apt install ros-humble-turtlesim

如何使用 .NET 开发

ROS 的开发主要使用的是 C++ 和 Python,在 ROS 的问答社区,对于 C# 支持的呼声可以追溯到十几年前,当然也会有其他的解决方案,毕竟 C++ 还可以包装。

Rosbridge 安装和服务启动

不过官方有一个 Rosbridge 包提供了更多的包容性,为非官方支持的语言提供了 JSON API 到 ROS 功能的桥梁。

首先需要安装 Rosbridge,因为其不是默认安装的组件包:

sudo apt-get install ros-humble-rosbridge-suite

安装 Rosbridge

然后启动服务:

ros2 launch rosbridge_server rosbridge_websocket_launch.xml

启动 Rosbridge

启动 Rosbridge Server 会看到有一个 Websocket 服务监听本机的 9090 端口。

.NET 调用

在 GitHub 已经存在多个相关的包装好的 .NET 库,这里推荐 ros-sharp 项目中的 RosSharpRosBridgeClient 包。但是这个库是给 Unity 项目用的,使用的 .NET Framework,整个开源项目都是面对 Unity 工程的。

这里就不用这个包了,既然 Websocket 服务已经启动了,直接用 .NET 7 的 System.Net.WebSockets 写个简单 Demo 演示一下。

前面我们在安装测试时介绍了消息发布者和接收者的 Demo,现在我们只启动消息发送者,然后使用 .NET 来接收发布的消息。

  1. 首先启动 talker
ros2 run demo_nodes_cpp talker
  1. 启动后可以使用下面的命令查看 talker 节点发布的主题:
ros2 topic list

记住这个主题后面要用,当然针对 talker 这个 Demo 都是一样的,都是发布的 /chatter 话题。

查看 topic

可以在 talker 启动前后执行这个命令就会看到 /chatter 话题是启动后增加的新的。
  1. 创建 .NET 控制台项目:
dotnet new console -o RosDotNet
  1. 修改 Program.cs
using System.Net.WebSockets;
using System.Text;
using System.Text.Json;

class Program
{
    static async Task Main(string[] args)
    {

        Uri webSocketUri = new("ws://localhost:9090");
        using SocketsHttpHandler handler = new();
        using ClientWebSocket ws = new();
        // 连接
        await ws.ConnectAsync(webSocketUri, default);
        // 构造发送的 Json 内容 订阅主题
        var replyMess = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(new{
            op= "subscribe",
            topic = "/chatter",
            type = "std_msgs/String"
        }));
        // 发送
        await ws.SendAsync(new ArraySegment<byte>(replyMess), WebSocketMessageType.Text, true, default);
        // 接收一次消息
        var bytes = new byte[1024];
        var result = await ws.ReceiveAsync(bytes, default);
        string res = Encoding.UTF8.GetString(bytes, 0, result.Count);
        Console.WriteLine(res);
        // 关闭退出
        await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Client closed", default);
    }
}

这里说明一下,因为我是在 WSL 环境下安装的 ROS2 ,所以在 Windows 电脑是可以使用 localhost 访问,实际操作修改为 ROS 的 IP 即可。

发送的 Json 内容是订阅 /chatter 主题:

{ "op": "subscribe",
  (optional) "id": <string>,
  "topic": <string>,
  (optional) "type": <string>,
  (optional) "throttle_rate": <int>,
  (optional) "queue_length": <int>,
  (optional) "fragment_size": <int>,
  (optional) "compression": <string>
}

格式是根据 ROS 协议文档编写的,查阅 Rosbridge Suite 的文档可前往:https://github.com/RobotWebTools/rosbridge_suite/blob/ros2/ROSBRIDGE_PROTOCOL.md

注意:必须指定消息的 type 否则服务端会报错无法成功订阅: subscribe: Cannot infer topic type for topic /talker as it is not yet advertised.

Demo 地址:https://github.com/sangyuxiaowu/RosDotNetWsDemo

  1. 运行:

执行程序我们可以看到在控制台接收到了 talker 发布的消息。

查看 topic

ROS 有什么优势

最后,经过这几天的了解,我将其总结如下:

  1. 简化各个系统间的协同控制,不用重复造轮子
  2. 完善的工具链支持:组件 ,接口,工具一应俱全
  3. 易于调试,Bag File 和日志记录,便于测试、培训和质量保证
  4. 学习资源丰富且支持仿真,易于学习和测试
  5. 支持接入的设备广泛,不用担心授权费用和单一供应商
  6. 社区生态良好,专家众多,有很多各行各业的解决方案,
  7. 广泛应用于机器人行业中,很多科研机构和世界 500 强企业都在使用
  8. 开源免费,商业友好

感兴趣的同学,可以一起学习起来了。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
1月前
|
tengine 应用服务中间件 网络安全
Debina操作系统如何安装Tengine并开启HTTP2
本指南介绍了Tengine的安装与配置方法。首先下载并解压Tengine源码包,确保依赖项已安装(如pcre、zlib和openssl)。接着运行`./configure`命令进行配置,建议添加`--with-http_v2_module`以启用HTTP/2支持。完成配置后执行`make`编译,再通过`sudo make install`完成安装。为方便使用,可创建符号链接指向Tengine二进制文件。
|
1月前
|
应用服务中间件 nginx
Debina操作系统如何安装OpenResty并开启HTTP2
本文介绍了在Debian服务器上安装OpenResty 1.25.3.2并启用HTTP/2模块的详细步骤。包括下载解压源码、安装依赖项、配置编译参数(指定安装路径与启用HTTP/2模块)、编译安装,以及创建符号链接方便使用。最后提供启动、停止和重新加载配置的命令,并提醒注意安全组设置以确保服务正常访问。
|
1月前
|
安全 应用服务中间件 Linux
Debian操作系统如何安装Nginx并开启HTTP2
本指南介绍了在Linux系统中通过源码编译安装Nginx的完整流程。首先更新软件包列表并安装必要的编译依赖,接着下载指定版本的Nginx源码包(如1.24.0),检查文件完整性后解压。随后通过配置脚本指定安装路径与模块(如HTTP SSL模块),执行编译和安装命令。最后创建软链接以便全局调用,并提供启动、停止及重载Nginx的命令,同时提醒注意安全组设置以确保正常访问。
|
2月前
|
安全 Linux 数据安全/隐私保护
安装RHEL9.x操作系统
本教程详细介绍了在Windows系统上使用VMware Workstation 17.5 Pro安装RHEL 9.x的完整流程。首先准备所需设备和软件,包括Windows计算机、RHEL 9 ISO映像文件、VMware软件及相关下载链接。接着,通过创建虚拟机、配置硬件参数完成VMware的基本设置。随后进入RHEL 9.x安装环节,涵盖语言选择、软件配置、网络和主机名设置、时区调整、磁盘分区规划(如/boot、/、swap、/boot/efi等分区)以及用户和密码的创建。最后,启动安装程序并监控进度,直至系统重启进入图形化登录界面。整个过程配有详细步骤说明和截图,便于用户操作和理解。
安装RHEL9.x操作系统
|
2月前
|
Ubuntu 机器人 Shell
在Jetson TX2的Ubuntu18.04系统中安装ROS的教程
所有这些步骤并不复杂,但确实需要仔细一点。如果遇到问题,不要灰心,问题是解决问题的开始。保持耐心,细心阅读错误信息,通常情况下,问题的答案就藏在其中。祝ROS旅程顺利!
91 18
|
3月前
|
安全 Ubuntu 网络协议
YashanDB安装前操作系统参数调整
本文来自YashanDB官网,主要介绍在Linux环境下安装YashanDB时的系统性能优化配置。内容涵盖服务器hostname设置、关闭交换分区、调整本地端口范围、进程VMA上限及资源限制值、配置大页内存与关闭透明大页等操作。通过这些调整,可提升系统运行效率并避免潜在异常,适用于分布式部署场景,同时提供了具体命令和注意事项以指导用户完成配置。
|
4月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
225 30
|
4月前
|
存储 虚拟化 Windows
想要掌握Hyper-V如何安装,首先需要确保你的操作系统版本满足Hyper-V的安装要求
Hyper-V的安装需确保操作系统版本和硬件满足要求。硬件上,64位处理器需支持SLAT及虚拟化技术(如VT-x或AMD-V),至少4GB RAM和充足存储空间;BIOS/UEFI中启用虚拟化技术和DEP。软件方面,需Windows 10 Pro及以上或Windows Server 2016/2019及以上,并保持系统更新。安装步骤包括检查系统要求、启用Hyper-V功能、配置并创建虚拟机,最后安装操作系统。注意备份数据及网络适配器配置。
|
8月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
272 14
|
8月前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
290 6

热门文章

最新文章

推荐镜像

更多