ROS2入门学习——ROS在机器人中的运行

news2024/11/25 16:49:23

一、入门级基础平台TurtleBot

TurtleBot 是 ROS 中重要且资源丰富的机器人之一,特别适合入门级机器人爱好者提供基础平台。用户可以直接利用其自带的软硬件,专注于应用程序的开发。TurtleBot 随着 ROS 的发展,一直处于开发前沿。

TurtleBot相关机器人示例

二、通用的机器人控制结构

这张图展示了一个基于ROS(Robot Operating System)构建的机器人系统架构。以下是主要组件和它们之间的关系的分析:

1. 远程监控计算机(PC):

        主要工具包括 Rviz、Rqt 和 Gazebo,用于可视化、数据监控和仿真。

        通过 Wi-Fi 实现与应用计算机的通信,使用 Topic 和 Service 进行信息交换。

2. 应用计算机(如 JetNano 和 PC):

        实现了 ROS Master,负责管理 ROS 网络中的所有节点。

        包含多个功能模块,如 SLAM(同步定位与地图构建)、图像处理、导航和人工智能等。

        通过 UART、TCP 和 USB 与控制器进行数据交换。

3. 控制器(如 STM32、Arduino):

        负责低层次的控制,执行 PID 控制、定时器管理、PWM 输出、AD/DA 转换等功能。

        可以通过 UART、I2C 和 SPI 与传感器和执行器(如电机、编码器、IMU、声纳和伺服电机)进行通信。

4. 传感器和执行器:

        包括麦克风、激光、摄像头等传感器,用于环境感知。

        执行器如电机和伺服电机用于实现机器人的运动。

这个架构设计强调了模块化和灵活性,允许各个部分独立开发和集成。

三、ROS\ROS2是什么?

3.1 智能机器人时代

3.2 为什么学习ROS?

学习ROS(Robot Operating System)有许多重要的理由,尤其是对机器人和自动化领域的研究与开发。

首先,ROS已经成为机器人研究和开发领域的事实标准,许多学术研究、商业项目和开源项目都基于ROS,学习它可以使你在这些领域更具竞争力。

其次,作为一个开源项目,ROS拥有一个活跃的社区,提供了大量的文档、教程和示例代码。社区的支持使得解决问题变得更加容易,也增加了项目的可持续性。

第三,ROS的模块化设计允许复杂的机器人系统被分解成多个独立的模块。这不仅简化了开发过程,还使得代码更容易维护和重用。

此外,ROS支持多个操作系统(如Linux、Windows和MacOS)和编程语言(如Python和C++),这使得开发者可以在他们熟悉的环境和语言中进行工作。

再者,ROS提供了丰富的库和工具,例如仿真工具(如Gazebo)、可视化工具(如Rviz)以及各种传感器和算法的驱动程序,这些工具能够极大地加速开发过程并提升开发效率。

最后,学习ROS可以为你的职业发展提供更多机会,尤其是在机器人技术和自动化领域,许多公司和研究机构都在使用ROS进行开发和研究。

3.3 ROS的诞生:

ROS,全称为机器人操作系统(Robot Operating System),是一个开源的机器人软件平台,旨在为机器人软件开发提供框架和工具。

在2000年代初,随着机器人技术的发展,研究人员和工程师们面临着如何更高效地开发、测试和部署机器人软件的问题。由于当时缺乏标准化的工具和框架,每个机器人项目通常都是从头开始创建软件,这导致了资源的浪费和开发效率的低下。

2007年:ROS 的初始版本是在斯坦福大学的人工智能实验室(SAIL)中开发的,最初是为了一款名为 "Stanford Autonomous Helicopter" 的无人机项目而创建的。

 2008年:ROS 正式发布,并开始被更广泛的研究社区所接受。其设计目标是提供一个模块化的框架,使得不同的机器人系统可以共享代码和算法。

3.4 ROS的发展历程:

1. 初始阶段(2007-2010年)

  • 2007年:ROS的最初版本在斯坦福大学的人工智能实验室(SAIL)中被开发,目的是支持“斯坦福自主直升机”项目。此时,ROS主要用于实验和研究。
  • 2008年:ROS的第一个正式版本发布,标志着ROS向更广泛的社区开放。

