使用 launch 启动 rviz2 并加载机器人模型

视频资料:《ROS 2机器人开发从入门到实践》6.2.2 在RViz中显示机器人_哔哩哔哩_bilibili

1、创建工作空间 chapt6_ws/src,创建包 fishrobot_description

ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0

2、创建机器人描述文件,chapt6_ws/src/fishbot_description/urdf/first_robot.urdf

<?xml version="1.0"?>
<robot name="first_robot"><!-- 机器人的身体部分--><link name="base_link"><!-- 部件的外观描述--><visual><!-- 沿着自己几何中心的偏移旋转量--><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><!-- 几何形状--><geometry><!-- 圆柱体 半径:0.10,高度:0.12--><cylinder radius="0.10" length="0.12"/></geometry><!-- 材质颜色--><material name="white"><color rgba="1.0 1.0 1.0 0.5"/></material></visual></link><!-- 机器人的IMU部件,惯性测量传感器--><link name="imu_link"><!-- 部件的外观描述--><visual><!-- 沿着自己几何中心的偏移旋转量--><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><!-- 几何形状--><geometry><!-- 正方体 长宽高为0.02--><box size="0.02 0.02 0.02"/></geometry><!-- 材质颜色--><material name="black"><color rgba="0.0 0.0 0.0 0.5"/></material></visual></link><!-- 机器人的关节,用于组合机器人的部件--><joint name="imu_joint" type="fixed"><parent link="base_link"/><child link="imu_link"/><origin xyz="0.0 0.0 0.03" rpy="0.0 0.0 0.0"/></joint></robot>

3、执行命令生成 first_robot.gv 和 first_robot.pdf

urdf_to_graphviz first_robot.urdf

4、创建 chapt6_ws/src/fishbot_description/launch/display_robot.launch.py

注意.rviz文件可以通过第一次加载机器人后保存得到。

joint_state_publisher 节点:发布 /joint_states 话题,内容是当前所有关节的位置(角度/长度),真实机器人一般不需要它,因为真实传感器或驱动会发布 /joint_states

robot_state_publisher 节点:接收 /joint_states 话题,输出每个link的tf/tf_static消息(坐标系关系),RViz根据这些信息,动态显示机器人的三维模型运动

import launch
import launch_ros
from ament_index_python.packages import get_package_share_directory
import osdef generate_launch_description():# 获取默认 urdf 路径urdf_package_path = get_package_share_directory('fishbot_description')default_urdf_path = os.path.join(urdf_package_path, 'urdf', 'first_robot.urdf')default_rviz_config_path = os.path.join(urdf_package_path, 'config', 'display_robot_model.rviz')# 声明参数,用于修改 urdf 目录action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(name = 'model',default_value = str(default_urdf_path),description = '加载的模型文件路径')# 通过文件路径获取内容,并转换为参数对象substitution_command_result = launch.substitutions.Command(['cat ', launch.substitutions.LaunchConfiguration('model')])robot_description_value = launch_ros.parameter_descriptions.ParameterValue(substitution_command_result, value_type = str)action_robot_state_publisher = launch_ros.actions.Node(package = 'robot_state_publisher',executable = 'robot_state_publisher',parameters = [{'robot_description':robot_description_value}])action_joint_state_publisher = launch_ros.actions.Node(package = 'joint_state_publisher',executable = 'joint_state_publisher')action_rviz_node = launch_ros.actions.Node(package = 'rviz2',executable = 'rviz2',arguments = ['-d', default_rviz_config_path])return launch.LaunchDescription([action_declare_arg_mode_path,action_robot_state_publisher,action_joint_state_publisher,action_rviz_node])

5、修改 chapt6_ws/src/fishbot_description/CMakeLists

cmake_minimum_required(VERSION 3.8)
project(fishbot_description)if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic)
endif()find_package(ament_cmake REQUIRED)if(BUILD_TESTING)find_package(ament_lint_auto REQUIRED)set(ament_cmake_copyright_FOUND TRUE)set(ament_cmake_cpplint_FOUND TRUE)ament_lint_auto_find_test_dependencies()
endif()# 添加这行
install(DIRECTORY launch urdf configDESTINATION share/${PROJECT_NAME})ament_package()

6、

colcon build
source install/setup.bash
ros2 launch fishbot_description display_robot.launch.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911645.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践

华为云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 …

Python学习Day41

学习来源&#xff1a;浙大疏锦行 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; …

数组题解——最长回文子串【LeetCode】

5. 最长回文子串 一、向右拓展 算法思路 你用res记录当前找到的最长回文子串。每次遍历到s[i]时&#xff0c;尝试找到以s[i]结尾的、比当前res更长的回文子串。 先尝试长度为len(res)2&#xff08;即起点i-len(res)-1&#xff09;的子串&#xff0c;看是不是回文。如果不是&…

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

&#x1f680; 从零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 在 AI 项目开发中&#xff0c;构建统一的运行环境是一件非常重要的事情。使用 Docker 可以极大地提升部署效率、保证环境一致性。本文将手把手带你&#xff1a; ✅ 构建一个…

纪念抗战胜利知识答题pk小程序

纪念抗战胜利知识答题PK小程序通常有以下功能&#xff1a; 一、基础答题功能 题目展示&#xff1a;清晰呈现题目内容&#xff0c;支持文字、图片、音频或视频等多种形式的题目素材&#xff0c;且能按选择题、填空题、判断题等不同题型分类展示。答案提交与判断&#xff1a;用…

AI模型本质与学习范式解析

