当前位置: 首页 > news >正文

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。

本节使用URDF创建一个机器人模型。

6.2.1 帮机器人创建一个身体

URDF使用XML来描述机器人的结构和传感器、执行器等信息。

在chapt6/chap6_ws/src创建功能包:ros2 pkg create fishbot_description --build-type ament_cmake  --lience Apache-2.0

新功能包下创建urdf文件夹,新建文件:fisrt_robot.urdf. 代码如下:

<?xml version="1.0"?>
<robot name="first_robot"><!-- 机器人身体部分 --><link name="base_link"><!-- 部件外观描述 --><visual><!-- 沿自己几何中心的偏移与旋转量 --><origin xyz="0 0 0" rpy="0 0 0" /><!-- 几何形状 --><geometry><!-- 圆柱体,半径0.1m,高度 0.12m --><cylinder length="0.12" radius="0.10" /></geometry><!-- 材质子标签-蓝色 --><material name="blue"><color rgba="0.1 0.1 1.0 0.5" /></material></visual></link><!-- 机器人IMU部件 --><link name="imu_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.02 0.02 0.02" /></geometry></visual><material name="black"><color rgba="0 0 0 0.5" /></material></link><!-- 机器人关节 --><joint name="imu_joint" type="fixed"><!-- 父部件 --><parent link="base_link" /><!-- 子部件 --><child link="imu_link" /><!-- 子部件相对父部件的平移和旋转 --><origin xyz="0 0 0.03" rpy="0 0 0" /></joint></robot>

urdf_to_graphviz 转成pdf也不直观。

6.2.2  在RViz中显示机器人

之间终端输入rviz2,Display模块添加RobotModel,打开刚才的urdf文件,还好会提示TF错误。

安装依赖:

sudo apt install ros-$ROS_DISTRO-rotbot-state-publisher

sudo apt install ros-$ROS_DISTRO-joint-state-publisher

为了方便运行,使用launch启动节点。添加luanch文件夹,新建display_robot.launch.py.代码如下

import launch
import launch_ros
from ament_index_python.packages import get_package_share_directorydef generate_launch_description():# 获取默认路径urdf_tutorial_path = get_package_share_directory('fishbot_description')default_model_path = urdf_tutorial_path + '/urdf/first_robot.urdf'default_rviz_config_path = urdf_tutorial_path + '/config/display_model.rviz'# 为 Launch 声明参数action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(name='model', default_value=str(default_model_path),description='URDF 的绝对路径')# 获取文件内容生成新的参数robot_description = launch_ros.parameter_descriptions.ParameterValue(launch.substitutions.Command(['cat ', launch.substitutions.LaunchConfiguration('model')]),value_type=str)# 状态发布节点robot_state_publisher_node = launch_ros.actions.Node(package='robot_state_publisher',executable='robot_state_publisher',parameters=[{'robot_description': robot_description}])# 关节状态发布节点joint_state_publisher_node = launch_ros.actions.Node(package='joint_state_publisher',executable='joint_state_publisher',)# RViz 节点rviz_node = launch_ros.actions.Node(package='rviz2',executable='rviz2',arguments=['-d', default_rviz_config_path])return launch.LaunchDescription([action_declare_arg_mode_path,joint_state_publisher_node,robot_state_publisher_node,rviz_node])

视频上小鱼老师是先把default_rviz_config_path 注释掉。对于rviz参数也去掉。修改CMakeLists.txt,增加节点urdf、launch,构建,启动后:

再次在 Rviz的Display模块做设置,步骤参考视频或者书上。添加完效果如下:

把配置.rviz保存下来,再次修改launch启动文件,加上保存的文件,参见上面代码,就可达到上面的效果。

6.2.3 使用xacro 简化URDF

安装依赖:sudo apt install ros-$ROS_DISTRO-xacro

新建文件:fist_robot.xacro

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="first_robot">   <!-- base --><xacro:macro name="base_link" params="length radius"><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><cylinder length="${length}" radius="${radius}" /></geometry>              <material name="blue"><color rgba="0.1 0.1 1.0 0.5" /></material></visual></link></xacro:macro><xacro:macro name="imu_link" params="imu_name xyz"><link name="${imu_name}_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.02 0.02 0.02" /></geometry></visual><material name="black"><color rgba="0 0 0 0.5" /></material></link><joint name="${imu_name}_joint" type="fixed"><!-- 父部件 --><parent link="base_link" /><!-- 子部件 --><child link="${imu_name}_link" /><!-- 子部件相对父部件的平移和旋转 --><origin xyz="${xyz}" rpy="0 0 0" /></joint></xacro:macro>    <xacro:base_link length="0.12" radius="0.1"/><xacro:imu_link imu_name="imu_up" xyz="0 0 0.03"/><xacro:imu_link imu_name="imu_down" xyz="0 0 -0.03"/></robot>

修改上一节6.2.2的代码把display_robot.launch.py里面。cat 替换为xacro.

构建,运行:bohu@bohu-TM1701:~/chapt6/chapt6_ws$ ros2 launch fishbot_description display_robot.launch.py model:=/home/bohu/chapt6/chapt6_ws/src/fishbot_description/urdf/first_robot.xacro

6.2.4 创建机器人部件及添加物理属性

这块代码比较长,就不一一贴出来,对比书上6.2.4,6.2.5,6.3章节。

小鱼老师讲解的过程是先添加主体,再加传感器、执行器:轮子、6.3又加了质量与惯性。

代码结构如下:

构建后,运行:ros2 launch fishbot_description display_robot.launch.py model:=/home/bohu/chapt6/chapt6_ws/install/fishbot_description/share/fishbot_description/urdf/fishbot/fish_robot.xacro

