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/
相关文章
|
8天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
13天前
|
Unix C语言
UNIX操作系统的开发始于1969年
UNIX操作系统的开发始于1969年
28 5
|
1月前
|
Windows
Windows操作系统部署安装Kerberos客户端
详细介绍了在Windows操作系统上部署安装Kerberos客户端的完整过程,包括下载安装包、安装步骤、自定义安装路径、修改环境变量、配置hosts文件和Kerberos配置文件,以及安装后的验证步骤。
48 3
Windows操作系统部署安装Kerberos客户端
|
1月前
|
Ubuntu 网络安全 开发工具
Ubuntu19.04的安装过程详解以及操作系统初始化配置
本文详细介绍了Ubuntu 19.04操作系统的安装过程、初始化配置、网络设置、软件源配置、SSH远程登录以及终端显示设置。
62 1
Ubuntu19.04的安装过程详解以及操作系统初始化配置
|
28天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:一场操作系统的较量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同海上的两艘巨轮,各自承载着不同的使命与梦想。本文将深入浅出地探讨这两个系统在开发领域的异同,从用户体验、开发工具、市场趋势等多个维度进行比较分析。通过这场技术的较量,我们可以更好地理解每个系统的优势与局限,以及它们如何影响我们的日常生活和工作。
|
2月前
|
存储 Ubuntu 安全
ROS2教程02 ROS2的安装、配置和测试
本文是关于ROS2(机器人操作系统2)的安装、配置和测试的教程。内容包括使用一键安装脚本快速安装ROS2 Humble版,手动安装步骤,设置语言环境、添加软件源、更新软件包、安装ROS2桌面版和开发工具,配置ROS2环境,创建工作空间,配置ROS2领域以避免网络冲突,以及如何删除ROS2。此外,还包括了测试ROS2是否安装成功的两个案例:基本的Topic通信测试和使用Turtlesim演示程序。适用于Ubuntu 22.04操作系统。
96 1
ROS2教程02 ROS2的安装、配置和测试
|
2月前
|
编解码 Linux 虚拟化
超详细VMware虚拟机安装Win10操作系统过程图解
这篇文章提供了一个详细的VMware虚拟机安装Windows 10操作系统的图解教程,包括了从创建虚拟机到安装操作系统的全过程,以及安装后的一些基本设置,如屏幕分辨率调整等。作者还提到了后续会分享关于磁盘分区的创建过程。
超详细VMware虚拟机安装Win10操作系统过程图解
|
2月前
|
安全 物联网 vr&ar
探索移动应用的未来:开发趋势与操作系统的进化
本文将带您一探究竟,看看移动应用开发领域的最新动态以及移动操作系统如何适应这些变化。我们将从开发者的角度出发,深入分析当前市场上流行的开发工具和框架,同时探讨移动操作系统的最新进展,包括它们是如何提升用户体验和安全性的。文章还将预测未来移动应用可能的发展方向,以及开发者如何准备迎接即将到来的挑战。
|
2月前
|
人工智能 安全 数据安全/隐私保护
移动应用与系统:探索开发与操作系统的协同创新
【8月更文挑战第20天】在当今数字化时代,移动应用和操作系统作为技术革新的关键驱动力,正塑造着全球数十亿人的生活方式。本文将深入探讨移动应用开发的最新趋势、移动操作系统的演进,以及它们如何相互影响,共同推动技术和社会的进步。我们将从用户体验的角度出发,分析当前市场上流行的移动操作系统特点,并讨论跨平台开发框架为行业带来的变革。同时,我们还将关注安全性、隐私保护以及人工智能集成等关键问题,预测未来移动应用和操作系统可能的发展方向。通过本文,读者将获得对移动应用和操作系统协同发展动态的全面理解,以及对即将到来的技术变革的洞见。
43 13
|
2月前
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
47 1

热门文章

最新文章

下一篇
无影云桌面