从统计学习&#xff08;也就是数学&#xff09;的角度来分析深度学习模型的本质。 频率派与贝叶斯派对模型本质理解的差异&#xff1a;前者认为学习参数估计&#xff0c;后者认为学习后验分布。不过这个问题下概率分布的视角更本质。 三个核心部分&#xff1a;任务类型分类&a…

【AI落地应用实战】Chaterm:重新定义终端操作的AI智能工具

目录 一、AI Agent 终端新范式二、Chaterm安装与基础功能体验2.1、源码安装与配置2.2、基础功能体验 三、Chaterm运维案例实践四、从 Chaterm 看智能终端工具的演进方向4.1 更低门槛&#xff1a;面向“非专业人员”的运维民主化4.2 更强扩展性&#xff1a;从工具到平台的演化 五…

IO多路复用——Select底层原理深度分析(流程图)

文章目录 1.kern_select 参数验证和初始化流程2. do_select() 详细实现流程3. 位图数据结构详解4. 文件描述符处理详细流程5. Poll方法调用链6. 等待机制实现7. 用户态处理就绪事件8. 性能瓶颈分析9. 与其他I/O多路复用对比 Select 整体调用流程&#xff1a; #mermaid-svg-766A…

多光谱扫描技术在实物建模中的应用:如何实现1:1真实材质还原

在实物建模领域&#xff0c;传统方式常常陷入尴尬境地&#xff1a;耗费大量时间精力构建的模型&#xff0c;材质看起来却与真实物体相差甚远&#xff0c;塑料质感的 “金属”、模糊不清的纹理&#xff0c;让模型失去了应有的真实感。而在文物保护、产品设计等对真实材质还原要求…

Python复杂网络分析和建模库之networkx使用详解

概要 在当今信息爆炸的时代,复杂网络无处不在。NetworkX是一个用于创建、操作和研究复杂网络结构、动态和功能的Python库。它提供了丰富的数据结构来表示各种类型的网络,如无向图、有向图、加权图等,并支持大量的图算法,包括最短路径计算、中心性分析、社区发现等。 安装 …

前端依赖升级完全指南:npm、pnpm、yarn 实践总结

在前端项目开发过程中&#xff0c;定期升级依赖不仅能享受新特性、修复安全问题&#xff0c;还能保证工具链长期稳定运行。本文全面总结 npm、pnpm、yarn 三大主流包管理器在 依赖包升级 方面的实践方法&#xff0c;并补充版本符、依赖安装的基础知识&#xff0c;适合新手与有经…

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…

FSMC控制LCD(TFTLCD:Z350IT002)显示案例

显存不一定要擦除&#xff0c;只要来一个地址就可以对其进行读写&#xff0c;而且一般的需求是不停的写入&#xff08;不同的像素点给不同的值&#xff09;&#xff0c;所以是RAM&#xff08;flash和E2PROM要擦除才能写入&#xff09;&#xff0c;由于FSMC没有DRAM所以我们只能…

云原生周刊:Argo CD v3.1 正式发布

开源项目推荐 Kubewall Kubewall 是一个轻量级的开源 Kubernetes 仪表盘&#xff0c;支持多集群管理&#xff0c;主打单二进制部署和浏览器访问&#xff0c;提供实时资源监控、YAML 编辑、拓扑视图、日志查看等功能。它使用 Go 与 React 构建&#xff0c;支持通过 Docker、He…

Aerotech系列(3)开发库介绍

库对象模型 名空间列表 NamespaceDescriptionAerotech.A3200 The main namespace of the Aerotech A3200 .NET library Aerotech.A3200.Callbacks Contains the classes that allow interacting with callbacks Aerotech.A3200.Commands Contains the classes that allows …

Spring--IOC容器的一些扩展属性

一、BeanFactoryPostProcessor和BeanPostProcessor BeanFactoryPostProcessor的作用是在实例化前修改BeanDefinition的属性 BeanPostProcessor的作用是在bean完成创建实例、填充属性之后&#xff0c;初始化阶段的前后都会对bean进行操作&#xff0c;使用postProcessBeforeIni…

8w字:推荐系统技术体系深度解析:从理论基础到工业实践的完整指南

插话&#xff1a;刚接触推荐系统还是大一下作比赛&#xff0c;然后找资料&#xff0c;顺便在巧合下在“识典百科”&#xff08;现在叫快懂百科&#xff0c;抖音的&#xff0c;改好几回名了&#xff0c;还要一条条插入引用资料&#xff0c;现在看来&#xff0c;好像抖音也不在乎…

RA4M2开发IOT(8)----IIC驱动OLED

RA4M2开发IOT.8--IIC驱动OLED 概述视频教学样品申请硬件准备参考程序修改IIC驱动OLED属性配置移植SSD1306字符取模ASCII显示图片取模显示图片 概述 本章旨在通过 IC 接口驱动 OLED 显示屏&#xff08;常见型号如 SSD1306&#xff09;&#xff0c;实现图形和文本的显示功能。OL…

数组题解——​轮转数组【LeetCode】

189. 轮转数组 通过三次反转操作&#xff0c;可以实现数组的轮转&#xff1a; 反转整个数组: 将数组完全反转&#xff0c;使得原数组的后 k 个元素移动到数组的前面。反转前 k 个元素: 将前 k 个元素反转&#xff0c;恢复它们的原始顺序。反转后 n - k 个元素: 将后 n - k 个元…

AR 眼镜之-条形码识别-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 条形码识别 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;相机App显示模块 2&#xff09;算法so库JNI模块 3&#xff09;算法条形码识别模块 2. &#x1f4a0; 实现相机App显示模块 2.1 创建 Ba…