视觉效果如下:

只看质量:

只看惯性:

相关文章:

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作&#xff0c;不同的仿真平台有不同的建模语言&#xff0c;但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...

【centos】校时服务创建-频率修改

在 NTP 配置中&#xff0c;校时频率通常是由 NTP 协议自动管理的&#xff0c;NTP 会根据网络延迟和时间偏差动态调整校时频率。不过&#xff0c;您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率&#xff0c;可以考虑以下几个方面&#xff1a;…...

J.U.C(1)

目录 JUC&#xff08;一&#xff09;一&#xff1a;AQS二&#xff1a;reentrantlock原理1&#xff1a;加锁&#xff1a;2&#xff1a;解锁3&#xff1a;可重入锁原理4&#xff1a;可打断原理5&#xff1a;公平锁原理6&#xff1a;条件变量 三&#xff1a;读写锁&#xff08;ree…...

计算机网络之---静态路由与动态路由

静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包&#xff0c;而不会自动调整。它不依赖于任何路由协议。 特点&#xff1a; 手动配置&#xff1a;网络管理员需要手动在路由器中配置每条静态路由。不自动更新&#xff1a;…...

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...

C++----STL(string)

引言&#xff1a;STL简介 什么是STL STL(standard template libaray-标准模板库)&#xff1a; 是 C标准库的重要组成部分&#xff08;注意&#xff1a;STL只是C标准库里的一部分&#xff0c;cin和cout也是属于C标准库的&#xff09;&#xff0c;不仅是一个可复用的组件库&…...

利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情

在当今数字化时代&#xff0c;数据是商业决策的关键。对于从事国际贸易的商家来说&#xff0c;精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台&#xff0c;拥有海量的商品数据。通过 Java 爬虫技术&#xff0c;我们可以高效地从 yiwugo 根据商品 ID 获取详细…...

vue2修改表单只提交被修改的数据的字段传给后端接口

效果&#xff1a; 步骤一、 vue2修改表单提交的时候&#xff0c;只将修改的数据的字段传给后端接口&#xff0c;没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性&#xff0c;用于存储初始表单数据的副本&#xff0c;与当前表单数据进行比较&#xff0c;找出哪些…...

Flink类加载机制详解

1. 总览 在运行Flink应用时,它会加载各种类,另外我们用户代码也会引入依赖,由于他们依赖版本以及加载顺序等不同,就可能会导致冲突,所以很要必要了解Flink是如何加载类的。 根据加载的来源的不同,我们可以将类分为三种: Java Classpath:Java类路径下,这是Java通用的…...

ClickHouse大数据准实时更新

一、问题背景 最近有一个项目需求&#xff0c;需要对日活跃的3万辆车的定位数据进行分析&#xff0c;并支持查询和统计分析结果。每辆车每天产生1条分析结果数据&#xff0c;要求能够查询过去一年内的所有分析结果。因此&#xff0c;每月需要处理约90万条记录&#xff0c;一年大…...

计算机网络之---端口与套接字

总括 端口&#xff1a;是计算机上用于标识网络服务的数字标识符&#xff0c;用于区分不同的服务或应用程序。套接字&#xff1a;是操作系统提供的用于进程间网络通信的编程接口&#xff0c;允许程序通过它来进行数据的发送、接收和连接管理。关系&#xff1a;端口号用于标识服…...

UE5中制作地形材质

在创作大场景内容时&#xff0c;地形的设计和优化是至关重要的一步。利用UE中的地形系统&#xff0c;开发者能够高效地创建复杂的地形形态&#xff0c;同时保持游戏的性能和视觉效果。 1.在创建地形之前&#xff0c;先新建一个地形使用的混合材质球&#xff0c;添加节点Landsc…...

【Docker】docker compose 安装 Redis Stack

注&#xff1a;整理不易&#xff0c;请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是&#xff1f; 简单来说&#xff0c;Redis Stack 是增强版的 Redis &#xff0c;它在传统的 Redis 数据库基础上增加了一些高级功能和模块&#xff0c;以支持更多的使用场景和需求。Redis…...

pytest 常用插件

pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍&#xff0c;并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行&#xff0c;可以将测试分配到多个 CPU 核心并行运行&#xff0c;从…...

浅谈云计算05 | 云存储等级及其接口工作原理

一、云存储设备 在当今数字化飞速发展的时代&#xff0c;数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频&#xff0c;到企业运营里的关键业务文档、客户资料&#xff0c;数据量呈爆炸式增长。面对海量的数据&#xff0c;如何安全、高效且便捷地存…...

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk

关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less,grep 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 文本处理 awk 创建文件 格式&#xff1a; touch 文件名 删除文件 复制文…...

CentOS 8 如何安装java与mysql

在CentOS 8上安装Java和MySQL的步骤如下&#xff1a; 1. 安装 Java 1.1 安装 OpenJDK&#xff08;推荐&#xff09; CentOS 8 默认的软件仓库提供了 OpenJDK 包&#xff0c;您可以直接使用 dnf 命令安装。 # 更新系统 sudo dnf update -y# 安装 OpenJDK 11&#xff08;Cent…...

Go语言之路————go基本语法、数据类型、变量、常量、输出

Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触G…...

音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息

音视频入门基础&#xff1a;MPEG2-PS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;1&#xff09;——MPEG2-PS官方文档下载 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ps文件 音视频入门基础…...

Docker安装和卸载(centos)

Docker安装和卸载 一&#xff0c;已安装Docker&#xff0c;卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...