孤ROS的博客

孤ROS的博客,欢迎大家交流

  • 博客(203)
  • 收藏
  • 关注

原创 静态广播器,命令

使用以米为单位的 x/y/z 偏移量和以弧度为单位的roll/pitch/yaw(可直译为滚动/俯仰/偏航,分别指的是围绕 x/y/z 轴的旋转)向 tf2 发布静态坐标变换。使用以米为单位的 x/y/z 偏移量和 qx/qy/qz/qw 四元数向 tf2 发布静态坐标变换。的可执行文件,通过该文件可以直接广播静态坐标系关系,其使用语法如下。之外,其他参数都是可选的,如果未指定特定选项,那么将直接使用默认值。注意:在上述两种格式中除了用于表示父级坐标系的。功能包中提供了一个名为。和用于表示子级坐标系的。

2024-08-04 15:29:49 174

原创 ROS2中,vscode中c_cpp_properties.json的配置

【代码】ROS2中,vscode中c_cpp_properties.json的配置。

2024-07-26 19:33:41 622

原创 ROS2中,py的launch文件中的setup.py(通用)

【代码】ROS2中,py的launch文件中的setup.py(通用)

2024-07-24 16:25:53 106

原创 ROS2中,小车通信服务通信

【代码】ROS2中,小车通信服务通信。

2024-07-23 22:02:54 313

原创 ROS2中,实车电脑端的动作通信

【代码】ROS2中,实车电脑端的动作通信。

2024-07-23 22:01:13 474

原创 ROS2 通信机制总结

通过发布/订阅模型和客户端/服务端模型,我们可以在ROS2系统中实现不同节点之间的消息传递和服务调用。ROS2是一个分布式系统框架,具有多种通信机制,用于在不同节点之间传递消息和调用服务。在等待服务可用后,创建一个请求消息对象,并填充请求数据。在回调函数中,我们可以对收到的请求消息进行处理,并将结果填充到响应消息中。在上面的示例中,创建了一个发布者节点,使用。在上面的示例中,创建了一个订阅者节点,使用。在上面的示例中,创建了一个客户端节点,使用。在上面的示例中,创建了一个服务端节点,使用。

2024-07-21 10:53:45 123

原创 ROS2小乌龟案例参数服务

指令执行后,将生成turtlesim_node节点对应的窗口,窗口背景色会动态改变,最终运行结果与演示案例类似。

2024-07-21 10:52:04 168

原创 ROS2小乌龟案例动作通信

编写动作接口文件;编写动作服务端实现;编写动作客户端实现;编写launch文件;编辑配置文件;编译;执行。

2024-07-18 08:52:01 560

原创 ROS2小乌龟案例服务通信

编写服务接口文件;编写服务端实现;编写客户端实现;编写launch文件;编辑配置文件;编译;执行。

2024-07-18 08:47:46 678

原创 ROS2小乌龟案例话题通信

编写速度订阅与发布实现;编写launch文件集成多个节点;编辑配置文件;编译;执行。

2024-07-17 16:59:14 956

原创 ROS2中,通信常用的命令工具

关于命令的使用一般都会提供帮助文档,帮助文档的获取方式如下:可以通过命令 -h或命令 --help或。命令下参数的使用也可以通过命令 参数 -h或或。

2024-07-17 15:59:30 104

原创 ROS2时间相关API

要求话题发布方按照一定的频率发布消息,我们实现时是通过定时器来控制发布频率的,其实,除了定时器之外,ROS2 中还提供了 Rate 类,通过该类对象也可以控制程序的运行频率。rclpy 中的 Rate 对象可以通过节点创建,Rate 对象的 sleep() 函数需要在子线程中执行,否咋会阻塞程序。Time 以及 Duration 的相关运算。创建 Duration 对象,并调用其函数。创建 Duration 对象,并调用其函数。创建 Time 对象,并调用其函数。创建 Time 对象,并调用其函数。

2024-07-16 17:48:11 222

原创 ROS2重命名话题

请先分别创建 C++ 与 Python 相关的功能包以及节点,且假定在创建节点时,使用的命名空间为 xxx,节点名称为 yyy。话题名称为 /xxx/yyy/topic/chatter,使用命名空间 xxx 以及节点名称 yyy 作为话题名称前缀。话题名称为 /xxx/topic/chatter,与命名空间 xxx 有关,与节点名称 yyy 无关。当为节点添加命名空间时,节点下的所有非全局话题都会前缀命名空间,而重映射的方式只是修改指定话题。开头的名称,参考命名空间设置话题名称,和节点名称无关。

