ROS仿真小车(一)—— urdf模型+rviz可视化


文章目录

  • 前言
  • 一、创建功能包
  • 二、urdf文件
  • 三、launch文件
  • 四、图形化显示
  • 五、RVIZ可视化
  • 总结
  • 参考文献


前言

ROS学习过程记录,从零开始仿真一辆小车,之后会实现运动控制、雷达、相机等

部分代码已上传至本人的GitHub,如果需要请自行下载:

创建一个四轮圆柱状机器人模型,添加摄像头和雷达传感器,并控制小车运动:

URDF与Gazebo集成

系列文章目录:

ROS仿真小车(一)—— urdf模型+rviz可视化

ROS仿真小车(二)——添加摄像头雷达传感器

ROS仿真小车(三)——rviz控制机器人模型运动

ROS仿真小车(四)—— URDF与Gazebo集成


URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单

实现流程:

准备:新建功能包,导入依赖

核心:编写 urdf 文件

核心:在 launch 文件集成 URDF 与 Rviz

在 Rviz 中显示机器人模型

一、创建功能包

找一个空闲文件夹,创建ros功能包
在这里插入图片描述

打开命令行终端,输入以下命令:

mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace

在这里插入图片描述

导入依赖,在src目录下输入以下命令:

catkin_create_pkg jubot_demo urdf xacro #创建功能包、添加依赖
cd jubot_demo/
mkdir urdf
mkdir launch
mkdir meshes #存放渲染机器人模型的文件
mkdir config #存放rviz配置的文件

在这里插入图片描述

打开VS Code写两个文件
jubot_base.urdf(放urdf文件夹下)
display_jubot_base_urdf.launch(放launch文件夹下)
config里的rviz文件是保存生成的,不用写
在这里插入图片描述

二、urdf文件

Unified Robot Description Format,统一机器人描述格式,简称为URDF
模型的环节(link)与关节(joint)坐标关系,跟我的代码模型不匹配,仅供理解关系:
在这里插入图片描述
在基础模型之上,我们为机器人添加尺寸大小。由于每个环节的参考系都位于该环节的底部,关节也是如此,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系即可。URDF中的 origin 域就是用来表示这种相对关系。

如果我们为机器人的关节添加 axis 旋转轴参数,那么该机器人模型就可以具备基本的运动学参数。

注意代码中不能有中文注释

<?xml version="1.0" ?>
<robot name="jubot"><!--base_car--><link name="base_link">   <visual> <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/> <geometry>  <cylinder radius="0.20" length="0.16"/>             </geometry><material name="yellow"> <color rgba="1 0.4 0 1"/>  </material></visual></link><!--left_wheel--><joint name="left_wheel_joint" type="continuous">   <origin xyz="0.0 0.19 -0.05" rpy="0.0 0.0 0.0"/> <parent link="base_link"/>  <child link="left_wheel_link"/> <axis xyz="0.0 1.0 0.0"/>  </joint><link name="left_wheel_link"><visual><origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/><geometry><cylinder radius="0.06" length="0.025"/></geometry><material name="white"><color rgba="1 1 1 0.9"/></material></visual></link><!--right_wheel--><joint name="right_wheel_joint" type="continuous"><origin xyz="0.0 -0.19 -0.05"/><parent link="base_link"/><child link="right_wheel_link"/><axis xyz="0.0 1.0 0.0"/></joint><link name="right_wheel_link"><visual><origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/><geometry><cylinder radius="0.06" length="0.025"/></geometry><material name="white"><color rgba="1 1.0 1.0 0.9"/></material></visual></link><!--front_caster--><joint name="front_caster_joint" type="continuous"><origin xyz="0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/><parent link="base_link"/><child link="front_caster_link"/><axis xyz="0.0 1.0 0.0"/></joint><link name="front_caster_link"><visual><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><geometry><sphere radius="0.015"/></geometry><material name="black"><color rgba="0.0 0.0 0.0 0.95"/></material></visual></link><!--back_caster--><joint name="back_caster_joint" type="continuous"><origin xyz="-0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/><parent link="base_link"/><child link="back_caster_link"/><axis xyz="0.0 1.0 0.0"/></joint><link name="back_caster_link"><visual><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><geometry><sphere radius="0.015"/></geometry><material name="black"><color rgba="0.0 0.0 0.0 0.95"/></material></visual></link>
</robot>

关于参数欧拉角rpy,是roll(滚转角)、pitch(俯仰角)、yaw(偏航角),分别对应绕x轴、y轴、z轴
在这里插入图片描述

