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

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言

        在上篇中我们搭建了一个机器人模型(其由各个关节(joint)和连杆(link)组成),此篇我们会通过设置关节类型来实现机器人的活动。

        在ROS中,关节一般有无限旋转(continuous),有限旋转(revolute)和滑动(prismatic)三种类型,除了上述三种关节类型外,ROS还支持其他类型的关节,如planar(平面关节,允许在平面正交方向上平移或旋转)和floating(浮动关节,允许进行平移和旋转运动)等。这些关节类型提供了更复杂的运动学模型,以支持更广泛的机器人设计和应用。

动动手

        同样是在urdf文件中实现。[原文件:06-flexible.urdf]

运行

        按下面命令看看这个可活动的机器人效果如何。

$ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

        可以发现除了Rviz机器人模型出现外,还有另外一个小窗口也弹了出来(上一篇中也有,只不过内容很少),上面罗列了好几个关节(joint)的控制条,我们可以尝试拖动这些滑动条看看机器人如何活动。

关节

<joint name="head_swivel" type="continuous"><parent link="base_link"/><child link="head"/><axis xyz="0 0 1"/><origin xyz="0 0 0.3"/>
</joint>

        这里描述了头部关节的相关属性,该关节连接了机器人身体(base_link)和头部(head),类型为continuous,意味着可以无限制旋转(所有方向所有角度),受限于实际的物理限制,往往不能做到全方位全角度旋转,几个轮子关节的类型也是同样如此。需要注意的是我们从上面的代码中可以看到axis属性,这指定了旋转轴,(x, y, z)-> (0, 0, 1),该头部节点只能绕着z轴转动。

抓手
<joint name="left_gripper_joint" type="revolute"><axis xyz="0 0 1"/><limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/><origin rpy="0 0 0" xyz="0.2 0.01 0"/><parent link="gripper_pole"/><child link="left_gripper"/>
</joint>

        机器人的左右两只抓手关节类型都为revolute,有限制(角度)的旋转,通过limit属性我们指定了力矩(effort,单位Nm)、最小最大角度(lower/upper,单位弧度)、速度(velocity),实际过程中的值可能会与目标值不一致。

对于旋转关节(revolute),effort 通常表示的是力矩(torque),单位可能是牛顿·米(Nm)或磅·英尺(lb-ft),而不是牛顿(N)。牛顿(N)是力的单位,而力矩是力和力臂的乘积,用来描述力对物体绕某点旋转的效果。

对于滑动关节(prismatic),effort 通常表示的是力(force),单位可能是牛顿(N)或磅(lb)。

抓臂
<joint name="gripper_extension" type="prismatic"><parent link="base_link"/><child link="gripper_pole"/><limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/><origin rpy="0 0 0" xyz="0.19 0 0.2"/>
</joint>

        抓臂关节的类型设置成了prismatic,滑动,能起到让手臂伸缩的作用。对于滑动关节的属性lower和upper单位不再是弧度而是米。

其他

       除了前面提到的关节类型,还有两种关节能够在空间中移动。其中,滑动关节(prismatic joint)只能沿一个维度移动,而平面关节(planar joint)则可以在一个平面,或者说两个维度上移动。此外,浮动关节(floating joint)是不受约束的,可以在三个维度中的任意一个维度上移动。这些关节不能仅用一个数值来指定,因此在本教程中不包括它们。

姿态控制原理(Rviz)

        在我们拖动滑动条时,Rviz中的机器人关节也随着活动,并带动与其连接的其他组件运动,这是怎么实现的呢?

  1. GUI(控制窗口)解析urdf文件并确定各个活动关节及其限制;
  2. GUI读取滑动条数值并发布sensor_msgs/msg/JointState消息;
  3. 节点robot_state_publisher利用这些消息数据计算不同模块之间的位姿转换;
  4. Rviz最终通过转换树的信息数据进行显示转换后的机器人位姿。

        后续的章节我们会添加一些物理属性到urdf中,并利用xacro(xml格式的宏)来精简我们的代码。

本篇完。