2. 社区成长(2010-2013年)

  • 2010年:ROS的第一个大型版本“Electric”发布,带来了许多新的功能和包,社区开始慢慢壮大。
  • 2011年:ROS的“Fuerte”版本发布,进一步加强了用户社区的支持和文档的丰富性。
  • 2012年:ROS的“Groovy”版本发布,引入了更强大的工具和库,推动了更多外部开发者的参与。
  • 2013年:ROS的“Hydro”版本发布,增加了对传感器和控制的支持,同时为复杂的机器人系统提供了更好的功能。

3. 标准化与成熟(2013-2018年)

  • 2013年:ROS正式成为开源软件项目,得到更多研究机构和公司的支持和参与。
  • 2014年:ROS的“Indigo”版本发布,成为一个长期支持(LTS)版本,受到广泛应用。
  • 2016年:ROS的“Kinetic”版本发布,进一步提升了稳定性和用户体验,成为另一个LTS版本。
  • 2017年:ROS 2 的开发开始,旨在克服ROS 1的一些局限性,如实时支持和多平台兼容性。

4. ROS 2的推出(2018年至今)

  • 2019年:ROS 2的“Dashing Diademata”版本发布,标志着ROS 2的正式推出。ROS 2引入了新的架构,支持实时操作和更强的安全性。
  • 2020年:ROS 2的“Eloquent Elusor”版本发布,增加了对更多功能和工具的支持。
  • 2021年:ROS 2的“Foxy Fitzroy”版本发布,成为另一个长期支持版本,受到广泛应用。

5. 当前与未来

  • 2022年:ROS 2的“Galactic Geochelone”版本发布,继续增强功能和用户体验。
  • 2023年:ROS 2的“Humble Hawksbill”版本发布,进一步提升稳定性和开发者工具。

影响与展望

  • ROS的发展改变了机器人软件的开发方式,促进了代码的共享与重用,并推动了机器人技术的进步。
  • 未来,ROS将继续发展,适应不断变化的技术需求,尤其是在人工智能、自动化和工业4.0等领域的广泛应用。

四、Linux系统介绍及安装

5.1 操作系统是什么?

操作系统是一种用于管理和控制计算机硬件与软件资源的核心程序。

它作为计算机最基础的系统软件,直接在没有任何其他软件支持的情况下运行在物理硬件上。

所有其他应用程序和软件都依赖于操作系统提供的服务和支持才能正常运行。

简而言之,操作系统是计算机系统的基础构件,负责协调所有计算任务和资源。

5.2 Linux是什么?

类Linux系统:类Linux系统是一种自由且开源的操作系统,它在设计和功能上类似于Unix。 

Linux内核:严格来说,“Linux”这个词指的是Linux内核,它是操作系统的核心部分,负责管理硬件资源和系统进程。

历史背景:Linux内核是由芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)于1991年编写的。