三、launch文件

display_jubot_base_urdf.launch代码如下(示例):

<launch><!-- 设置机器人模型路径参数 --><param name="robot_description" textfile="$(find jubot_demo)/urdf/jubot_base.urdf" /><!-- 运行joint_state_publisher节点,发布机器人的关节状态  --><node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" /><!-- 运行robot_state_publisher节点,发布tf  --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /><!-- 运行rviz可视化界面 --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find jubot_demo)/config/jubot_urdf.rviz" required="true" />  
</launch>

四、图形化显示

安装一个检查urdf语法的工具:

sudo apt-get install liburdfdom-tools

在urdf文件夹下打开终端检查语法:

check_urdf jubot_base.urdf

在这里插入图片描述

在urdf文件夹下打开终端,图形化显示URDF模型

urdf_to_graphiz jubot_base.urdf

此时会生成两个文件,打开pdf文件
在这里插入图片描述

五、RVIZ可视化

启动launch文件
roslaunch jubot_demo display_jubot_base_urdf.launch

在启动launch文件之前,需要编译配置一下:
(1)退到主目录catkin_ws下,执行catkin_make
在这里插入图片描述
(2)执行成功之后,再执行catkin_make install
在这里插入图片描述(3)在主目录catkin_make下配置环境变量source devel/setup.bash
在这里插入图片描述
(4)检测环境变量是否配置成功echo $ROS_PACKAGE_PATH
在这里插入图片描述

到此,终于可以启动launch文件了
进入src目录下,输入命令roslaunch jubot_demo/launch/display_jubot_base_urdf.launch
在这里插入图片描述
窗口自动打开了RVIZ
在这里插入图片描述

global options下的Fixed Frame改为base_link,
在这里插入图片描述

然后我们看到在屏幕左下方有一个add按钮,单击,添加robotmodel,确定以后,就会发现图形正确显示了。
在这里插入图片描述

在这里插入图片描述

以上圆形步骤就完成了, 初步实现了urdf模型+rviz可视化。


总结

在仿真小车搭建过程中注意时刻查看自己的环境变量是否配置了,网上有很多ROS环境变量默认配置的教学视频,大家可以跟着设置一下,我这里由于篇幅限制,就没有具体说明配置过程。

参考文献

从零开始仿真ROS小车(一)urdf模型+rviz可视化

Autolabor主站

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

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

相关文章

算法题解记录18+++搜索二维矩阵Ⅱ

本题可以说是运用二分查找的典例&#xff0c;即使是面对矩阵&#xff0c;只要是它保持“排序好”这样的结构&#xff0c;就一定能采用二分查找法。【你知道的&#xff0c;对于排序好的数组&#xff0c;二分查找几乎是最优秀的算法】 当然&#xff0c;答案提供的是“Z字形查找法…

实在Agent:超自动化智能体的革命(附导引指南)

在自动化技术的浪潮中&#xff0c;实在智能推出了实在Agent&#xff08;智能体&#xff09;&#xff0c;一款基于大语言模型和屏幕语义理解技术的超自动化智能体。它通过自然对话交互&#xff0c;将复杂工作简化为一句话指令&#xff0c;自动规划并执行工作任务&#xff0c;极大…

C++奇迹之旅:深入理解赋值运算符重载

文章目录 &#x1f4dd;赋值运算符重载&#x1f320; 运算符重载&#x1f309;特性 &#x1f320; 赋值运算符重载&#x1f320;传值返回&#xff1a;&#x1f320;传引用赋值&#xff1a;&#x1f309;两种返回选择&#x1f309;赋值运算符只能重载成类的成员函数不能重载成全…

unity学习(86)——细节优化

东西已经做出来了&#xff0c;现在需要的是优化&#xff0c;说得简单&#xff0c;做起来难。 1.122包的优化&#xff0c;避免重复创建&#xff01; 2.为何会出现一边动&#xff0c;一边不动的情况。重复登录后依旧是unity可以看到移动&#xff0c;但是exe那边看不到移动&#…

关于图像YUV格式分类和排布方式的全学习

【学习笔记】关于图像YUV格式分类和排布方式的全学习_yuv图像-CSDN博客 下图是将多个yuv420p图像(A和B)&#xff0c;拼接成一个画面的思路 A大小:416*64 B大小:416*208 将A和B合并到一个416*416的尺寸上&#xff0c;代码如下 //整合char * ptd;ptd (char * ) malloc (416*41…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

