Gazebo中的平面运动 (urdf+控制器设置)及所遇见的问题

2023-05-16

这里有个视频,介绍怎么让机器人在平面运动(在x和y方向上进行平移):https://www.youtube.com/watch?v=mtSpqObg9X4
如果你们看不了视频也没关系,就下载他的代码看一下也能明白:

$ git clone https://bitbucket.org/theconstructcore/plannar_mover.git
$ roslaunch plannar_mover kinetic_main.launch 

问题1:运动过程中上平面掉下来

上面这个视频,作者提到一个问题,就是运动过程中,上面的平面会掉下来,大家可以看视频下方的评论,我进行了解答:
因为作者给下层的那个板子的平移轴 x_axis_joint设的原点设错了,设成了 <origin xyz="0 0 0.01" rpy="0 0 0" />,改成<origin xyz="0 0 0" rpy="0 0 0" /> 就好了。

xy轴平移关节的设计

先上我正确的代码:

<joint name="x_axis_joint" type="prismatic">
    <parent link="world"/>
    <child link="x_axis_planar"/>
    <origin xyz="0 0.0 0.00" rpy="0 0 0" />
    <axis xyz="1 0 0" />
    <limit effort="50" velocity="1" lower="-${x_limit}" upper="${x_limit}" />
</joint>
<joint name="y_axis_joint" type="prismatic">
    <parent link="x_axis_planar"/>
    <child link="y_axis_planar"/>
    <origin xyz="0 0.0 0.0" rpy="0 0 0" />
    <axis xyz="0 1 0" />
    <limit effort="50" velocity="1" lower="-${y_limit}" upper="${y_limit}" />
</joint>

对应的控制器在一个yaml文件中设置,在作者给出的代码里是这个文件:plannar_mover_control.yaml,里面给xy轴用的是位置控制器。
除此之外,我们还可以选择用速度控制器和力量控制器,更多介绍参考:
https://www.guyuehome.com/890 这个链接里古月居老师不仅介绍了各种控制器,还介绍了各处接口设置。要是大家看了有什么疑问也可以在评论区提问(我)。
这里给一个我使用力量控制器和速度控制器的yaml示例:

x_axis_controller:
  type: effort_controllers/JointEffortController
  joint: x_axis_joint
y_axis_controller:
  type: effort_controllers/JointEffortController
  joint: y_axis_joint
yaw_controller:
  type: effort_controllers/JointVelocityController
  joint: joint1
  pid: {p: 500.0, i: 0.0, d: 0.1, i_clamp: 0.0}
up_down_controller:
  type: effort_controllers/JointPositionController
  joint: joint2
  pid: {p: 100000.0, i: 0.0, d: 0.1, i_clamp: 1.0}

这里可以看到,xy轴用的力量控制,joint1用的速度控制(yaw),joint2用的位置控制(上下)。

问题2:pid设置太小会无法移动

从我的示例可以看到,我给控制上下的轴设了非常大的p值,这是因为我的轴上方承载了很重的东西,如果设小了就会发现这个轴动不了,设了非常大的p值之后它就可以动了。

以下介绍力量控制器和速度控制器的优缺点。

使用力控制器的弊端

  • 关节运动到达限位时可能会发生反弹,需要自己设置减速
  • 假如我们希望把运动机器人的速度设为0,我们只能通过joint_states的速度值来自己通过不断加减速(比如自己写一个pid调力算法)来使速度为0,而无法直接写速度值。

使用力控制器的优势

  • 不需要调控制器的pid值,我们可以自己设置力的大小,不管p设置成多少,哪怕是0,关节还是会按照我们给的力的大小来运动。
  • 加速度可控:只要力量设置合理,不会发生突然的加减速

使用速度控制器的弊端

直接给一个较大的速度会发生非常快的加减速,假如你有要求不能imu突然加速度过大的话,这会是一个问题。

问题2:运动x轴时发现上层的y轴关节会平移

不论我给xy轴的关节设置为 effort_controllers/JointEffortController 还是 effort_controllers/JointVelocityController ,发现一移动x轴,y轴也会发生一些位移。就是说我只给 /multi_sensor_platform/x_axis_controller/command 发速度/力,而y轴发速度/力 为0,发现除了x方向发生运动,y方向的轴也发生了肉眼可见的位移。
解决:后来把urdf的力量限制调小就好了。

原来我的urdf里设置的力限制是5000,即

<limit effort="5000" velocity="1" lower="-${y_limit}" upper="${y_limit}" />

把它改成50就好了。我猜测是因为我把下面大板子质量设的很小(mass=0.1)而上面传感器部分太重,并且传感器在y轴正负方向上并不平衡(比如说y正方向比较重),一旦x轴运动,就会带动y轴也发生一些运动。