2024-07-16 08:19:04 691

原创 ROS2节点重命名

语法:ros2 run 包名 节点名 --ros-args --remap __ns:=命名空间示例:1.2运行结果使用查看节点信息,显示结果:2.ros2 run名称重映射2.1为节点起别名语法: ros2 run 包名 节点名 --ros-args --remap __name:=新名称或ros2 run 包名 节点名 --ros-args --remap __node:=新名称示例:2.2运行结果使用查看节点信息,显示结果:3.ros2 run命名空间与名称重映

2024-07-16 08:16:31 529

原创 关于ROS2通信命名重命名的相关总结

3.1 节点重命名。

2024-07-15 18:40:32 815

原创 ROS2中的元功能包

MetaPackage是Linux的一个文件管理系统的概念。是 ROS2 中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来,我们可以认为它是一本书的目录索引,告诉我们这个包集合中有哪些子包,并且该去哪里下载。显而易见的,逐一安装功能包的效率低下,在ROS2中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。那么调用者安装该模块时,需要逐一的安装每一个功能包吗?

2024-07-15 11:53:01 395

原创 ROS2工作空间覆盖

2.两个变量的值的设置与 ~/.bashrc 中的 setup.bash 的配置顺序有关,对于自定义的工作空间而言,后配置的优先级更高,主要表现在后配置的工作空间的功能包在环境变量值组成的前部,而前配置工作空间的功能包在环境变量值组成的后部分,如果更改两个自定义工作空间在 ~/.bashrc 中的配置顺序,那么变量值也将相应更改,但是 ROS2 系统工作空间的配置始终处于最后。所谓工作空间覆盖,是指不同工作空间存在重名功能包时,重名功能包的调用会产生覆盖的情况。没什么用,这种情况是需要极力避免出现的。

2024-07-14 10:43:18 385

原创 ROS2分布式

ROS2本身是一个分布式通信框架,可以很方便的实现不同设备之间的通信,ROS2所基于的中间件是DDS,当处于同一网络中时,通过DDS的域ID机制(ROS_DOMAIN_ID)可以实现分布式通信,大致流程是:在启动节点之前,可以设置域ID的值,不同节点如果域ID相同,那么可以自由发现并通信,反之,如果域ID值不同,则不能实现。默认情况下,所有节点启动时所使用的域ID为0,换言之,只要保证在同一网络,你不需要做任何配置,不同ROS2设备上的不同节点即可实现分布式通信。上述计算规则了解即可。

2024-07-14 10:41:55 444

原创 C++在ROS2中的应用优点

强大的库支持:C++拥有丰富的库支持,可以方便地进行各种操作,如字符串处理、文件读写、图像处理等。在ROS2中,很多常用功能已经被封装成了C++库,使用C++可以很方便地调用这些库来实现各种功能。良好的面向对象特性:C++是一种面向对象的语言,支持封装、继承和多态等特性。在ROS2中,节点和消息都是以对象的形式存在,使用C++可以更好地进行封装和抽象,提高代码的复用性和可维护性。使用C++语言可以简洁地定义节点、话题和消息,并通过调用ROS2提供的API来实现发布功能。

2024-07-12 18:51:39 170

原创 python语言在ROS2应用的优点

强大的库支持:Python拥有丰富的第三方库和工具,在ROS2应用开发中能够提供很多便利。ROS2 API支持:ROS2提供了Python API,使得开发人员可以方便地访问ROS2的功能和工具。通过使用Python语言,开发人员可以更轻松地编写ROS2节点和服务,并与其他节点进行通信。简洁易读:Python语言以其简洁清晰的语法和易读性而闻名,使得开发人员能够更快速地编写和理解代码。跨平台支持:Python语言是一种解释性的语言,能够在不同的操作系统上运行。

2024-07-12 18:49:52 251

原创 ROS2参数服务(Python)

ROS2的Python客户端暂时没有提供参数客户端专用的API,但是参数服务的底层是基于服务通信的,所以可以通过服务通信操作参数服务端的参数。当前工作空间下,启动两个终端,终端1执行参数服务端程序,终端2执行参数客户端程序(使用2.5.3中的C++实现)。最终运行结果与案例类似。

2024-07-11 16:51:56 331

