
ROS
文章平均质量分 85
ROS1、ROS2从入门到放弃
优惠券已抵扣
余额抵扣
还需支付
¥69.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
艺高机器人编程
没有人不爱惜他的生命,但很少有人珍视他的时间!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【ROS】郭老二博文之:ROS目录
ROS学习汇总目录,内容包括:从ROS1到ROS2、从安装、配置、编辑、编译、运行、代码详解等原创 2023-06-10 15:37:52 · 2697 阅读 · 0 评论 -
【Docker】RK3576-Debian上使用Docker安装Ubuntu22.04+ROS2
RK3576自带Debian12系统,如果要使用ROS2,可以在Debian上直接安装ROS2,缺点是有的ROS包需要源码编译;当然最好是使用Ubuntu系统,可以使用Docker安装,或者构建Ubuntu系统,替换Debian系统。推荐使用Docker来安装Ubuntu22.04,这里会有个疑问,是否可以直接使用Docker安装ROS2呢?在电脑上可以,有ROS2镜像;在嵌入式开发板上,似乎没有,本人没有找到。原创 2025-08-02 10:25:59 · 56 阅读 · 0 评论 -
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
Nav2行为树节点分类与应用 行为树节点分为四大类:1)动作节点(Action)执行具体任务如导航和路径规划;2)条件节点(Condition)进行状态判断;3)控制节点(Control)管理执行流程;4)装饰节点(Decorator)修饰子节点行为。每类包含多个功能节点,如NavigateToPose(全局导航)、FollowPath(局部路径跟踪)、Sequence(顺序执行)等。节点可通过参数配置适应不同场景,构建灵活可靠的机器人行为逻辑。源码实现位于nav2_behavior_tree模块,包含Ba原创 2025-06-10 22:07:24 · 194 阅读 · 0 评论 -
【ROS2】创建单独的launch包
项目中,可以创建单独的launch包来管理所有的节点启动。在目录中创建文件:robot.launch.py。1)创建launch包(python)3)添加到setup.py中。先创建目录:launch。原创 2025-05-29 21:08:20 · 103 阅读 · 0 评论 -
【ROS2】Qt Debug日志重定向到ROS2日志管理系统中
本文介绍了Qt与ROS2日志系统的集成方法。主要内容包括:1)通过qInstallMessageHandler将Qt日志重定向到ROS2日志系统;2)日志格式化输出,添加文件名、行号等信息;3)使用QLoggingCategory实现日志分类控制;4)ROS2日志级别设置方法;5)配置ROS2日志输出格式;6)日志文件存储路径设置;7)使用logrotate管理日志文件大小和数量。这些方法可以帮助开发者更好地管理和调试Qt与ROS2混合开发的应用程序。原创 2025-05-29 21:01:18 · 396 阅读 · 0 评论 -
【ROS2】使用ROS2接口时,对抛异常的处理
ROS2 C++接口异常处理与调试方法 摘要:ROS2 C++开发中常见异常包括节点初始化失败、参数无效等,均继承自std::exception。关键异常类型有RCLError(底层错误)、InvalidArgumentException(参数错误)等。典型异常场景包括重复初始化ROS、非法节点名创建等。建议封装safeExecute模板函数统一处理异常,通过try-catch捕获并记录错误。调试时可使用--cmake-args -DCMAKE_BUILD_TYPE=Debug参数编译Debug版本。默认编原创 2025-05-29 19:06:58 · 82 阅读 · 0 评论 -
【ROS2】RViz2源码分析(九):RosClientAbstraction和RosNodeAbstraction的关系
在分析RViz2源码时,重点关注了其如何创建和使用rclcpp::Node。RViz2通过“ROS客户”抽象类RosClientAbstraction初始化ROS2并创建rclcpp::Node节点,该节点被封装在“ROS节点”抽象类RosNodeAbstraction中。RosNodeAbstraction继承自接口类RosNodeAbstractionIface,实现了获取节点、节点名称和话题映射表的功能。VisualizerApp类作为程序主类,通过弱指针node_调用rclcpp::Node的接口,原创 2025-05-18 22:48:10 · 162 阅读 · 0 评论 -
【ROS2】ROS节点启动崩溃:rclcpp::exceptions::RCLInvalidArgument
在启动ROS节点时,若出现崩溃并抛出RCLInvalidArgument异常,通常是由于以下原因之一: 未初始化ROS2:在使用rclcpp接口前未调用rclcpp::init(argc, argv),导致上下文为空。 过早释放资源:在调用rclcpp::shutdown()后继续使用rclcpp接口,导致上下文已关闭。 节点已销毁:在节点对象销毁后仍尝试使用其上下文,导致操作失败。 解决方法包括确保正确初始化ROS2、避免在shutdown后使用接口,以及确保节点对象在有效作用域内使用。原创 2025-05-15 23:40:37 · 272 阅读 · 0 评论 -
【ROS2】编译Qt实现的库,然后链接该库时,报错:/usr/bin/ld: XXX undefined reference to `vtable for
在ROS2工程中编译使用Qt实现的库时,可能会遇到未定义信号函数的链接错误,原因是CMakeLists.txt未正确配置元编译(moc)处理。解决方法包括启用Qt相关编译器(如CMAKE_AUTOMOC),确保头文件和源文件被正确添加到编译列表中,并使用qt5_wrap_cpp手动指定需要moc处理的头文件。此外,检查生成的moc文件是否存在,并确保在编译命令中启用详细输出以验证moc是否执行。其他可能的原因包括缺少必要的Qt宏(如Q_OBJECT)或CMake缓存未清空,建议删除build和install原创 2025-05-15 22:31:58 · 347 阅读 · 0 评论 -
【ROS】将Qt的Pro工程转换到ROS2的colcon
本文介绍了如何将Qt的Pro工程文件转换为ROS2的colcon构建工程。首先,Qt5默认使用qmake管理项目,而ROS2的colcon基于CMake,因此需要先将Qt的Pro工程文件转换为CMakeLists.txt文件。转换过程中需注意处理头文件和源文件列表中的注释问题。接着,将生成的CMakeLists.txt文件修改为ROS2风格,包括创建ROS2包、合并Qt的CMake配置、添加Qt库依赖、设置C++标准、处理预编译头文件等。最后,通过调整编译参数和安装路径,确保程序能够在ROS2环境中正常运行原创 2025-05-14 23:45:17 · 345 阅读 · 0 评论 -
【ROS2】Nav2源码之行为树定义、创建、加载
Nav2中定义行为树节点、创建行为树、加载运行行为树原创 2025-05-07 21:29:03 · 486 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(六):各种各样的节点
1)否操作 Inverter如果子项失败则返回 SUCCESS,如果子项成功则返回 FAILURE。如果子节点返回 RUNNING,则该节点也返回 RUNNING。2)强制成功 ForceSuccess如果子节点返回 RUNNING,则该节点也返回 RUNNING。否则,它总是返回 SUCCESS。3)强制失败 ForceFailure如果子节点返回 RUNNING,则该节点也返回 RUNNING。否则,它总是返回 FAILURE。4)重复执行 Repeat。原创 2025-04-15 22:41:49 · 302 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(五):详细学习端口和黑板
参数固定为:const std::string& name, const NodeConfig& config使用工厂方式创建节点时,指定name即可;如果需要通过构造函数传入更多的参数,可以使用下面的方法使用工厂方式创建节点时,除了指定name外,还需要设置另外两个参数;注意:const NodeConfig& config,不需要设置。原创 2025-04-15 22:10:53 · 179 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(四):组合使用子树
如下图,左边为大树主干:1)如果门没有关,直接通过;2)如果门关闭了,执行开门动作,然后通过右边为子树,主要任务是开门1)尝试直接开门;2)尝试开锁开门,最多尝试5次;3)最后尝试砸门!XML如何描述大树主干调佣子树:使用关键字 SubTree 来调用子树</</</</</</</</原创 2025-04-14 23:31:49 · 394 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(三):异步操作
前面的例子中,使用过同步节点 SyncActionNode,当调用到该节点时,成功返回SUCCESS,失败返回FAILURE,并且线程会等待该节点执行完毕。如果需要异步操作,比如节点执行需要很长时间,不能立刻返回结果,可以先去执行其它任务,等该节点执行完毕再返回。可以继承 StatefulActionNode 节点,来实现异步操作。原创 2025-04-14 21:57:38 · 160 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(二):传递参数(黑板和端口)
输入、输出端口的参数类型,可以是内置类型:std::string、double、int等。注意:double、int等类型,是自动从字符串转化而来(convertFromString)。自定义类型如何在行为树节点的输入、输出使用呢?例如:自定类结构体double x;double y;使用模版特化StringView是std::string_view的 C++11 版本。可以传递 std::string或 const char*原创 2025-04-14 19:20:57 · 262 阅读 · 0 评论 -
【ROS2】行为树 BehaviorTree(一):简介
编写第一个行为树程序,完成充电指令:1)检查电量:使用普通函数,注意返回值类型为 BT::NodeStatus2)打开、关闭充电夹:使用成员函数,同样返回值类型为 BT::NodeStatuspublic:3)找到充电位:通过继承动作节点BT::SyncActionNode,重载 tick() 函数来实现public:{}原创 2025-04-12 23:23:47 · 581 阅读 · 0 评论 -
【ROS2】SLAM入门:gmapping建图、导航测试记录
测试gmapping建图 和 导航功能。这篇博客详细记录建图和导航的使用步骤,下篇博客会详细分析源码。原创 2025-02-24 18:51:27 · 1042 阅读 · 0 评论 -
【ROS2】卡尔曼滤波学习:概念、数学推导和C++实现方法
卡尔曼滤波器,Kalmen Filter;是一种递归滤波算法:最优化 递归 数字处理 算法。广泛应用于统计学、信号处理、控制工程等领域,如导航系统(GPS、惯性导航系统)、自动驾驶、金融市场(股票价格预测与风险管理)、机器人控制等领域中的各种不确定性。卡尔曼滤波器的核心思想是通过递归地利用系统的动态模型和测量数据,来估计系统的状态并更新对系统状态的不确定性(即误差协方差矩阵)。简单点说就是:预测 + 测量 → 最优估计预测:根据之前的水温(比如20°C)和加热速度,预测当前温度。原创 2025-02-21 22:33:40 · 224 阅读 · 0 评论 -
【ROS2】第三方库学习:Eigen(线性代数:矩阵、向量)
Eigen 是一个用于线性代数的 C++ 模板库:矩阵、向量、数值求解器和相关算法。3)Eigen 经过严格测试可靠性高。4)Eigen 接口简洁、易于使用。5)官网主页:https://eigen.tuxfamily.org/index.php?入门:https://eigen.tuxfamily.org/dox/GettingStarted.html教程:https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html。原创 2025-02-20 16:35:10 · 384 阅读 · 0 评论 -
【ROS2】RViz2源码分析(八):Display中订阅ROS2消息(使用Qt信号和槽传递ROS2消息)
本篇博客,将会一起学习 RViz2 中如何使用 ROS2,以 Display 中订阅 ROS2 消息为例。原创 2025-02-20 08:52:16 · 327 阅读 · 0 评论 -
【ROS2】RViz2源码分析(七):DisplaysPanel 中的树状模型/视图
既然是树状结构,应该有一个根节点,类型为 DisplayGroup ,它继承自Display ,它的子节点也是各种各样的 Display。Property 属性的 aboutToChange() 和 changed() 信号,会在属性的数值发生变化事触发,接收 changed() 信号的槽函数随后应向属性本身询问新的数据。继承自 Property 的子类,包含的数据类型可以是各种各样的,因此使用 QVariant 类型来存储,可以调用 Property::setValue() 方法来存储数据。原创 2025-02-15 22:42:13 · 212 阅读 · 0 评论 -
【ROS2】RViz2源码分析(六):加载配置、创建面板(以DisplaysPanel为例)
RViz2在界面中,也可以通过点击“Panel”–> “Add New Panel” 按钮,触发 VisualizationFrame::openNewPanelDialog() 函数来加载Panel(VisualizationFrame::addPanelByName())VisualizationFrame::addPanelByName()函数中,通过工厂类创建面板(Panel):PanelFactory;,配置文件的Panels字段描述了各个面板,以 DisplaysPanel 为例,原创 2025-02-10 22:02:53 · 171 阅读 · 0 评论 -
【ROS2】RViz2自定义面板插件(rviz_common::Panel)的详细步骤
RViz2 使用 QT 作为 UI 框架,虽然 QT 也有插件机制,但是 RViz2 并没有使用QT的插件机制,而是通过 pluginlib 加载功能模块来实现。原创 2025-02-08 22:59:18 · 439 阅读 · 0 评论 -
【ROS2】IMU参数详解、数据计算
IMU硬件参数详解,ROS2中使用注意事项:去掉重力分量、注意零漂带来的累积误差原创 2025-02-07 19:15:00 · 344 阅读 · 0 评论 -
【ROS2】RViz2源码分析(五):界面类 VisualizationFrame 详解
VisualizationFrame 继承自 QMainWindow 和 WindowManagerInterface;窗口顶部是常规布局:菜单栏 和 工具栏窗口中心是 RenderPanel,用来渲染3D画面周围是dock区域,包括:DisplaysPanel、ViewsPanel、TimePanel、SelectionPanel 和 ToolPropertiesPanelWindowManagerInterface 是管理各种停靠面板的接口抽象类。原创 2025-01-25 18:00:00 · 187 阅读 · 0 评论 -
【ROS2】RViz2源码分析(四):初始化、启动
详细介绍RViz主函数中初始化 VisualizerApp::init() 函数的内容原创 2025-01-23 19:00:00 · 207 阅读 · 0 评论 -
【ROS2】SLAM算法汇总
激光 SLAM 框架一般分为前端扫描匹配、后端优化、闭环检测、地图构建四个关键模块。SLAM算法汇总、比较……原创 2025-01-16 17:09:06 · 300 阅读 · 0 评论 -
【ROS2】动态组件 ros2 component 详解
动态组件继承自rclcpp::Node,本身也是节点。因为组件不能控制线程,所以其构造函数里不能进行占用时间太长的或者是阻塞的任务。然而它可以使用计时器(tmier)来获取周期性的节律,除此以外它还可以创建publisher,subscriber,server,client等等。原创 2025-01-15 19:19:21 · 185 阅读 · 0 评论 -
【ROS2】数据记录(ros2 bag)详解
ros2 bag 用于记录、回放、分享ROS2消息。原创 2025-01-14 20:23:45 · 372 阅读 · 0 评论 -
【ROS2】URDF导入Gazebo中
spawn_entity.py通过接收命令行参数或ROS话题消息来确定要加载的模型及其初始状态(如位置、姿态等),然后调用Gazebo的服务将这些信息发送给gzserver,由gzserver负责将新实体集成到仿真环境中。gzserver使用物理引擎来模拟现实世界中的物理行为,如重力、碰撞检测等,并生成相应的传感器数据,以供客户端或其他系统使用。启动消息接收节点 spawn_entity.py,接受 robot_description 消息,然后调用Gazebo的服务将这些信息发送给gzserver。原创 2025-01-14 15:45:00 · 842 阅读 · 0 评论 -
【ROS2】URDF模型文件中Xacro宏语言详解
属性类似于变量,定义方法如下:例如定义轮子半径、小车的尺寸、PI值。宏定义:类似于函数实现,可以提高代码复用率和优化代码结构。使用 xacro:macro 标签来定义函数, 标签中的属性name表示函数名原创 2025-01-10 19:22:08 · 210 阅读 · 0 评论 -
【ROS2】RViz2加载URDF模型文件
1)运行RViz2rviz22)添加组件:RobotModel3)选择通过文件添加4)选择URDF文件,此时会报错,需要修改Fixed Frame为map即可原创 2025-01-09 20:28:35 · 862 阅读 · 0 评论 -
【ROS2】gazebo打开文件夹选择框时,卡主不动的解决方法
运行 gazebo 后,想从文件中加载URDF,在点击“insert” --> Add Path 时,界面卡主,文件夹窗口也没有出现。原创 2025-01-09 19:21:34 · 381 阅读 · 0 评论 -
【ROS2】从零开始使用URDF构建机器人
1)创建目录2)创建ROS包URDF不依赖其它ROS2包,可以不使用 --dependencies 来指定3)创建urdf目录一般URDF文件放置在urdf目录中,因此先创建urdf目录4)进入urdf目录后,建议使用vscode编辑urdf文件5)在vscode中安装URDF插件。原创 2025-01-08 21:13:55 · 620 阅读 · 0 评论 -
【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行,例如:Qt的和 ROS的两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。原创 2025-01-08 20:04:20 · 497 阅读 · 0 评论 -
【ROS2】APOLLO、CyberRT、AutoSAR、autoware简介
1)定义与目标AUTOSAR是一个全球性的标准组织,旨在制定汽车电子控制单元(ECU)的开放式和标准化软件架构。其目标是降低复杂性,提高软硬件的可重用性,以及适应快速变化的汽车电子需求。2)合作框架AUTOSAR组织提供了一个合作框架,促进汽车制造商、供应商和工具供应商之间的合作,以共同推动汽车软件的标准化。原创 2025-01-07 19:43:15 · 411 阅读 · 0 评论 -
【ROS2】坐标TF查询
ROS2坐标监听者示例: tf2_ros::TransformListener原创 2024-12-25 18:54:45 · 329 阅读 · 0 评论 -
【ROS2】坐标TF发布(动态)
ROS2发布动态坐标:tf2_ros::TransformBroadcaster原创 2024-12-25 18:55:08 · 193 阅读 · 0 评论 -
【ROS2】坐标TF发布(静态)
静态广播:tf2_ros::StaticTransformBroadcaster原创 2024-12-24 19:45:00 · 270 阅读 · 0 评论