河北网站建设推广自己做的网站怎么发布视频教程
news/
2025/9/23 9:12:32/
文章来源:
河北网站建设推广,自己做的网站怎么发布视频教程,代做毕业设计网站,自适应营销网站一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是#xff0c;在我们转向实际的基于硬件的项目之前#xff0c;… 一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是在我们转向实际的基于硬件的项目之前将它们很好地结合起来理解 ROS2 是关键。 这是我们当前系列的议程— 第 1 部分开始使用新的 ROS2 项目 — 演示带有垃圾拾取机器人自定义包的样板 ROS2 项目 第 2 部分改进 ROS2 代码库 — 启动文件和 ROS 参数 第 3 部分通过测试改进项目 — 添加 ROS 测试基础架构 第 4 部分从业余爱好者到优质项目 — 在 Github 上为 CI/CD 添加 docker 二、垃圾捡拾机器人 — 以下是我们想要设计系统的方式 —
感知和解释 — 我们使用摄像头图像来查看机器人的附近对其进行处理并确定是否存在垃圾。该信息被转发到决策模块大脑。决定 — 决策模块大脑从感知和解释中获取垃圾存在信息并决定机器人是否应该采取行动。 如果大脑决定采取行动并移动机器人因为存在垃圾它会命令驱动模块这样做。行动 —根据大脑的命令驱动模块移动机器人例如使用电机去收集垃圾。 注意我们的朴素系统过于简单只关注 ROS2 设计。在本系列中我们不考虑核心机器人算法、控件开环/闭环或视觉。这将在后面的课程中完成我们将基于此处建立的基本 ROS2 思想。 我们将系统分为 3 个逻辑组件——感知、大脑和驱动。 如果我们想象我们的软件设计我们应该有 3 个 ROS2 包因此是节点
感知 — 该节点将从机器人的摄像头获取输入图像并从中获取见解例如垃圾的存在。脑—— 该节点从感知模块获取见解处理此信息并通知致动模块下一步该做什么。 此外大脑通常只关心每一帧中感知的视觉信息。但偶尔大脑想知道感知相机的电池状态。驱动 — 该节点将命令伺服电机移动机器人的四肢。想象一下机器人走向垃圾桶捡起它移动到垃圾箱然后收集它。使用致动代码控制运动
大脑模块实际上就像人脑一样通过感觉器官感知接收信息并通过电机驱动指挥适当的动作。甜
接下来本系列的第 1 部分将重点介绍如何使用垃圾收集机器人的自定义包构建一个样板 ROS2 项目。
让我们建造好吗 三、ROS2 有何不同 — 总结 1. 第三方中间件 ROS1 与 ROS2DDS ROS1有自己的中间件它使用网络堆栈将信息从一个节点发送到正确的套接字中间件再次接收到信息以将信息发送到正确的节点过度简化。 ROS2抛弃了中间现在使用数据分发服务DDS这是一个可靠的行业标准的第三方中间件。 2. 没有玫瑰大师 Rosmaster是一项服务方便两个节点找到彼此如果它们希望通信。接下来是它们直接相互连接。如果 rosmaster 在此过程中死亡这些节点仍将连接但没有新节点可以加入通信网络。 在 ROS1 中每个节点都需要知道主节点的位置即使系统在多台机器上运行。 ROS2取消了rosmaster节点可以直接找到彼此。 3. Cpp 和 Python 的共享代码库 RCL ROS支持两种语言Cpp和Python底层实现在某些地方有所不同。例如每个订阅者在 Python 中都有自己的线程但在 Cpp.All 对于 ROS1 来说都是如此但 ROS2 具有相同的共享 C 实现。这个通用的代码库通过C和Python中的ROS客户端库API公开。 4. 一个进程中有多个ROS节点 ROS1不允许一个进程中有多个ROS节点。ROS2 中的变化 5. Python 构建要求 在 ROS1 中更改 Python 文件不需要您构建项目。ROS2 需要你重新构建项目这太糟糕了 6. 操作服务 操作服务 不是核心 ROS1 库的一部分而是 actionlib。ROS2 核心库具有操作服务器 7. 视窗支持 ROS2 是视窗支持的好吧我真诚地希望你正在使用Linux 。 8. 更改了启动基础结构 ROS1 主要使用基于 XML 的启动文件。ROS2 有一个支持排序约束的 python 启动系统
四、为什么要迁移到 ROS2 这是一个很难回答的问题。此举有一些惯性主要是因为 ROS2 社区仍然没有 ROS1 那么大。这导致更少的在线开发支持和更长的开发时间。 但大多数著名的开源 ROS1 软件包已经或将很快达到生命周期的终点。面向未来的项目和技能提升是采取行动的两个原因。
五、ROS2 设置
第 1 阶段安装 ROS2
在本课中我们使用 ubuntu Focal20.04.3 LTS它支持 ROS2 Galactic。 这里有一个链接可以很好地解释 ROS2 的安装。他们在解释安装:)方面比我做得更好
第 2 阶段测试 ROS2
为了测试我们的 ROS2 设置我们执行以下操作 1. 获取终端
source /opt/ros/$ROS_DISTRO/setup.bash
如前所述从今以后我将使用银河而不是$ROS_DISTRO
2. 运行演示监听器和说话者节点 我们将使用“/opt/$ROS_DISTRO/lib/”中已经存在的demo_nodes_cpp包
在源终端中运行以下命令
ros2 run demo_nodes_cpp listener ros2 run demo_nodes_cpp talker
您将看到以下内容
如果是我们可以确定我们的 ROS2 设置。 呜呜呜我们已经准备好在 ROS2 中开始开发。让游戏开始 转到本系列的第 2 部分 这里. 在第 1 部分中我们在 Gazebo 中设置了 TurtleBot3 模拟这构成了我们在 ROS 2 中所有移动机器人实验的基础。
下一步是什么 我们现在了解如何使用 Nav2 在 ROS 2 中设置自主导航。在 ROS 1 中我们使用了导航堆栈它是多个包的组合如 move_base、amcl 和地图服务器仅举几例。
但是 Nav2 是镇上新的酷人其中大多数软件包已经是其中的一部分并且功能增强。制造商希望将“ ROS导航带出实验室”或者简单地说使其具有生产质量。
六、我们如何在 ROS 2 中设置自主导航 为了回答这个问题我们先来看看一些机器人导航概念好吗
有一秒钟把自己放在机器人的鞋子里你要求自主移动。假设有人说——“哎呀搬到B位置
你会怎么做好吧我想问以下两个问题——
我在哪里位置 B 在哪里换句话说我的周围地图是什么样的
而这正是机器人真正需要的——
本地化 — 机器人在哪里映射 — 地图/世界是什么样的 从技术上讲这就是机器人大脑处理这些信息并决定移动所需要的。在这种情况下我们机器人的大脑是导航包。直观嗯 因此我们定义了导航所需的两条信息。
由于这仍然是一个基本的帖子让我们避免理论这很重要但稍后并转移到 ROS 2 中的 Nav2 包
正如我们所建立的Nav2需要机器人的当前位置和地图。 在 ROS/ROS2 中这转化为两个要求—
机器人定位 — 变换和变换map - odomodom - base_link
Nav2 的预期输入是符合 REP-105 的两个 TF 转换。
全球定位系统GPSSLAM运动捕捉的工作至少可以提供转换。通常这是 Nav2 的一部分用于此目的。map-odomamcl
测程系统的作用是提供-转换。里程计可以来自许多来源包括激光雷达、雷达、车轮编码器、VIO 和 IMU。测程法的目标是提供基于机器人运动的平滑和连续的局部框架。全球定位系统将更新相对于全局帧的变换以考虑测距漂移。odombase_link
机器人定位通常用于这种融合。它将采用各种类型的传感器并为TF和主题提供连续和平滑的测程。典型的移动机器人设置可能具有以这种方式融合的车轮编码器、IMU 和视觉的测程计。N
然后平滑输出可用于航位推算以实现精确运动并在全局位置更新之间准确更新机器人的位置。
地图 —在需要 SLAM同时定位和映射的应用程序中这是与导航并行完成的。但目前我们有兴趣使用静态地图因此我们已经知道周围的地图进行导航。在 ROS 2 中SLAM 工具箱可用于生成静态地图我们可以保存它以供导航。
如果这一切都有意义那就太棒了。如果没有请耐心等待。在下面的 ROS 2 中完成这项工作将澄清:)
从我内心深处我相信边建边学的策略。那么好吗
七、使用 TurtleBot2 模拟设置基于 ROS 3 的导航— 第 1 步 — 在凉亭中设置 ROS 2 和 TurtleBot3 以进行模拟 请查看我们的第 0 部分和第 1 部分以完成此操作如果您尚未完成
如果你这样做了你应该擅长在凉亭中运行TurtleBot3模拟。 第 2 步 — 设置本地化 首先在凉亭中运行 TurtleBot3 为 ROS 2 提供终端 —
source /opt/ros/galactic/setup.bash 转到我们在第 3 部分中构建的 TurtleBot1 包然后获取终端 —
source ./install/setup.bash 运行海龟机器人3世界模拟 —
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py 您应该看到模拟正在运行 — 现在打开另一个终端source ROS 2然后查找题目
ros2 topic list 看看有一个主题它给了我们测程值和转换。所以我们已经准备好了本地化对吧odomodom-base_link 好吧虽然我们将使用它但在一般情况下不完全是。 当您使用真正的机器人时这些测程值是嘈杂的并且容易漂移。因此我们需要使用机器人定位包将它们与其他传感器输出如 IMU本地和 GPS全球融合。 在我们的例子中odom 几乎没有任何噪声我还没有找到一种方法来增加模型的 odom 噪声而不在代码中重新发布。因此我们将使用它。 因此对我们来说本地化价值已经准备就绪。 步骤 3 — 设置静态地图 为此我们使用 ROS 2 中的 SLAM 工具箱
安装 SLAM 工具箱
sudo apt install ros-ros2-distro-slam-toolbox 我正在使用银河所以——
sudo apt install ros-galactic-slam-toolbox
启动用于映射的 slam 工具箱包 — 在一个新的终端中当然在采购 ROS 2 之后一定要这样做—
source /opt/ros/galactic/setup.bash
ros2 launch slam_toolbox online_async_launch.py
使用必要的可视化启动 Rviz2 在新终端中启动 rviz2
source /opt/ros/galactic/setup.bash
rviz2 添加以下内容以进行可视化
激光扫描 — 主题 可靠性政策/scanBest Effort地图 — 主题/mapTF 这是我的 Rviz 观点—— 运行远程操作以移动机器人进行映射 — 在一个新的终端中——
source /opt/ros/galactic/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
将 Gazebo 和 RViz 并排放置然后 teleop 查看在 RViz 中创建的地图 — 我通常会显着减慢机器人的速度以获得更好的地图
保存地图
在新终端中运行nav2_map_server
source /opt/ros/galactic/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/map 这会将地图保存在我们的主目录中map.pgm 和 map.yaml 那是映射。 而且。我们准备接下来导航 第 4 步 — 自主导航 请杀死slam_toolbox节点、远程操作节点和 RViz。我们不再需要它们了。此时只有 TurtleBot3 凉亭模拟应该运行
现在我们已经准备好本地化主题和映射我们保存的地图我们可以开始导航了/odom
启动导航 在一个新的终端中——
source /opt/ros/galactic/setup.bash
ros2 launch nav2_bringup bringup_launch.py use_sim_time:True autostart:True map:/path/to/your-map.yaml 这将设置自主导航所需的所有节点但会发出有关框架不存在的警告。我们会尽快解决这个问题。map 在另一个终端中启动 RViz但具有预设的可视化 —
source /opt/ros/galactic/setup.bashros2 run rviz2 rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz 房车视图 — 您将看到全局状态错误这是关于地图不可用。 问题是转换是由 amcl 发布的它是作为上述的一部分推出的。但需要一个初始姿势才能开始工作。map-odomnav2_bringupamcl 为此请单击上方工具栏上的“2D 姿势估计”绿色箭头之一并通过在 RViz 中的地图上单击并拖动来根据凉亭位置和标题提供当前姿势。您应该尽可能精确但小错误没问题。 一旦你这样做了这应该是新的视图—— 现在我们有了自主导航所需的所有转换map-odom-base_link
导航 从底部开始我们在这里;) 让我们导航 要命令机器人自主移动请转到 RViz 并单击 .现在在 RViz 中的目的地上单击用于位置并拖动用于方向。下一个观看凉亭里的魔术Nav2 Goal 你将看到 nav2 规划了一条路径本地 全局并开始移动机器人。如果这让你开心你可以继续提供更多的 Nav2 目标 那么我们已经成功地使用 Nav2 为 TurtleBot3 设置了自主导航那就是本文的全部目标。
后记 你接下来问什么理想情况下我想用一个物理的TurtleBot继续这个系列。也许我众包了一个TurtleBot。也许别的东西。我很想知道你想要什么。我们可以一起想办法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912010.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!