原创 ROS2参数服务(C++)

当前工作空间下,启动两个终端,终端1执行参数服务端程序,终端2执行参数客户端程序。最终运行结果与案例类似。

2024-07-11 16:50:42 403

原创 ROS2参数数据类型

在ROS2中,参数由键、值和描述符三部分组成,其中键是字符串类型,值可以是bool、int64、float64、string、byte[]、bool[]、int64[]、float64[]、string[]中的任一类型,描述符默认情况下为空,但是可以设置参数描述、参数数据类型、取值范围或其他约束等信息。借助于相关API,我们可以实现参数对象创建以及参数属性解析等操作。以下代码提供了参数相关API基本使用的示例。为了方便操作,参数被封装为了相关类,其中C++客户端对应的类是。,Python客户端对应的类是。

2024-07-11 09:34:11 372

原创 ROS2动作通信(Python)

当前工作空间下,启动两个终端,终端1执行动作服务端程序,终端2执行动作客户端程序。最终运行结果与案例类似。

2024-07-11 09:33:03 833

原创 ROS2动作通信(C++)

当前工作空间下,启动两个终端,终端1执行动作服务端程序,终端2执行动作客户端程序。最终运行结果与案例类似。

2024-07-10 08:15:02 1445

原创 ROS2动作通信接口消息

action接下来,我们可以参考案例编写一个action文件,该文件中包含请求数据(一个整型字段)、响应数据(一个整型字段)和连续反馈数据(一个浮点型字段)。

2024-07-09 19:31:10 567

原创 在C++中占位符的作用

这样的好处是,我们可以使用同一个函数模板来处理不同类型的参数,而不需要为每种类型都编写一个单独的函数。占位符的作用是在定义函数模板时,表示可以接受任意类型的参数。通过在函数调用时指定模板参数,我们可以告诉编译器需要实例化的具体类型。在C++中,占位符通常用于函数的参数列表中,用于表示某个参数暂时不需要使用或者待补充。函数时,编译器会根据指定的模板参数生成相应的函数模板实例。是一个占位符,表示可以接受任意类型的参数。在上面的代码中,我们定义了一个函数模板。函数中,我们分别使用。

2024-07-09 10:09:42 282

原创 ROS2中,所有通信无法接收

这个命令会停用防火墙,并设置为在系统启动时不自动开启。一般之前可以正常通信,后面突然间一下子不能通信了,一般都是防火墙的问题。重启,一般就可以解决问题。2、输入命令关闭防火墙。

2024-07-08 18:16:35 103

原创 ROS2服务通信(C++)

当前工作空间下,启动两个终端,终端1执行服务端程序,终端2执行客户端程序。

2024-07-08 17:30:25 430

原创 ROS2服务通信接口消息

srv接下来,我们可以参考案例编写一个srv文件,该文件中包含请求数据(两个整型字段)与响应数据(一个整型字段)。

2024-07-08 10:45:09 289

原创 ROS2的服务通信