如果觉得文章有帮助,记得关注我谢谢哟~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gazebo中的平面运动 (urdf+控制器设置)及所遇见的问题 的相关文章

  • FreeRTOS系列|开发环境

    开发环境搭建 1 硬件开发环境 FreeRTOS系列所使用的硬件为STM32F103ZET6开发板 2 软件开发环境 2 1 Keil MDK ARM软件简介及安装 2 1 1 Keil MDK ARM简介 Keil MDK xff0c 也
  • 陀螺仪加速度计MPU6050

    转载自 xff1a http www crazepony com wiki mpu6050 html 陀螺仪 陀螺仪 xff0c 测量角速度 xff0c 具有高动态特性 xff0c 它是一个间接测量角度的器件 它测量的是角度的导数 xff0
  • 机器学习-Anomaly Detection

    Problem Motivation 异常检测 Anomaly detection 是机器学习算法的一个常见应用 这种算法的一个有趣之处在于 xff1a 它虽然主要用于非监督学习问题 xff0c 但从某些角度看 xff0c 它又类似于一些监
  • Quadrotor四旋翼飞行器的飞…

    原文地址 xff1a Quadrotor四旋翼飞行器的飞行原理 xff08 一 xff09 作者 xff1a hxl85 http en wikipedia org wiki Quadrotor 这是wiki上的介绍 xff0c 有兴趣可以
  • 姿态解算知识(三)-陀螺仪加速度计6轴数据融合

    这么久的惯导总算是没白看 xff0c 加上一篇博客的指点 xff0c 这两天把Mahony的九轴数据融合算法看懂了 可惜第二版硬件还没到 xff0c 磁力计用不了 xff0c 没法验证效果 今天先总结下陀螺仪和加速度计的六轴数据融合 版权声
  • (含代码)ESP8266+舵机 制作wifi灯控开关(arduino,点灯科技,小爱同学/天猫精灵实现)

    目录 项目涉及的主代码 前言 一 环境搭建 二 开发步骤 1 注册点灯科技平台 2 在点灯科技平台注册设备 xff0c 获取Secret Key 3 在Arduino IDE中编写代码 xff0c 写入ESP8266 4 编译固件 xff0
  • C语言实现学生成绩管理系统

    学生管理系统 主界面 功能选择界面 所用的函数 函数名 int Num void 函数功能 得到学生人数 函数代码 得到学生人数 int Num void printf 34 请输入学生的人数 n 34 scanf 34 d 34 amp
  • 因式分解

    因式分解是数学中一种常见的计算 xff0c 也是编程中一种非常常见的编程方法 因式分解是指将一个非质数分解成几个质数的积 如 xff1a 4 61 2x2 100 61 2x2x5x5 算法代码 xff1a include lt stdio
  • 在控制台程序中播放音乐

    看过我的博客的人都知道 xff0c 在C语言中调用几个API函数就可以播放音乐了 xff0c 而我在博客中也写过Windows图形界面编程中做过一些与音乐有关的程序 xff0c 如 音乐播放器 音乐贺卡 等 xff0c 可是如果要你在控制台
  • 常用的DOS命令

    xfeff xfeff CMD命令 xff1a 开始 xff0d gt 运行 xff0d gt 键入cmd或command xff08 在命令行里可以看到系统版本 文件系统版本 xff09 1 appwiz cpl xff1a 程序和功能
  • FreeRTOS系列|任务基础知识

    任务基础知识 1 多任务系统 1 1 前后台系统 单片机裸机开发时 xff0c 一般都是在main函数里面用while 1 做一个大循环来完成所有的处理 xff0c 循环中调用相应的函数完成所需的处理 有时也需要在中断中完成一些处理 相对于
  • 链表《5》使用链表实现学生成绩管理系统

    上次我使用动态数组结构体实现了学生成绩管理系统 xff1a http blog csdn net u010105970 article details 17752193 这次学习了链表对链表也有所了解 xff0c 我就想着用链表实现学生成绩
  • 得到一个数字中每一位的数字

    学习编程也有一段时间了 xff0c 随着学习的不断深入 xff0c 我越来越体会到了算法的重要性 xff0c 最近遇到了一些非常有意思的算法 xff0c 比如打印水仙花数 将数字逆置 xff0c 在这两个算法中会用到一个数字钟每一位的值 如
  • 使用C++实现学生管理系统

    我在前面的博客中分别使用C语言的动态数组和链表实现了学生成绩管理系统 xff0c 最近正好在学习C 43 43 xff0c 于是我便使用C 43 43 实现了学生成绩管理系统 xff0c 算法和前面的C语言的动态数组实现的学生成绩管理系统差
  • 制作一个简单的Android版的音乐播放器

    音乐播放器是一个非常常见的应用 xff0c 这篇博客就是介绍如何制作一个简单的音乐播放器 xff0c 这款音乐播放器具有以下的功能 xff1a 播放歌曲 暂停播放歌曲 显示歌曲的总时长 显示歌曲的当前播放时长 调节滑块可以将歌曲调节到任何时
  • 使用Less

    为什么要使用预处理CSS 在使用CSS过程中会遇到一个非常头疼的问题 xff0c 因为CSS中没有像java C 43 43 或者PHP等程序语言一样有有自己的变量 常量 条件语句以及一些编程语法 xff0c 只是一行行单纯的属性描述 xf
  • 使用Gulp

    为什么要使用Gulp 在前端开发中通常需要做 xff0c 预处理语言的编译 js文件的压缩 css文件的压缩 图片的压缩等一系列工作 xff0c 而使用Gulp可以自动化的完成这些工作 xff0c 从而提高网站的开发效率 xff0c 在我的
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • CMakeList的基本写法

    最近需要自己写CMakaList xff0c 所以简要写一下一些基本的操作 为图实用 xff0c 只写了常用的简单操作 1 确定cmake最低版本需求 span class hljs function span class hljs tit
  • SLAM的一点认识

    SLAM的一点认识 本人邮箱 xff1a sylvester0510 64 163 com xff0c 欢迎交流讨论 xff0c 欢迎转载 xff0c 转载请注明网址http blog csdn net u010128736 一 我与SLA

随机推荐