相关文章:

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言 在上篇中我们搭建了一个机器人模型(其由各个关节&#xff08;joint&#xff09;和连杆&#xff08;link&#xff09;组成)&#xff0c;此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中&#xff0c;关节一般有无限旋转&#xff08;continuous&#xff09;,有限旋转…...

【第66例】IPD体系进阶:华为IPD发展历程

目录 简介 样例 作者简介 简介 想要引入 IPD,首先就要思考一些问题: 跟我的企业适配吗? 流程会不会太重了? 一定要引入吗,有没有其他方式? 从目前大的环境来说。 中国制造业正在由“中国制造”向“中国创造”转变。 这也是企业价值转移的趋势。 宏碁集团创始人施振…...

websevere服务器从零搭建到上线(四)|muduo网络库的基本原理和使用

文章目录 muduo源码编译安装muduo框架讲解muduo库编写服务器代码示例代码解析用户连接的创建和断开回调函数用户读写事件回调 使用vscode编译程序配置c_cpp_properties.json配置tasks.json配置launch.json编译 总结 muduo源码编译安装 muduo依赖Boost库&#xff0c;所以我们应…...

C语言笔记10

1.用指针打印一维数组 //1.用指针打印一维数组 #include <stdio.h> int main() {//int arr[] { 1,2,3,4,5 };int arr[5] { 0 };int* p &arr[0];int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i < sz; i){scanf("%d", &arr[i]);}//int* …...

BMS-HiL主要功能

BMS HIL 系统中 PC 机中安装实验管理软件用于测试过程管理和测试序列编辑&#xff0c;通过以太网与 PXI 机箱中的处理器进行连接&#xff0c;处理器中运行实时系统&#xff08;Real Time&#xff09;并安装 Veristand 终端引擎&#xff0c;通过与 PC 中的数据传输&#xff0c;对…...

idea无法识别加载pom.xml文件

有时idea无法识别加载pom.xml文件&#xff0c;直接打开pom.xml文件&#xff0c;然后添加到maven就行...

C语言笔记12

1.使用qsort函数进行排序 #include <stdio.h> #include <stdlib.h> #include <string.h>//void qsort(void* base, //指向待排序数组的第一个元素的指针 // size_t num, //base指向数组中的元素个数 // size_t size,//base指向的数组中一…...

说一下 hibernate 的缓存机制?

Hibernate 的缓存机制是为了提高应用程序的性能&#xff0c;通过减少对数据库物理数据源的访问频次而设计的。Hibernate 的缓存主要可以分为两个级别&#xff1a;一级缓存&#xff08;也称为 Session 级别的缓存&#xff09;和二级缓存&#xff08;也称为 SessionFactory 级别的…...

Mac安装jadx

1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注&#xff08;关于Homebrew &#xff09;&#xff1a; Homebrew 是 MacOS 下的包管理工具&#xff0c;类似 apt-get/apt 之于 Linux&#xff0c;yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…...

风扇开启执行逻辑

执行流程 public static void businessExecutionWork(){//以下为业务逻辑部分System.out.println("1、根据电池包控制风扇服务执行 开始!");//1、获取电池包电压、电流、环境温度//获取电池包电压、电流、环境温度ObtainBatteryDataService obtainBatteryDataServic…...

调用函数实现数组的输入排序插入与输出

输入一串数字&#xff0c;输出排序插入后输出最后的数字序列&#xff1b; 把主要步骤交给主函数&#xff0c;通过调用函数来实现整体的功能&#xff1a; 写出主函数&#xff08;这里使用冒泡排序&#xff09;&#xff1a; int main(){int n;int a[10];cin>>n;inputa(a…...

代码随想录算法训练营Day 41| 动态规划part03 | 343. 整数拆分、96.不同的二叉搜索树

代码随想录算法训练营Day 41| 动态规划part03 | 343. 整数拆分、96.不同的二叉搜索树 文章目录 代码随想录算法训练营Day 41| 动态规划part03 | 343. 整数拆分、96.不同的二叉搜索树343. 整数拆分一、动态规划二、贪心&#xff08;不需要掌握&#xff09; 96.不同的二叉搜索树一…...

多模态产品在智能文档处理应用的展望------以TextIn模型为例

前言发展现状TextIn 文档解析技术文本向量化展望合合信息 前言 第十四届视觉与学习青年学者研讨会(VALSE 2024)于5月5日-7日在山城重庆渝北区悦来国际会议中心举办。大会聚焦计算机视觉、模式识别、多媒体和机器学习等领域的国际前沿和热点方向。大会中&#xff0c;合合信息智能…...

上海市计算机学会竞赛平台2024年3月月赛丙组最近的数字

题目描述 给定两个正整数 &#x1d45b;n 与 &#x1d451;d &#xff0c;请找到所有最接近 &#x1d45b;n 且是 &#x1d451;d 的倍数的整数。 输入格式 第一行&#xff1a;单个整数表示 &#x1d45b;n第二行&#xff1a;单个整数表示 &#x1d451;d 输出格式 若干行…...

RFID在汽车制造中的应用如何改变行业

随着工业4.0和中国制造2025的推进&#xff0c;企业对于智能化、自动化的需求日益增长&#xff0c;RFID射频技术在制造业中已经相当普遍了。在如今这瞬息万变的行业与时代中&#xff0c;RFID技术可以帮助企业获得竞争优势&#xff0c;简化日益复杂的生产流程&#xff0c;推动企业…...

sCrypt受邀在中国人民大学举办《区块链与数字经济》课程讲座

4月17日&#xff0c;可一科技特邀美国sCrypt公司的开发工程师周全&#xff0c;在中国人民大学的《区块链与数字经济》课程上进行了讲座。周全讲解了区块链的分布式设计、不可篡改特性&#xff0c;以及智能合约的基本原理&#xff0c;利用“智能家居触发机制”等生动比喻&#x…...

pc端的鼠标箭头变换

<div style"cursor:pointer"></div>...

ICode国际青少年编程竞赛- Python-2级训练场-for循环练习2

ICode国际青少年编程竞赛- Python-2级训练场-for循环练习2 1、 for i in range(5):Dev.step(9 - i * 2)Dev.turnLeft()2、 for i in range(3):Spaceship.step(i 1)Spaceship.turnRight()Spaceship.step(i 1)Spaceship.turnLeft()3、 for i in range(4):Dev.step(10 - i…...

RiPro主题美化【支付弹窗底部提示语根据入口不同有不同的提示】ritheme主题美化RiProV2 增加支付提示语,按支付类型不同,入口不同提示语不同的设置

RiPro主题美化【支付弹窗底部提示语根据入口不同有不同的提示】ritheme主题美化RiProV2 增加支付提示语,按支付类型不同,入口不同提示语不同的设置 背景: 接上文:https://www.uu2id.com/827.html 付费组件在以下几个地方会弹出:1)文章隐藏内容付费;2)付费资源下载;3…...

MSMQ消息队列

MQ是一种企业服务的消息中间节技术&#xff0c;这种技术常常伴随着企业服务总线相互使用&#xff0c;构成了企业分布式开发的一部分&#xff0c;如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构&#xff0c;则可以考虑使用MQ做消息的中间价技术&#xff0…...

vibe coding效率高:一个新mcp server已经试运行尚可

下面是文档&#xff1a; judicial-doc-quality-mcp v0.1.0 司法裁判文书质量评估 MCP 服务器 — 桥接架构&#xff0c;零 LLM 调用 English | 中文 概述 judicial-doc-quality-mcp 是一个基于 Model Context Protocol (MCP) 的裁判文书质量评估服务器&#xff0c;采用**桥接…...

ESJsonFormat-Xcode与MJExtension完美结合:构建高效iOS数据模型

ESJsonFormat-Xcode与MJExtension完美结合&#xff1a;构建高效iOS数据模型 【免费下载链接】ESJsonFormat-Xcode 将JSON格式化输出为模型的属性 项目地址: https://gitcode.com/gh_mirrors/es/ESJsonFormat-Xcode ESJsonFormat-Xcode是一款专为iOS开发者打造的JSON转模…...

Frenet Corridor Planner:自动驾驶路径规划的核心技术解析

1. Frenet Corridor Planner&#xff1a;自动驾驶路径规划的核心突破在自动驾驶技术栈中&#xff0c;路径规划模块承担着将决策指令转化为可执行轨迹的关键角色。面对城市道路中突然出现的占道车辆或行人&#xff0c;传统基于固定路径的规划方法往往显得力不从心。Frenet Corri…...

当SuperPoint遇上C++ LibTorch:手把手教你将PyTorch视觉模型部署到生产环境(避坑实录)

SuperPoint与LibTorch的C工程化实战&#xff1a;从Python研究到生产部署的深度解析 在计算机视觉领域&#xff0c;PyTorch因其灵活性和易用性成为研究人员的首选框架&#xff0c;但当模型需要部署到生产环境时&#xff0c;C的高效性和稳定性往往成为必选项。本文将深入探讨如何…...

告别传统SwipeRefreshLayout!用Compose的pullRefresh()打造丝滑下拉刷新(附Paging3联动实战)

用Compose的pullRefresh()重构Android下拉刷新体验&#xff1a;从基础封装到Paging3深度集成 下拉刷新作为移动端最基础的用户交互之一&#xff0c;在Jetpack Compose时代迎来了全新的设计范式。传统Android开发中&#xff0c;我们习惯使用SwipeRefreshLayout包裹RecyclerView的…...

SBA系列生物传感分析仪的工作原理是什么?

SBA系列生物传感分析仪利用酶促反应来进行定量分析&#xff0c;测定的关键传感器是固定化酶和过氧化氢电极复合传感器&#xff0c;分析过程基于以下生化反应&#xff1a;底物 固定化酶膜 → 产物谷氨酸    谷氨酸氧化酶  α-酮戊二酸葡萄糖    葡萄糖氧化…...

NotebookLM具身智能落地实战(从零部署到ROS2集成):谷歌AI团队内部培训手册泄露版

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM具身智能研究 NotebookLM 是 Google 推出的基于用户自有文档进行语义理解与推理的 AI 助手&#xff0c;其核心能力在于“文档感知”&#xff08;document-grounded reasoning&#xff09;。当…...

Scroll Reverser:为什么你的Mac需要这款滚动方向控制神器?

Scroll Reverser&#xff1a;为什么你的Mac需要这款滚动方向控制神器&#xff1f; 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 作为一名设计师&#xff0c;李华每天在MacBook…...

FOC如何控制速度力矩大小,以及无感FOC检测电角度的方法

FOC 控制电机&#xff0c;本质就一句话&#xff1a; 通过控制三相电流&#xff0c;让定子磁场始终在“最合适的角度”拉着/推着转子转。 更工程一点说&#xff1a; 速度靠速度环调节&#xff0c;扭矩靠 q 轴电流 Iq 调节&#xff0c;电角度靠编码器/霍尔/无感估算得到。 1. …...

基于GIS流域水文分析及水库库容计算实践技术

1、GIS水文分析的原理、DEM数据的获取与处理2、基于水文分析的流域边界、河道及分子流域提取3、暴雨情景下流域淹没区快速识别4、基于GIS的水库库容计算...