在ROS2中,服务通信通过服务(Service)来实现,服务是一种提供给其他节点调用的功能接口。服务通信分为服务请求方(Client)和服务提供方(Server)两个角色。运行后,服务请求方(Client)将发送一个请求到服务提供方(Server),并打印出计算结果。然后,我们在Python脚本中创建服务请求方(Client)和服务提供方(Server)。在服务请求方(Client)代码中,我们先创建一个服务客户端(在服务提供方(Server)代码中,我们创建一个服务(),将输入参数赋值给它,并通过调用。

2024-07-07 11:39:04 147

原创 ROS2中的服务通信

在服务端代码中,首先创建了一个Node对象,并通过create_service()方法创建了一个名为"add_two_ints"的服务。该服务的请求类型为example_interfaces::srv::AddTwoInts::Request,响应类型为example_interfaces::srv::AddTwoInts::Response。在客户端代码中,首先创建了一个Node对象,并通过create_client()方法创建了一个名为"add_two_ints"的客户端。

2024-07-07 06:30:00 135

原创 vscode中,用户代码片段的使用和设置

在上面的代码中,我们定义了一个代码片段的名称为"HTML5 Template",触发词为"html"。当在编辑器中输入"html"后,按下Tab键即可生成完整的HTML结构。其中的"$1"表示光标停留的位置,您可以方便地切换到其他位置进行编辑。可以通过菜单栏中的 "文件" -> "首选项" -> "用户代码片段" 打开用户代码片段文件。在打开的文件中,您可以创建新的代码片段,也可以编辑现有的代码片段。它允许您定义自己的代码模板,并在输入特定的触发词后自动扩展为完整的代码块。

2024-07-06 17:42:50 177

原创 python中self的作用

在Python中,self是一个在类中使用的特殊参数,它表示当前实例对象自身。self参数用于访问类的属性和方法。总结:在Python中,self参数用于访问当前实例对象自身的属性和方法。方法是一个特殊方法,用于初始化类的实例对象。将传入的参数赋值给实例对象的属性。在这个示例中,我们定义了一个名为。在这个示例中,我们定义了一个名为。来访问实例对象的属性。,并分别传入了不同的参数。来访问实例对象的属性。来访问实例对象的属性,使用。的类实例时,实际上是将。来调用实例对象的方法。在类的实例化过程中,

2024-07-06 09:48:33 283

原创 ROS2话题通信之自定义消息(Python)

Python文件中导入自定义消息相关的包时,为了方便使用,可以配置VSCode中settings.json文件,在文件中的python.autoComplete.extraPaths和python.analysis.extraPaths属性下添加一行:"${workspaceFolder}/install/base_interfaces_demo/local/lib/python3.10/dist-packages"添加完毕后,代码可以高亮显示且可以自动补齐,其他接口文件或接口包的使用也与此同理。

2024-07-05 19:06:46 471

原创 ROS2话题通信之自定义消息(C++)

C++文件中包含自定义消息相关头文件时,可能会抛出异常,可以配置VSCode中c_cpp_properties.json文件,在文件中的 includePath属性下添加一行:"${workspaceFolder}/install/base_interfaces_demo/include/**"添加完毕后,包含相关头文件时,就不会抛出异常了,其他接口文件或接口包的使用也与此同理。

2024-07-05 19:05:59 1049

原创 ROS2话题通信自定义接口消息

msg接下来,我们可以参考案例2编译一个msg文件,该文件中包含学生的姓名、年龄、身高等字段。

2024-07-05 19:05:08 149

原创 ROS2话题通信之原生消息(Python)

在Python功能包中,配置文件主要关注package.xml与setup.py。当前工作空间下,启动两个终端,终端1执行发布程序,终端2执行订阅程序。需要说明的是和上一节C++实现一样。最终运行结果与案例1类似。在本案例中不是必须的。

2024-07-05 12:04:31 228

原创 ROS2话题通信订阅方实现

功能包cpp01_topic的src目录下,新建C++文件demo02_listener_str.cpp,并编辑文件。

2024-07-05 10:55:25 195

原创 ROS2话题通信发布方实现

需求:以某个固定频率发送文本“hello world!”,文本后缀编号,每发送一条消息,编号递增1。使用ROS2的Publisher类实现话题通信发布方。4.调用spin函数,并传入节点对象指针;2.初始化 ROS2 客户端;3-3.组织消息并发布。3-1.创建发布方;3-2.创建定时器;

2024-07-04 19:36:35 707

ROS AGV仓库管理智能搬运车

在工业AGV的应用场景中,结合学习与工作经验,AGV的导航与定位方式多种多样,例如有视觉、雷达、二维码、磁道航等多种方式。在AGV应用场所应用多样化的今天,AGV的导航手段也是向着多传感器定位导航去发展,因为多传感器能互相弥补缺点,实现更高的精度,使AGV在应用坏境中的可靠性,而本文则分别使用了雷达、视觉AR与磁导航来共同实现。 雷达激光SLAM在AGV领域是偏高端的技术,优点在于其对光照无要求、现场无痕和定位准确度高等,在导航前重要的一步就是要建一个高精度的地图,各导航算法的优缺点与优化这也是难点之一。在导航过程中工业机器人一般都会选择使用rosbag录制好各任务的路径,而在本文中,为突出AGV的路径规划能力,选择了自主导航到点,这其中就需要考虑AGV的全局与局部路径规划,全局与局部路径规划直接的算法优化与选择搭配,也是本文重之一。 AR标签识别是我我根据实际小车的导航误差,加到文中减少误差的一种方案,AGV通过导航到达AR标签二维码附近,AGV摄像头读码的范围较大,当AGV读到AR标签后,利用AR标签的跟随功能,AGV小车会再次调整位置,实现减少误差的功能。

2024-05-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除