GNU计划:这个内核后来被整合进了自由软件基金会的GNU计划中(GNU是“GNU's Not Unix”的递归缩写),这个项目旨在创建一个完全自由的操作系统。

标志和象征:Linux的标志是一只可爱的企鹅,这只企鹅象征着勇于创新和热爱生活的精神。

5.3 Linux发行版是什么?

Linux内核:这是操作系统的核心组件,负责管理硬件资源和系统进程。

安装工具:这是一套用于将整个操作系统和相关软件安装到计算机上的工具。

GNU软件:各种由GNU项目开发的自由软件,这些软件为系统提供了许多基础功能和工具。

其他自由软件:除了GNU软件之外,发行版还包含许多其他开源软件,用于丰富系统功能和用户体验。

专有软件:在一些特定的Linux发行版中,也包含了一些专有软件,以满足特定的用户需求或提供额外的功能。

5.4 Ubuntu安装方法

虚拟机中安装教程:

镜像下载地址:https://ubuntu.com/download/desktop

五、Linux系统基础知识

5.1 Ubuntu界面设置

文件管理器:

软件中心与配置系统软件源:

 应用程序列表:

 终端界面(Ctrl+Ail+t快捷打开):

 5.2 命令行基础语法

命令行对于熟练操作Linux/Unix系统的用户来说是不可或缺的。

与Windows的“一键操作”相比,命令行应用的可扩展性和灵活性更强。

这种操作方式超越了单纯的鼠标点击,赋予用户更多的灵活性和创造空间。

命令行已经成为Linux/Unix系统的典型特征,也是其独特魅力的源泉。

1. 文件和目录操作

(1)ls列出目录内容。

ls

(2)cd改变当前工作目录。

cd /path/to/directory

(3)pwd 显示当前工作目录的路径。

pwd

(4)mkdir创建新目录。

mkdir new_directory

(5)rmdir 删除空目录。

rmdir directory_name

(6)cp复制文件或目录。

cp source_file destination_file

(7)mv 移动或重命名文件或目录。

mv old_name new_name

(8)rm 删除文件或目录。

rm file_name

2. 文件内容查看和编辑

(1)cat 连接文件并打印到标准输出。

cat file_name

(2)more 分页查看文件内容。

more file_name

(3)less 分页查看文件内容,支持向前翻页。

less file_name

(4)head 显示文件的前几行。

head file_name

(5)tail 显示文件的最后几行。

tail file_name

(6)nano 简单的文本编辑器。

nano file_name

(7)vivim 功能强大的文本编辑器。

vi file_name

3. 权限管理

(1)chmod 更改文件或目录的权限。

chmod 755 file_name

(2)chown 更改文件或目录的所有者。

chown user:group file_name

4. 系统信息

(1)uname 显示系统信息。

uname -a

(2)top 实时显示系统性能信息。

top

(3)ps 显示当前进程列表。

ps aux

(4)df 显示文件系统磁盘空间使用情况。

df -h

(5)du显示目录或文件的磁盘使用情况。

du -sh directory_name

5.网络操作

(1)ping 测试网络连接。

ping example.com

(2)ifconfig  显示或配置网络接口(在较新的系统中使用 ip 命令)。

ifconfig

(3)wget 从网络下载文件。

wget http://example.com/file

(4)curl 从网络获取或发送数据。

curl http://example.com

6. 管道和重定向

(1)| 管道,将一个命令的输出作为另一个命令的输入。

ls | grep keyword

(2)> 重定向输出到文件(覆盖)。

ls > output.txt

(3)>>  重定向输出到文件(追加)。

ls >> output.txt

(4)< 从文件中读取输入。

command < input.txt

这些命令只是Linux命令行的冰山一角。通过实践和探索,您会发现更多有用的命令和用法。

六、 C++&Python极简基础

6.1 C++&Python对比:

机器人操作系统(ROS,Robot Operating System)是一种用于编写机器人软件的灵活框架。ROS支持多种编程语言,其中C++和Python是最常用的两种。

1. 性能和效率 

C++:

性能:C++是一种编译型语言,具有高性能和低延迟的特点。在需要实时响应和高效处理的机器人应用中,C++的性能优势明显。

效率:C++允许精细的内存管理和硬件控制,使其非常适合对资源要求高的机器人任务。

Python

性能:作为一种解释型语言,Python在性能上不如C++,但通过使用C/C++扩展模块,可以提高某些计算密集型任务的性能。

效率:Python擅长快速开发、原型设计和脚本编写。对于不需要实时性能的任务,Python是一个高效的选择。

2. 开发速度和易用性

C++

开发速度:由于其复杂的语法和内存管理,C++的开发速度相对较慢。

易用性:C++有较高的学习曲线,需要掌握指针、内存管理、多线程编程等高级概念。

Python

开发速度:Python的简洁语法和动态类型系统使得开发速度较快,适合快速迭代和原型开发。

易用性:Python的语法简洁明了,容易上手,非常适合初学者和快速开发。

3. 库和工具支持

C++

库支持:C++在ROS中有广泛的库支持,包括ROS的核心库和许多第三方库。

工具支持:C++在ROS开发中的工具链较为完善,支持调试、性能分析和内存管理等。

Python

库支持:Python也有丰富的库支持,特别是在数据处理、机器学习和AI领域。

工具支持:Python的开发工具和调试器也相当丰富,虽然不如C++在实时调试和性能分析方面强大,但足以满足大多数ROS开发需求。

4. 社区和文档

C++

ROS的C++社区活跃,有大量的资源、教程、示例代码和文档,可以帮助开发者解决问题。

Python

Python的ROS社区也非常活跃,尤其适合新手和快速开发者。Python在ROS中的文档、教程和示例代码同样丰富。

5. 应用场景

C++

适合高性能、实时性要求高的机器人应用,如控制系统、传感器处理和嵌入式系统。

通常用于生产环境和需要长期维护的项目。

Python

适合开发原型、测试和数据处理任务,如图像处理、机器学习和机器人行为编程。

非常适合快速迭代和开发周期短的项目。

6.2 for循环

C++:

#include <iostream>
using namespace std;

int main() {
    int a = 5; // 初始化变量 a
    for (a; a < 10; a++) { // 循环条件,确保 a 小于 10
        cout << "a=" << a << endl; // 输出 a 的值
    }
    return 0; // 结束程序
}

Python:

for a in range(5, 10):  # 从 5 到 9
    if a < 10:
        print(a)  # 打印 a 的值
    else:
        break  # 如果 a >= 10,退出循环

 

 6.3 while循环

C++:

#include <iostream> // 包含输入输出流库
using namespace std;

int main() {
    int a = 5; // 初始化变量 a
    while (a < 10) { // 当 a 小于 10 时循环
        cout << a << endl; // 输出 a 的值
        a++; // 将 a 增加 1
    }
    return 0; // 程序结束
}

Python:

a = 5  # 初始化变量 a
while a < 10:  # 当 a 小于 10 时循环
    print(a)  # 输出 a 的值
    a += 1  # 将 a 增加 1

6.4 面向对象

C++:

#include <iostream> // 正确包含输入输出流库

class A {
public: // 访问修饰符 public 应该是 public
    int i; // 成员变量 i
    void test() { // test 函数的定义
        std::cout << i << std::endl; // 正确输出 i 的值
    }
};

int main() {
    A a; // 创建 A 类的实例 a
    a.i = 10; // 为成员变量 i 赋值
    a.test(); // 调用 test 函数
    return 0; // 程序结束
}

Python:

class A:
    i = 10  # 类变量 i

    def test(self):
        print(self.i)  # 输出类变量 i

a = A()  # 创建 A 类的实例 a
a.test()  # 调用 test 方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cuda、pytorch-gpu安装踩坑!!!

前提&#xff1a;已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装&#xff0c;cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

二分法查找(c基础)

二分法查找一个有序数组中是否有某个数 大家看了可以自己写一下 &#xff08; 要用知识点 数组 while循环 scanf 函数 printf函数 &#xff09; //用二分法查找 #include<stdio.h> int main() {char arr[] { 1,2,3,4,5,6,7,8,9,10 };int sz sizeof(arr) / size…

实现图书管理系统

1. 图书管理系统菜单 如上图给用户选项 1. 管理员 2. 普通用户 2. 实现基本框架 右键点src&#xff0c;选择new&#xff0c;选择Package命名三个包 book operation user 1.先选择book包&#xff0c;new两个类 book bookList 在book类中定义书的基本属性&#xff0c;并重写…

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记 这是新国立和新加坡管理大学发表在ECCV2024上的一篇image restoration的文章&#xff0c;提出了一个新的网络结构ECMA&#xff0c;从实验结果上看在超分&#xff0c;去噪&#xff0c;去模糊…

不需要复制粘贴,重复内容如何使用Mac快速完成输入

在Mac的日常使用中&#xff0c;必然有着重复内容需要重复输入的需求&#xff0c;但是Mac的剪切板又不具备历史记录的功能&#xff0c;所以只能一次次的复制粘贴&#xff0c;费时费力&#xff0c;那么该如何才能不这么麻烦 快捷短语就是为了解决这一问题而存在的 提前在设置好…

ubuntu20.04 加固方案-设置限制su命令用户组

一、编辑/etc/pam.d/su配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/pam.d/su文件。 vim /etc/pam.d/su 二、添加配置参数 在打开的配置文件的中&#xff0c;添加以下参数&#xff1a; auth required pam_wheel.so 创建 wheel 组 并添加用户 …

002 配置YUM国内镜像源

打开XShell 工具&#xff0c;连接Linux 选择上次的连接&#xff0c;直接双击。 具体连接步骤&#xff0c;参考前面的内容001 编辑YUM默认配置文件 /etc/yum.repos.d/CentOS-Base.repo 是YUM的默认配置文件。 修改这个文件&#xff0c;将其中的内容替换成国内的镜像源 输入下…

【工具变量】大数据管理机构改革DID(2007-2023年)

数据简介&#xff1a;数字ZF是指以新一代信息技术为支撑&#xff0c;重塑政务信息化管理架构、业务架构、技术架构的现代化治理模式。随着数字政府的建设&#xff0c;特别是借助大数据等新一代数字技术&#xff0c;极大地提升了政府的治理能力&#xff0c;从而起到辅助监管机构…

WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)