矽塔SA8321 单通道 2.7-12.0V 持续电流 3.0A H 桥驱动芯片

描述 SA8321是为消费类产品&#xff0c;玩具和其他低压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。此器件能够驱动一个直流无刷电机&#xff0c;由一个内部电荷泵生成所需的栅极驱动电压电路和4个功率 NMOS组成H桥驱动&#xff0c;集成了电机正转/反…

2024上海国际半导体制造设备材料与核心部件展览会

2024上海国际半导体制造设备材料与核心部件展览会 2024 Shanghai International Semiconductor Manufacturing Equipment Materials and Core Components Exhibition 时间&#xff1a;2024年11月18日-20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx&#xff0c;选择【File】->【New Project】&#xff0c;进入芯片选择界面&#xff0c;搜索到蓝桥杯官方的芯片型号&#xff0c;并点击收藏&#xff0c;下次直接点击收藏就…

【LeetCode: 39. 组合总和 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

比特币减半倒计时:NFT 生态将受到怎样的影响?

BTC 减半倒计时仅剩不到 1 天&#xff0c;预计在 4 月 20 日迎来减半。当前区块奖励为 6.25 BTC&#xff0c;减半后区块奖励为 3.125 BTC&#xff0c;剩余区块为 253。比特币减半无疑是比特币发展史上最重要的事件之一&#xff0c;每当这一事件临近&#xff0c;整个加密社区都充…

Linux下SPI设备驱动实验:测试读取ICM20608设备中数据是否正常

一. 简介 前面文章实现了 SPI设备的读写功能&#xff0c;也对ICM20608设备中&#xff08;即SPI设备&#xff09;寄存器里的数据进行了读取。文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;读取ICM20608设备的数据-CSDN博客 本文对驱动功能进行测试&#xff0c;即…

大数据平台搭建2024(二)

二&#xff1a;Hive安装 只在node01上操作 1 安装MySQL 8.0 最小化安装需要安装这个 yum install -y wget1-1 下载MySQL的yum源 wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm检查是否安装成功 rpm -qpl mysql80-community-release-el7-7.n…

c++使用spdlog库打日记

打日记 打日志的本质就是多输出&#xff0c;c没有自带的日志库&#xff0c;只能使用第三方库实现&#xff0c;当然&#xff0c;直接cout输出也可以&#xff0c;但是一般日志库都进行了优化&#xff0c;比我们使用cout输出的效率更高&#xff0c;同时效果也更好&#xff0c;这里…

vue3【详解】 vue3 比 vue2 快的原因

使用 Proxy 实现响应式 vue3使用的 Proxy 在处理属性的读取和写入时&#xff0c;比vue2使用的defineProperty 有更好的性能&#xff08;速度加倍的同时&#xff0c;内存还能减半&#xff01;&#xff09; 更新类型标记 Patch Flag 在编译模板时&#xff08;将vue语法转换为js描…

基于Springboot的影城管理系统

基于SpringbootVue的影城管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 电影信息 电影资讯 后台登录页 后台首页 用户管理 电影类型管理 放映…

基于TCC的分布式事务

优质博文&#xff1a;IT-BLOG-CN 一、分布式事务简介 分布式的架构中&#xff0c;分布式的事务是一个绕不过的挑战&#xff0c;微服务理念的流行让分布式的问题日益突出。 在公司内部&#xff0c; 笔者所接触的管理系统中实际上也存在着分布式事务。 这里假设有这三个系统&…

解线性方程组——直接解法:(Gauss)高斯消去法、列主元、全主元 | 北太天元

一、问题描述 对于线性方程组 A x b , A ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a n 1 a n 2 ⋯ a n n ) , b ( b 1 b 2 ⋮ b n ) Axb,\quad A\begin{pmatrix} a_{11} & a_{12} &\cdots &a_{1n}\\ a_{21} & a_{22} &\cdots &a_{2n}\\…

win11家庭中文版安装docker遇到Hyper-V启用失败,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

PyQt程序:实现新版本的自动更新检测及下载(FTP服务器实现)

一、实现逻辑 本实例采用相对简单的逻辑实现,用户在客户端使用软件时点击“检测升级”按钮,连接至FTP服务器检索是否有新版本的.exe,如果有,下载最新的.exe安装升级。 本实例服务端待下载.exe所在目录结构 本实例客户端待更新.exe所在目录结构 二、搭建服务器 可以参考…