自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 git reset --hard以后如何恢复

命令时,你将本地仓库的状态强制重置到指定的提交,并且会丢失从那个提交之后的所有更改。这是不可逆的,除非你有备份或者能够找到其他方式来恢复丢失的数据。如果你不想覆盖当前分支的历史,你可以创建一个新的分支来保存这些更改。如果你已经恢复到了正确的提交,你可以查看所有未暂存的更改。命令会显示你的 HEAD 的历史,包括所有的。这将列出所有HEAD的变动记录,包括你执行。一旦你找到了正确的提交哈希,你可以使用。你可以在这里找到你丢失的提交。这将显示所有未暂存的更改。命令来恢复到那个提交。替换为你的新分支名称。

2024-09-10 22:48:29 1123

原创 gitk- Git 分布式版本控制

gitk是 Git 分布式版本控制系统的图形化工具,用于查看仓库的提交历史、分支和合并情况。它是一个非常有用的工具,可以帮助你更直观地理解项目的版本历史。

2024-09-03 16:11:02 443

原创 cherry-pick

是 Git 版本控制系统中的一个命令,用于将一个或多个特定的提交从一个分支应用到当前分支。这个命令非常有用,尤其是在你想要将某些特定的更改从一个分支合并到另一个分支时,但又不想合并整个分支。以下是这里是你想要应用到当前分支的提交的哈希值。这会将从到之间的所有提交应用到当前分支。这会应用之前的提交,但不包括。使用-s选项可以开始一个 cherry-pick 序列,这对于自动化脚本非常有用。默认情况下,cherry-pick 会使用原始提交的消息。使用。

2024-09-03 16:07:37 969

原创 函数签名(Function Signature)

函数签名(Function Signature)是编程中用来描述函数特征的一种方式,它包括了函数的名称、参数列表(包括参数类型和参数名称)以及返回类型。函数签名使得程序员能够明确地知道如何调用一个函数,以及调用这个函数时应该提供哪些信息。函数签名通常不包括函数的实现细节,也就是说,它不包含函数内部的代码,只包含函数的接口信息。这有助于在不同的代码模块之间进行接口的声明和调用,而不需要关心具体的实现。函数签名(Function Signature)是指在编程语言中,用于定义函数特征的一系列信息。

2024-08-31 15:37:57 648

原创 rclcpp::spin() 和 rclcpp::shutdown()

在ROS 2中,和是用于管理节点事件循环的标准函数,它们通常在主线程中使用,以确保节点能够持续处理传入的消息、服务请求和定时器事件。函数会阻塞调用它的线程,直到与它关联的节点被销毁。与类似,也处理回调和事件,但它是非阻塞的。它会处理所有待处理的回调,然后立即返回。这允许在相同的线程中同时运行ROS回调和其他循环或任务。函数用于关闭ROS 2的通信机制,并清理资源。

2024-08-31 15:24:19 803

原创 std::unique_lock

在多线程编程中,是一个比更灵活的互斥锁管理工具。它提供了对互斥锁的高级控制,包括延迟锁定、定时锁定和尝试锁定等。

2024-08-31 15:21:11 499

原创 rclcpp::Rate

是ROS 2中用于控制循环执行速度的工具。它允许你指定一个循环应该以多快的频率执行,通常用于控制循环的更新率或发布率。对象在每次迭代结束时调用其sleep()方法,以确保循环以设定的频率运行。

2024-08-31 15:00:03 427

原创 为什么要新建一个线程?

在ROS中,创建新线程的另一个原因是为了实现实时性要求。ROS节点通常需要处理来自不同源的数据,并在严格的时间约束下执行。

2024-08-31 14:13:45 345

原创 std::condition_variable

是 C++ 标准库中的一个类,它用于线程间的同步。允许一个或多个线程等待某个条件的发生,而其他线程可以唤醒等待的线程。它通常与一起使用,以保护共享数据并同步线程。

2024-08-31 14:07:22 398

原创 geometry_msgs

类型结合使用,后者提供了时间戳和参考坐标系(frame_id),以确保信息的准确性和一致性。这些消息类型是ROS中进行节点间通信的基础,使得机器人的不同部分能够共享和理解彼此的状态和意图。这些类型在ROS中用于描述机器人的位置、方向、速度、加速度等几何属性。包提供了多种用于描述几何形状和运动的数据类型。