文章目录 1、案例效果1、侧边栏分类2、AB类侧边弹窗实现1.文件创建2、样式代码与功能代码实现3、功能代码实现 3 运行效果4、源代码获取 1、案例效果 1、侧边栏分类 A类 &#xff1a;左侧弹出侧边栏B类 &#xff1a;右侧弹出侧边栏C类 &#xff1a;顶部弹出侧边栏D类 &#xf…

【WebRTC】WebRTC的简单使用

目录 1.下载2.官网上的使用3.本地的使用 参考&#xff1a; 【webRTC】一、windows编译webrtc Windows下WebRTC编译 1.下载 下载时需要注意更新python的版本和网络连接&#xff0c;可以先试试ping google。比较关键的步骤是 cd webrtc-checkout set https_proxy127.0.0.1:123…

从 vue 源码看问题 — 如何理解 vue 响应式?

书接上回 上一篇 我们通过 Vue 源码了解并总结了&#xff0c;Vue 初始化时需要进行哪些处理&#xff0c;其中遇到响应式的相关内容时选择了略读&#xff0c;没有进行深入了解&#xff0c;那么本篇就开始深入解读 Vue 响应式. 深入源码 响应式入口 根据上一篇 vue 初始化都做…

动态规划理论基础和习题【力扣】【算法学习day.22】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

