最新文章【ROS实战】04-自定义消息并实现ROS服务
如何自定义消息并实现ROS服务本文将介绍如何在 ROS Noetic 中自定义消息,并依托自定义的消息开发一个简单的服务端与客户端进行交互。具体来说,我们将创建一个 ROS 服务,该服务接受两个整数并返回它们的和以及一个格式化的信息。我们还会展示如何通过命令行和 Python 代码调用该服务,步骤包括自定义服务消息、编写服务端和客户端、启动和调用服务等内容。
目标
自定义服务消息:我们将创建一个新的服务消息,定义输入输出的格式。
编写服务端代码:实现一个服务端,该服务接收两个整数并返回它们的和及一个固定格式的字符串。
编写客户端代码:实现一个客户端脚本,向服务端发送请求并接收响应。
通过命令行调用服务:展示如何通过命令行调用服务。
开始之前在开始之前,你需要确保已安装 ROS Noetic,并且拥有一个工作空间(例如 ~/catkin_ws/)。如果你对 ROS 的背景或工作空间的概念不太了解,可以先阅读我专栏中的相关文章:《01-ROS安装详细指南》、《02-ROS架构介绍》和《03-从零实现小车运动控制的 ROS 功能包》。
1 创建 ROS 服务包首先,我 ...
【ROS实战】03-从零实现小车运动控制的 ROS 功能包
本教程将从 零基础 带你创建一个包含两个节点的 ROS 包:一个用键盘控制小车方向,另一个接收控制信息并解析动作。
本章使用ROS Noetic版本,如果对ROS背景,ROS主题,ROS架构和工作空间概念不了解的读者,可以先阅读我的专栏中的前两篇文章《01-ROS安装详细指南》和《02-ROS架构介绍》
🧱 第一步:创建工作空间与包✅ 创建工作空间这里我们给工作空间起名为catkin_ws
你可以根据需要命名工作空间。catkin_ws 是”catkin workspace”(catkin工作空间)的缩写,其中,catkin 是ROS中的构建系统的名称,ws 代表工作空间workspace。
1234mkdir -p ~/catkin_ws/srccd ~/catkin_wscatkin_makesource devel/setup.bash
✅ 创建 ROS 包12cd ~/catkin_ws/srccatkin_create_pkg my_robot_control rospy std_msgs geometry_msgs
解释:
my_robot_control ...
【ROS实战】02-ROS架构介绍
ROS架构介绍1. 简介你是否曾有过这样的疑问:我按照文档安装了ROS,依照要求写了一些示例节点(node)、消息(msg)和话题(topic),但觉得过程既麻烦又繁琐。也许你开始怀疑:为什么需要ROS?它到底帮我解决了什么问题?
本文将通过一个简单的例子,介绍ROS的架构,阐明它解决了哪些问题,以及它如何帮助我们简化开发流程。
2. 移动案例假设我们要编写一个能够控制机器人移动的程序。
随着程序的增多,我们需要进行模块化,方便分工合作和代码复用;
还需要开放移动接口,使得其他模块能够调用移动控制功能;
对应,需要选型一个通信机制来传递移动指令;
移动指令的格式,返回消息的格式需要规范化管理;
指令可能需要同时传给多个模块,如果下游模块没有及时收到可能需要缓存;
此外,我们还需要确保各个模块服务的持续运行,能够有效管理;
模块多了后,多对多的消息传递,日志,可能需要一种有效的监控和调试手段。
你会发现,一个简单的移动控制功能,背后可能涉及了大量的框架设计、标准化工作和大量代码量,如果全部手工实现,不同的人实现方案可能五花八门,也使得开发者很难专注于机器人的核心功能(如更好地移动、刹 ...
【ROS实战】01-ROS安装详细指南
ROS安装与验证完整指南1. 版本选型这里,我们选择了ROS Noetic,这是ROS 1系列中最新且最稳定的版本,且仍在持续维护中(文章更新于2025年3月)。虽然一些最新特性仅在ROS 2中可用,但ROS Noetic已经被当前市场上的硬件和开源框架广泛支持,不论是学习,还是追求稳定可靠的运行和支持,ROS Noetic目前都是不错的选择。此外,从ROS 1迁移到ROS 2的学习成本也不高。
操作系统方面,需要对应选择Ubuntu Focal 20.04。
空间需求:安装ROS Noetic需要至少3.7GB的空间,不包括操作系统本身。
2. 源设置国内用户在安装ROS时,建议替换为本地源以解决网络问题,提升下载速度和稳定性,否则直接按照官方文档,可能会由于网络问题遇到各类不可预期的错误。
2.1 apt源配置备份原有的/etc/apt/sources.list文件,然后替换为华为云的镜像源:
1234deb http://repo.huaweicloud.com/ubuntu-ports/ focal main restricted universe multiversedeb ...
Undefined 与 Null:究竟有何不同?
Undefined 与 Null:究竟有何不同?想象一下,你正在参加一个聚会的组织工作。你负责准备一份名单,列出将要带来饮料和食物的人。现在,考虑以下两种情况:
张三 - 你在名单上写下了张三的名字,但你还没有问他能带什么。在这种情况下,张三的贡献是“未定义(undefined)”,因为你知道他会带点什么,但你不知道具体是什么。
李四 - 你联系了李四,而李四告诉你她不打算带任何东西。因此,你在名单上特意标记李四将带来“无(null)”。
在JavaScript中,undefined和null的区别也类似于这个例子。undefined通常用于表示变量已被声明但尚未赋予具体的值,正如你列出张三但尚未确定他的贡献。而null则是一个明确的标记,表示变量应该没有值,就像李四明确表示她不带任何东西一样。
理解undefined和null在代码中的使用,就像区分聚会准备中的不同情况一样重要。知道何时以及如何使用每个可以帮助你编写更清晰、更可预测的代码。下面我们将详细探讨JavaScript中undefined和null的技术细节和实际应用。
什么是undefined?undefined是在某 ...
为什么要用 const 和 let,而不是 var?
为什么要用 const 和 let,而不是 var?JavaScript 中有三种方式声明变量:var、let 和 const。其中,var 是早期版本的 JavaScript 中的标准,但随着 ECMAScript 6(ES6)引入了 let 和 const,var 的种种问题也显现出来。今天,我们将探讨为什么你应该避免使用 var,而优先选择 const 和 let。
var 的问题1. 作用域问题var 的最大问题之一是作用域是 函数作用域,而不是 块级作用域。这意味着,在 if 或 for 这样的代码块内使用 var 声明的变量,仍然可以在整个函数内访问。
举个例子:
1234567function test() { if (true) { var name = 'John'; } console.log(name); // 'John'}test();
尽管 name 变量是在 if 语句内部声明的,但由于 var 的作用域是整个函数,所以 name 在 if ...
JavaScript的诞生与进化
JavaScript的诞生与进化
JavaScript 历史回顾
JavaScript 是什么
JavaScript 与 ECMAScript 的关系
JavaScript 的不同版本
简短的历史回顾JavaScript,最初被称为 LiveScript,在 1995 年由 Brendan Eich(网景公司)开发并集成进 Netscape Navigator 2 浏览器中。最初的目的是提供一种替代 Perl 语言的轻量级客户端脚本,特别用于表单验证。那时,验证一个表单字段的内容通常需要与服务器进行通信,而慢速的拨号上网使得每一次的页面刷新都变得非常痛苦。
JavaScript 的命名背景为了吸引更多开发者和媒体的关注,网景公司在发布前将 LiveScript 改名为 JavaScript。这个改名与当时 Java 编程语言的流行密切相关,借用了 Java 的影响力来推动 JavaScript 的普及。
随着时间的推移,JavaScript 在浏览器中的使用变得越来越广泛,逐渐从简单的表单验证,发展为网页动态交互、AJAX 请求、复杂的计算和动画等多方面应用。
JavaScrip ...
编程世界的AI依赖症:自救与反思
在这个技术日新月异的时代,越来越多的人开始担心一个问题:人工智能是否正在让程序员变成编程“文盲”?我们不难发现,随着对AI技术依赖的增加,程序员解决问题的能力似乎正在下降。
依赖AI的趋势一开始,程序员们不再花时间翻阅那些厚重的技术手册了,因为AI似乎随时能提供答案。渐渐地,他们在调试时也开始感到吃力。那些曾经司空见惯的错误信息和堆栈追踪,没了AI的帮助,看起来仿佛变成了难以攀登的高山。
自我挑战:设立“无AI日”面对这种情况,一些人提出了一个自我挑战的方式——设立无AI日。简单来说,就是每周至少有一天,程序员完全不使用任何AI工具进行编程。这样做的初衷是让程序员们重新找回与代码打交道的感觉,从而提升自己的核心编程技能。虽然刚开始可能会感到不适应,甚至有些挫败,但从长远来看,这有助于防止技术能力的荒废。
技能缺失的隐忧尤其是对于许多刚入行的程序员来说,他们或许从未体验过没有AI辅助时,独立解决问题所带来的成就感。长此以往,这种技能的缺失可能导致整个行业在解决问题的能力上逐渐变弱。
行业反思这个话题已经引起了广泛关注。一个经验丰富的程序员在他的博客上分享了这些思考,文章在一周内吸引了超过 ...
欧洲程序员薪资分析:从爬虫数据看各国薪资差异
欧洲程序员薪资分析:从爬虫数据看各国薪资差异在全球化的科技发展背景下,程序员的薪资差异已成为了一个不可忽视的话题。为了更好地了解欧洲各国程序员的薪资水平,我爬取了 Levels.fyi 网站的欧洲薪资地图,分析了该平台提供的各个国家程序员薪资数据。本文将展示获得的数据,并通过转换为人民币进行对比分析,进一步探讨这些薪资数字背后的意义。
1. 爬取说明:数据来源与获取爬取的目标网站是 Levels.fyi,网址为 https://www.levels.fyi/heatmap/europe/。该网站提供了详尽的各国程序员薪资数据,包括中位数薪资,以及最低10%、25%、75%、90%分位数的薪资信息。所有薪资数据的单位为美元(USD),这里使用了7.25的汇率将其转换为人民币(CNY),并计算出对应的月薪数据。
2. 数据表格:欧洲程序员薪资月薪对比以下是经过汇率转换后的欧洲各国程序员薪资数据。所有数值均为人民币(月薪):
序号
国家名称
中位数月薪
最低10%月薪
25%月薪
75%月薪
90%月薪
1
瑞士
92464
58808
73742
154244
216074
...
ROS主流版本与适用场景建议
ROS主流版本与适用场景建议在机器人开发中,ROS(Robot Operating System)是当前最流行的开发框架。随着ROS 1和ROS 2的推出,开发者可以选择不同的ROS版本来满足各种需求。ROS的版本与操作系统(如Ubuntu版本)以及Linux内核的兼容性密切相关。本文将探讨ROS 1和ROS 2的主要版本、生命周期以及如何根据Ubuntu版本和Linux内核选择最合适的组合,并提供一些具体的应用场景建议。
1. ROS 版本概览与支持情况ROS 1 版本ROS 1已经存在多年,虽然ROS 2逐渐成为未来的方向,但ROS 1仍然在很多老旧项目中被广泛使用。以下是ROS 1的主要版本及其维护状态:
版本
发布日期
EOL(结束维护日期)
支持的Ubuntu版本
ROS Noetic
2020年5月23日
2025年5月(Ubuntu 20.04 LTS支持)
Ubuntu 20.04 LTS
ROS Melodic
2018年5月23日
2023年6月27日
Ubuntu 18.04 LTS
ROS Lunar
2017年5月23日
2019年5月
...