2024-08-31 11:35:11 1154

原创 rclcpp::QoS

在ROS 2(Robot Operating System 2)中,(Quality of Service)是用于设置消息传递质量的策略。它允许开发者根据应用需求来调整消息传输的可靠性和性能。类提供了多种设置,以确保消息在发布者和订阅者之间正确、高效地传输。

2024-08-31 11:31:53 637

原创 std::thread

是 C++ 标准库中的一个类,它定义于<thread>头文件中,用于创建和管理线程。在 C++11 及更高版本中,提供了一种简单而直接的方式来创建并行执行的线程,使得多线程编程更加方便。

2024-08-31 11:28:52 300

原创 c++对象模式——bind

std::bind绑定参数:你可以将函数的部分参数或全部参数绑定为固定的值,或者指定占位符(如等)表示未来的参数。创建可调用对象std::bind返回一个可调用的函数对象(function object),它封装了原始函数及其绑定的参数。这个函数对象可以像普通函数一样被调用。延迟执行:通过std::bind创建的函数对象在调用时,原函数才会执行,使用绑定时指定的参数或调用时提供的参数。std::bind模板参数与类型推导std::bind通过模板参数来支持不同类型的函数和参数。占位符机制。

2024-08-12 21:29:20 214

原创 explicit用法

在 C++ 中,关键字explicit用于声明一个构造函数或转换操作符,以防止隐式类型转换或复制初始化。以下是explicit。

2024-07-22 15:16:43 363

原创 行为树节点的输入输出

在行为树(Behavior Tree)框架中,节点的输入和输出是实现节点间通信的关键机制。节点可以通过黑箱(Blackboard)来获取输入和提供输出。以下是一些基本的输入输出函数和示例。

2024-07-19 18:55:42 482

原创 std::atomic_bool

定义并初始化一个// 初始化为 false。

2024-07-19 17:53:39 906

原创 ROS里面的Blackboard用法

在ROS(Robot Operating System)中,行为树是一种用于控制机器人行为的算法结构,它允许开发者以树状的形式组织任务和决策。行为树由一系列节点组成,每个节点代表一个行为或者决策。这些节点可以是顺序执行的,或者是根据条件进行选择执行的。“Blackboard”(记事板)在行为树的上下文中通常指的是一个共享的数据存储,用于在树中的不同节点之间传递信息和状态。它允许节点读取输入数据,执行任务,并输出结果,这些数据可以被其他节点访问和使用。

2024-07-19 15:05:25 392

原创 rclcpp::Clock

的好处是它提供了一个抽象层,允许你以一种与ROS时间紧密集成的方式处理时间。这使得代码更加可移植,因为你可以在不同的时间源之间切换而不必修改使用时间的代码逻辑。是一个提供了时间获取功能的类,用于在节点中获取当前时间或计算时间差。ROS 2使用RCL(ROS Client Library)作为其底层通信机制,而。对象,表示当前的时间,具体是哪种时间取决于。在ROS 2(机器人操作系统2)中,是RCL的C++ API封装。

2024-07-19 15:01:34 599

原创 ROS(机器人操作系统)中的坐标系

当有多个机器人的时候,每个机器人都有自己的map坐标系,他们之间的map坐标系并不相同。World坐标系与Map坐标系的方向是相同的,都是静态的,不会发生旋转和平移等改变。ROS给出了推荐的坐标系取法,其中x轴指向机器人前方,y轴指向机器人左方,z轴指向机器人上方。这些坐标系之间的转换是通过ROS中的tf(Transform)库来管理的,它维护了一个坐标变换的树状结构,允许节点查询和发布坐标系之间的变换关系。:通常用作机器人的“底部”坐标系,位于机器人的底部中心,有时用于避障和导航算法。

2024-07-19 15:00:25 714

原创 rclcpp::Duration( std::chrono::nanoseconds((int)(control_delay_ * 1e9)))

这段代码是一个典型的时间处理操作,通过将秒转换为纳秒,并创建一个表示这个时间间隔的对象。这对于时间敏感的控制算法和系统调度非常重要。

2024-07-18 10:56:14 662

原创 geometry_msgs::msg::PoseStamped和geometry_msgs::msg::Twist