Django3 + Vue.js 前后端分离书籍添加项目Web开发实战

文章目录 Django3后端项目创建切换数据库创建Django实战项目App新建Vue.js前端项目 Django3后端项目创建 创建Django项目&#xff0c;采用Pycharm或者命令行创建皆可。此处&#xff0c;以命令行方式作为演示&#xff0c;项目名为django_vue。 django-admin startproject djang…

论文翻译 | Evaluating the Robustness of Discrete Prompts

摘要 离散提示已被用于调整预训练语言模型&#xff0c;以适应不同的NLP任务。特别是&#xff0c;从一小组训练实例中生成离散提示的自动方法已经报告了优越的性能。然而&#xff0c;仔细观察习得的提示会发现&#xff0c;它们包含嘈杂和反直觉的词汇结构&#xff0c;而这些在手…

自适应对话式团队构建,提升语言模型代理的复杂任务解决能力

人工智能咨询培训老师叶梓 转载标明出处 如何有效利用多个大模型&#xff08;LLM&#xff09;代理解决复杂任务一直是一个研究热点。由美国南加州大学、宾夕法尼亚州立大学、华盛顿大学、早稻田大学和谷歌DeepMind的研究人员联合提出了一种新的解决方案——自适应团队构建&…

linux之网络子系统- TCP连接的开销,主要是内存的开销

一、相关实际问题 内核是如何管理内存的如何查看内核使用的内存信息服务器上一条ESTABLISH状态的空连接需要消耗多少内存机器上出现了3万多个TIME_WAIT&#xff0c;内存开销会不会很大 二、Linux内核如何管理内存 内核针对自己的应用场景&#xff0c;使用了一种叫做SLAB/SLU…

企业AI助理驱动的决策支持:从数据洞察到战略执行

在当今瞬息万变的商业环境中&#xff0c;企业面临着前所未有的竞争压力和不确定性。为了保持竞争力&#xff0c;企业不仅需要迅速响应市场变化&#xff0c;还需要做出基于数据的明智决策。随着人工智能技术的飞速发展&#xff0c;企业AI助理正在成为决策过程中的重要工具&#…

二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 零、前言一、应用层协议原理1.1 网络应用的体系结构1.1.1 客户-服务器(C/S)体系结构1.1.2 对等体&#xff08;P2P&#xff09;体系结构1.1.3 C/S 和 P2P体系结构的混合体 1.2 进程通信1.2.1 问题1&#xff1a;对进程进行编址&#xff08;addressing&#xff09;&#…

02-Dubbo特性及工作原理

02-Dubbo特性及工作原理 Dubbo 的特性 这里说一下 Dubbo 最主要的特性&#xff0c;从这些特性中&#xff0c;就可以看出来我们为什么要选用 Dubbo&#xff0c;也可以将 Dubbo 和 Spring Cloud 进行对比&#xff0c;比如我们搭建一套微服务系统&#xff0c;出于什么考虑选用 Dub…

通义灵码AI程序员你在用吗?

大家好&#xff0c;我是袁庭新。之前给大家介绍过AI编码助手——通义灵码&#xff0c;这期给大家分享通义灵码AI程序员的一些功能。 随着大模型的持续进化&#xff0c;在语义理解、代码生成、开发工作流等方面的能力也获得了持续、全面的提升。你说&#xff0c;要是有个编程小…