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

一、入门级基础平台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; // 初始化变量 afor (a; a < 10; a++) { // 循环条件,确保 a 小于 10cout << "a=" << a << endl; // 输出 a 的值}return 0; // 结束程序
}

Python:

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

 

 6.3 while循环

C++:

#include <iostream> // 包含输入输出流库
using namespace std;int main() {int a = 5; // 初始化变量 awhile (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 应该是 publicint i; // 成员变量 ivoid test() { // test 函数的定义std::cout << i << std::endl; // 正确输出 i 的值}
};int main() {A a; // 创建 A 类的实例 aa.i = 10; // 为成员变量 i 赋值a.test(); // 调用 test 函数return 0; // 程序结束
}

Python:

class A:i = 10  # 类变量 idef test(self):print(self.i)  # 输出类变量 ia = A()  # 创建 A 类的实例 a
a.test()  # 调用 test 方法

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

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

相关文章

智谱发布AI助理,帮人类敲响AGI的大门

人工智能之父John McCarthy曾说&#xff1a;“只要AI可以开始正常工作&#xff0c;就不会有人再把它当AI了。”如今&#xff0c;这一预言正在逐渐变为现实。 10月25日&#xff0c;智谱AI推出了自主智能体AutoGLM&#xff0c;能够模拟人类操作手机&#xff0c;执行各种任务。 …

Profinet、Ethernet/IP 工业以太网无线通信解决方案

在工业现场&#xff0c;我们常常会面临这样的困扰&#xff1a;两个PLC之间、PLC 跟远程IO之间或者PLC 跟伺服之间由于种种原因不方便布线&#xff0c;严重影响了通讯效率和生产进程。为了解决这一难题&#xff0c;三格电子设计了一款工业以太网无线网桥&#xff0c;这款无线网桥…

重塑未来,开源AI数字人系统引领个性化语音新纪元!AigcPanel v0.03开启公测

你是否曾梦想拥有一个能够与你对话、与你共鸣的AI数字人伙伴&#xff1f;现在&#xff0c;这一切都不再是幻想&#xff01;我们自豪地推出——全新的开源AI数字人系统&#xff0c;一个集视频合成、声音合成、声音克隆与模型管理于一体的创新平台&#xff0c;让你轻松打造专属的…

js逆向-模拟加密

实战七麦数据&#xff1a; 1.寻找加密入口 尝试搜索的方法&#xff1a; 那只能使用跟栈的方法&#xff0c;进入send发包位置&#xff1a; 打上断点&#xff0c;寻找加密入口&#xff0c;前面是发包分包&#xff0c;promise注意到是一个异步操作&#xff0c;看是否在此加密&…

Kafka社区KIP-500中文译文(去除ZooKeeper)

原文链接&#xff1a;KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum - Apache Kafka - Apache Software Foundation 译者&#xff1a;关于Kafka3.x版本最大的一个变化即是解除了对ZooKeeper的依赖&#xff0c;而本文的作者是大神Colin&#xff0c;他高屋建瓴…

【计算机网络教程】课程 章节测试1 计算机网络概述

一. 单选题&#xff08;共16题&#xff09; 1 【单选题】以下关于TCP/IP参考模型缺点的描述中&#xff0c;错误的是&#xff08; &#xff09;。 A、在服务、接口与协议的区别上不很清楚 B、网络接口层本身并不是实际的一层 C、它不能区分数据链路和物理层 D、传输层对…

(蓝桥杯C/C++)——常用库函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、 二分查找 1.二分查找的前提 2.binary_ search函数 3.lower_bound和upper_bound 二、排序 1.sort概念 2.sort的用法 3.自定义比较函数 三、全排列 1.next p…

软考:24年上半年选择题

软件测试的目的是降低风险&#xff0c;无法100%的证明被测对象的正确性。 数字孪生&#xff1a; EAI企业应用集成&#xff1a; 线性回归技术&#xff1a; 嵌入式系统实时特性&#xff1a; 计算机信息安全&#xff1a;最安全的是访问验证保护级&#xff0c;最不安全的是用…

【Linux】从零开始使用多路转接IO --- poll

碌碌无为&#xff0c;则余生太长&#xff1b; 欲有所为&#xff0c;则人生苦短。 --- 中岛敦 《山月记》--- 从零开始使用多路转接IO 1 前言1 poll接口介绍3 代码编写4 总结 1 前言 上一篇文章我们学习了多路转接中的Select&#xff0c;其操作很简单&#xff0c;但有一些缺…