在 ROS(Robot Operating System)中,是一个非常基础的消息包,它定义了一些常用的几何类型。和Twist是其中两个常用的消息类型,通常用于机器人导航和运动控制。

2024-07-18 10:41:58 984

原创 那些类有reset方法

的一部分,用于释放它们管理的对象。以下是一些常见的类,它们拥有。

2024-07-18 10:39:37 111

原创 dynamic_pointer_cast

是 C++ 中的一个操作符,它用于将基类类型的shared_ptr转换为派生类类型的shared_ptr。它类似于 C++ 里的,但专门用于智能指针。

2024-07-18 10:34:43 681

原创 `WeakPtr` 的 `lock()` 成员函数

的目的是在需要使用原始对象的时候,能够安全地获取一个强引用。成员函数,尝试获取一个强引用(strong pointer)到所指向的对象。弱引用是一种智能指针,它指向一个对象,但不拥有该对象,因此不会影响对象的生命周期。: C++11 引入的类型推导关键字,它让编译器根据赋值表达式的右侧来自动推导出变量。类型的参数,这个参数是一个弱引用(weak pointer)到一个生命周期节点(来获取节点的名称和日志记录器,因为这些操作需要一个有效的对象引用。将是一个有效的强引用,可以安全地使用;指向的对象已经被销毁,

2024-07-17 14:41:36 320

原创 tf2_ros::Buffer

创建智能指针使用来创建一个的智能指针。获取变换使用成员函数来查询两个坐标系之间的变换。发布变换使用transform消息类型和advertise函数来发布变换信息。订阅变换使用subscribe函数订阅变换信息。缓存管理可以配置缓存大小和超时时间,以优化性能。

2024-07-17 14:35:41 677

原创 deactivate、cleanup和 shutdown`区别

在计算机科学和操作系统中,特别是在节点的生命周期管理中,deactivatecleanup和shutdown是三个不同的操作,它们各自有不同的含义和用途。

2024-07-17 14:30:39 365

原创 两个概率分布之间的差异描述

KL散度是衡量两个概率分布 ( P ) 和 ( Q ) 差异的一种方法,它是非对称的,即 ( D_{\text{KL}}(P \parallel Q) \neq D_{\text{KL}}(Q \parallel P) )。其中 ( \Pi(P, Q) ) 是 ( P ) 和 ( Q ) 之间的所有联合分布的集合,( X ) 和 ( Y ) 是从这些联合分布中抽取的随机变量。其中 ( \overline{P} ) 和 ( \overline{Q} ) 是 ( P ) 和 ( Q ) 的期望值。

2024-07-17 14:23:37 627

原创 std::optional

是一个非常有用的类型,它用于封装一个可能不存在的值。它提供了一种安全的方式来处理可能为空的值,避免了使用。通过这些基本用法,你可以在 C++ 中更安全、更灵活地处理可能为空的值。在 C++17 中,

2024-07-17 14:01:04 1710

原创 xtensor 简介

xtensor是一个用于数值分析的 C++ 库,它提供了多维数组表达式的功能。延迟广播(Lazy Broadcasting):提供了一个可扩展的表达式系统,允许延迟计算。符合 C++ 标准库的 API:其 API 设计遵循 C++ 标准库的惯例。数组表达式操作工具:提供了工具来操作数组表达式,并在xtensor基础上进行构建。xtensor的容器设计灵感来自于 Python 的 NumPy 库。它还支持通过 Python 的缓冲协议直接处理 NumPy 数据结构。此外,xtensor。

2024-07-17 13:49:09 622

原创 行为树(BehaviorTree.CPP)基本端口教程

在 BehaviorTree.CPP 中,自定义的树节点(TreeNodes)可以用来执行任意简单或复杂的软件。它们的目标是提供一个更高级别的抽象。因此,从概念上讲,它们与函数并没有本质区别。向节点(Node)传递参数(输入从节点获取一些信息(输出一个节点的输出可以作为另一个节点的输入BehaviorTree.CPP 提供了一个通过端口(Ports)进行数据流的基本机制,这个机制既简单易用,又灵活且类型安全。

2024-07-17 11:47:50 879

原创 LifecycleNode简介

是一个特殊的节点类型,用于管理节点的生命周期状态。它提供了一种机制来控制节点的启动、运行、停止、未响应和最终的销毁过程。这对于需要管理复杂状态和行为的节点特别有用,比如机器人控制器、传感器处理节点等。在ROS(Robot Operating System)中,

2024-07-16 16:22:47 544

原创 git submodule update`

当你指定了子模块的名称作为参数时,这个命令只会更新指定的子模块。这允许你只对特定的子模块进行更新,而不是所有子模块。这个命令不带任何参数,它会更新所有子模块到它们的远程仓库中的最新提交。这相当于对所有子模块执行了。命令用于更新子模块到它们当前的提交状态。例如,如果你的项目中有多个子模块,并且你只想更新名为。子模块,而不影响其他子模块。

2024-07-15 10:16:46 619

原创 “小驼峰“(camelCase)和“大驼峰“(PascalCase)

然而,这并不是所有团队或项目都遵循的规则,不同的项目可能有不同的编码标准和命名约定。非私有函数是类的公共接口的一部分,可以被类的外部访问。使用大驼峰命名法可以使这些函数的名称看起来更加正式和重要,因为它们是类的外部接口的一部分。在编程中,“小驼峰”(camelCase)和"大驼峰"(PascalCase)是两种不同的命名约定,主要用于变量、函数、类等的命名。你提到的这种命名约定是一种常见的编程风格,尤其是在C++和Java这样的语言中。这两种命名约定在不同的编程语言和项目中有不同的使用偏好。

2024-07-11 16:37:24 1409 2

原创 函数指针和指针函数区别

在C/C++中,我们通常只使用“函数指针”这个概念,它允许我们将函数作为一等公民(first-class citizen)来对待,这意味着函数可以像其他变量一样被赋值、传递和返回。而“指针函数”并不是一个标准的术语,可能是对函数指针概念的一个误称或者混淆。

2024-07-11 16:26:17 175

原创 行为树例子2

根据提供的XML行为树结构,以下是业务逻辑的描述和对应的C++代码实现。

2024-07-11 13:42:20 344

原创 行为树基础教程:创建你的第一个行为树

/ 示例的自定义同步动作节点public:{}// 必须重写tick()虚拟函数任何TreeNode实例都有一个name。这个标识符旨在易于人类阅读,且不需要是唯一的。tick()方法是实际动作发生的地方。它必须始终返回一个NodeStatus,即RUNNING、SUCCESS或FAILURE。或者,我们可以使用依赖注入来创建TreeNode,给定一个函数指针(即“functor”)。

2024-07-11 12:33:20 479

原创 ROS2 行为树解析(4)序列节点(SequenceNode)

Sequence节点适合于需要顺序执行任务的场景,ReactiveSequence节点适合于需要连续检查条件并响应的场景,而SequenceWithMemory节点适合于需要访问一系列点或执行任务但不需要重复执行的场景。序列节点(Sequence)会一直触发其所有子节点,只要它们返回成功(SUCCESS)。如果有任何一个子节点返回失败(FAILURE),序列将被中止。假设我们有一个游戏中的狙击手AI,需要先观察(Scanning),然后等待(Waiting),最后射击(Shooting)。

2024-07-11 12:26:57 1098

原创 ROS2 行为树解析(3) Fallback节点(回退节点)

Fallback节点使得行为树能够灵活地处理多种情况,并在遇到障碍时尝试不同的解决方案。通过使用Fallback和ReactiveFallback,开发者可以创建出能够适应不同环境和条件的智能AI行为。在这个例子中,我们首先检查门是否开启,如果没有,则尝试使用钥匙打开门,如果还不行,最后尝试使用撬棍。ReactiveFallback节点用于当我们想要在前置条件的状态从失败变为成功时中断异步子节点。节点还在运行中,整个ReactiveFallback节点也会停止,因为已经达到了目标状态。

2024-07-11 11:53:22 908

原创 ROS2 行为树解析(2) 装饰器节点(DecoratorNode)

在BehaviorTree.CPP库中,装饰器节点(DecoratorNode)是一种特殊类型的节点,它,并且可以**控制、修改或扩展其子节点的行为。**

2024-07-11 11:46:26 1432

原创 ROS2 行为树解析(1)

根据提供的资源,以下是对BehaviorTree.CPP库的中文归纳和整理,包括不同类型的节点的对比表格。

2024-07-11 11:37:29 1390

空空如也

空空如也

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

TA关注的人

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