系统架构设计师-未来信息综合技术(2)

一、机器人技术 森政弘与合田周平提出的:“机器人是一种具有移动性、个体性、智能性、通用性、半机械半人性、自动性、奴隶性等7个特征的柔性机器。” 从这一定义出发&#xff0c;森政弘又提出了用自动性、智能性、个体性、半机械半人性、通用性、移动性、信息性、柔性、有限性…

知识吾爱纯净版小程序系统 leibiao SQL注入漏洞复现(XVE-2024-30663)

0x01 产品简介 知识吾爱纯净版小程序系统是一款基于微信小程序平台开发的知识付费应用,旨在帮助用户快速建立自己的知识付费平台,实现支付变现和流量主收益。它提供了简洁明了的用户界面和良好的用户体验,同时注重用户隐私保护,确保用户信息的安全存储和传输。 0x02 漏洞…

CocoaPods安装步骤详解 - 2024

引言 CocoaPods的安装&#xff0c;如果有VPN就一直开启&#xff0c;会让整个流程非常顺畅。 在现代 iOS 开发中&#xff0c;依赖管理变得越来越重要&#xff0c;CocoaPods 成为开发者们首选的依赖管理工具。它不仅可以简化库的安装与更新&#xff0c;还能帮助开发者更高效地管…

【计网】深入理解NAT机制,内网穿透与内网打洞,代理服务

我没胆量犯错 才把一切错过 --- 林夕 《我对不起我》--- 一文了解NAT机制&#xff0c;代理服务&#xff0c;内网穿透 1 再谈 NAT 机制2 内网穿透与内网打洞3 代理服务器 1 再谈 NAT 机制 NAT机制我们在解决IP地址不足的问题中提到过。为了解决IP地址不足的问题&#xff0c;采…

Docker篇(安装容器)

目录 一、安装mysql容器 1. 拉取mysql镜像 2. 创建并运行容器 二、安装Tomcat容器 1. 拉取镜像 2. 创建并运行容器 三、安装Nginx容器 1. 拉取镜像 2. 创建并运行容器 四、安装Redis容器 1. 拉取镜像 2. 创建并运行容器 五、安装RabbitMQ 1. 拉取镜像 2. 创建并运…

App Inventor 2 列表显示框能否实现多选?

Q&#xff1a;列表显示框有没有办法做到多选的功能&#xff1f; // 问题分析 // AppInventor2列表显示框原生并没有多选功能&#xff0c;只能点击其中一项&#xff0c;然后触发“选择完成时”这个事件&#xff0c;那么有没有办法做到多选呢&#xff1f; // 问题思路 // 经过…

PropTypes 和 TypeScript 在 React 中的比较

文章目录 引言PropTypes什么是 PropTypes&#xff1f;如何使用 PropTypes优点缺点 TypeScript什么是 TypeScript&#xff1f;如何使用 TypeScript优点缺点 选择建议总结 引言 在 React 开发中&#xff0c;组件的可复用性和可维护性至关重要。为了确保组件接收到正确的 props&a…

进程间通信(命名管道 共享内存)

文章目录 命名管道原理命令创建命名管道函数创建命名管道 共享内存原理shmgetFIOK 代码应用&#xff1a;premsnattch 命名管道 用于两个毫无关系的进程间的通信。 原理 Linux文件的路径是多叉树&#xff0c;故文件的路径是唯一的。 让内核缓冲区不用刷新到磁盘中&#xff0c…

计算机毕业设计Hadoop+大模型旅游推荐系统 旅游景点推荐 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 开题报告 设计&#xff08…

一般无人机和FPV无人机的区别

文章目录 一般无人机的工作原理关键组件&#xff1a;一般无人机的应用领域一般无人机的操控体验 FPV无人机的工作原理关键组件&#xff1a;FPV无人机的应用领域FPV无人机的操控体验性能特点FPV无人机的性能特点 未来无人机发展方向和通信方式拓展 一般无人机的工作原理 一般无…

react基础之redux快速上手环境准备

文章目录 核心概念配置基础环境提交action传参异步状态操作redux调试-devtools配套工具 Redux 是一个状态管理库&#xff0c;通常与 React 一起使用&#xff0c;帮助开发者管理应用的全局状态。它的核心理念是将应用的状态存储在一个单一的、不可变的状态树中&#xff0c;并通过…