gazebo仿真与ros控制器学习

2023-11-04

gazebo是一个功能强大的模拟器,尤其适合机器人的运动和控制模拟,但也存在很多bug

官方学习地址:http://gazebosim.org/tutorials

包括了所有的教程,从初级中级到高级,也可以按照分类进行学习

这里主要讲与ros控制器相关的知识。

相关地址:http://gazebosim.org/tutorials/?tut=ros_control

这张图我也是理解了一个大概:其中很多内容难免有些晦涩。

gazebo模拟器和真实机器人的主要区别就在硬件接口定义这里,因为我只是用到了gazebo模拟器,所以真实情况不会涉及,如有需要请自行搜索相关资料。

在urdf机器人模型中需要定义transmission和joint等,并添加gazebo_ros_control插件,详见

type里面:the type of transmission. Currently only "transmission_interface/SimpleTransmission

<hardwareInterface>硬件接口这里模拟器所以是EffortJointInterface,可以实现基于功率的位置速度控制器,此外还有JointStateInterface,VelocityJointInterface ,使用方法未知

官方的实例

 <transmission name="tran1">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="joint1">
      <hardwareInterface>EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="motor1">
      <hardwareInterface>EffortJointInterface</hardwareInterface>
      <mechanicalReduction>1</mechanicalReduction>
    </actuator>
  </transmission>

  <transmission name="tran2">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="joint2">
      <hardwareInterface>EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="motor2">
      <hardwareInterface>EffortJointInterface</hardwareInterface>
      <mechanicalReduction>1</mechanicalReduction>
    </actuator>
  </transmission>

此外还需要一个.yaml文件,用于加载控制器参数,比如pid以及速度加速度限制位置限制等

rrbot:
  # Publish all joint states -----------------------------------
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50  

  # Position Controllers ---------------------------------------
  joint1_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint1
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint2_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint2
    pid: {p: 100.0, i: 0.01, d: 10.0}

注意其中joint名字和type类型对应transmission

定义的是位置控制器

下面是launch文件

<launch>

  <!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find rrbot_control)/config/rrbot_control.yaml" command="load"/>

  <!-- load the controllers -->
  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
    output="screen" ns="/rrbot" args="joint1_position_controller joint2_position_controller joint_state_controller"/>

  <!-- convert joint states to TF transforms for rviz, etc -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
    respawn="false" output="screen">
    <remap from="/joint_states" to="/rrbot/joint_states" />
  </node>

</launch>

这里的robot_state_publisher订阅了关节信息用于发布机器人状态

可以通过rosrun rqt_gui rqt_gui来查看所有topic是否正常发布。

通过指令可以控制ros_controller位置:

rostopic pub /pxdx/joint1_position_controller/command std_msgs/Float64 "data: 0.9"
rostopic pub /pxdx/joint2_position_controller/command std_msgs/Float64 "data: 0.9"

或者通过cmd_vel指令来控制运动

 rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/pxdx/cmd_vel

发布joint_state topic的两种方式:

.方式一:.yaml文件中加载joint_state_controller,launch文件中添加joint_state_controller,但是只能发布带有transmission的joint

.方式二:通过gazebo插件可以发布所有添加的joint

<gazebo>
    <plugin filename="libgazebo_ros_control.so" name="ros_control">
    </plugin>
    <plugin name="joint_state_publisher" filename="libgazebo_ros_joint_state_publisher.so">
      <jointName>
          bh_j11_joint, bh_j12_joint, bh_j13_joint, bh_j21_joint, bh_j22_joint, bh_j23_joint,
          bh_j32_joint, bh_j33_joint, elbow_joint, shoulder_lift_joint, shoulder_pan_joint,
          wrist_1_joint, wrist_2_joint, wrist_3_joint
      </jointName>
      <updateRate>50</updateRate>
      <alwaysOn>true</alwaysOn>
    </plugin>
  </gazebo>

目前看两种并不冲突。

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

gazebo仿真与ros控制器学习 的相关文章

随机推荐

  • vue 项目代码混淆配置(自定义插件适用)带配置项注释

    文章目录 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 二 混淆步骤 1 引入混淆插件 2 添加混淆配置 3 执行代码混淆 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 本文章适用 vue cli3
  • clickhouse--副本、分片、Distributed

    副本的目的防止数据丢失 保证高可用 分片则是实现数据的水平切分 使用副本需要使用replicatedMergeTree存储引擎 MergeTree存储引擎存储数据时首先将数据写入内存缓冲区 然后数据被写入本地磁盘临时目录分区 待全部完成后再
  • Spring Boot 整合redis

    1 在pom xml 添加Spring Boot 的redis 依赖
  • zedboard @ vivado:SDK 加载失败

    参考链接 vivado SDK那些事儿 初试 宋桓公 vivado launch SDK ERROR Timed out 180 seconds have elapsed while waiting for XSDB server to l
  • iOS实训笔记—页面跳转与传值

    iOS开发实训第九周周报 学习知识点归纳 1 页面跳转的方式 1 UITableBarController 标签栏控制器 中的界面跳转 BOOL application UIApplication application didFinish
  • 移动端开发rem实现屏幕适配及处理页面加载页面坍塌样式错乱网页闪烁问题

    rem布局在加载的时候会出现元素一开始很小 闪烁一下恢复正常大小 问题的原因无非就是html一开始没有设置字体大小嘛 那我们就一开始按最常用的iPhone 6 尺寸 设置html的font size 50px 好了 设置html的font
  • 华为OD机试真题-水库蓄水 【2023.Q1】

    题目内容 山脉间建一个天热蓄水库 如何选取水库边界 使蓄水量最大 要求 山脉用正整数数组s表示 每个元素代表山脉的高度 选取山脉上两个点作为蓄水库的边界 则边界内的区域可以蓄水 蓄水量需排除山脉占用的空间 蓄水量的高度为两边界的最小值 如果
  • C++之this指针概念及用法

    我们知道在C 中成员变量和成员函数是分开存储的 每一个非静态成员函数只会诞生一份函数实例 也就是说多个同类型的对象会共用一块代码 那么问题是 这一块代码是如何区分那个对象调用自己的呢 C 通过提供特殊的对象指针 this指针 解决上述问题
  • CSR867x — Speaker Equalizer曲线调试笔记

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 或进群 471144274 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最
  • 面试了一个 31岁的iOS开发者,思绪万千,30岁以上的程序员还有哪些出路?

    前言 之前HR给了我一份简历 刚看到简历的第一眼 31岁 让我有点意外 实际上 现在开发趋向于年轻化 大部分都是90后 95后 毕竟 软件开发不像硬件开发一样 年限越高 相对来说越吃香 31岁 iOS开发工程师 工作经历7年 5年左右都在外
  • vscode操作vue项目的相关步骤

    1 vscode下载安装https code visualstudio com vue插件的安装 1 vetur 该插件是vue文件基本语法的高亮插件 在插件窗口中输入vetur点击安装插件就行 装好后点击文件 gt 首选项 gt 设置 打
  • 合并有序的链表

    合并有序的链表 这里是升序 只是改变指针的方向O n 也是一道超经典的题目 完整实现如下 include
  • iOS自定义弹出窗口

    链接 https www jianshu com p b9bba621b295 先看示例 最终效果图 gif 首先搭建好基础界面 void viewDidLoad super viewDidLoad 设置背景色 self view back
  • [LeetCode]面试题 17.05. 字母与数字

    给定一个放有字母和数字的数组 找到最长的子数组 且包含的字母和数字的个数相同 返回该子数组 若存在多个最长子数组 返回左端点下标值最小的子数组 若不存在这样的数组 返回一个空数组 示例 1 输入 A 1 B C D 2 3 4 E 5 F
  • linux脚本中使用ftp,在shell脚本中使用ftp的方法分享

    有时 我们需要通过ftp传送文件到另一台机器 通常情况下 可以通过交互式的命令行来完成 但对于数据量较多的情况来讲 这样的操作会很烦琐 此时 可以写一段shell脚本 实现ftp文件的自动传输即可 可能的问题 在shell脚本中用FTP传输
  • python2.7 使用super关键词 报错 TypeError: must be type, not classobj 解决办法

    原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http yeelone blog 51cto com 1476571 971591 今天遇到这个错误 Traceback most re
  • 在Oracle中创建新用户, 并且赋予该用户查看其他用户视图的权限

    本文由Markdown语法编辑器编辑完成 1 需求提出 在HIS与第三方系统进行集成时 某第三方系统需要访问HIS数据库的视图而非全部的数据库表 HIS的数据库为Oracle 因此需要在Oracle中在原有用户的基础上 再增加一个用户 该用
  • 什么是NetDevOps

    NetDevOps 是一种新兴的方法 它结合了 NetOps 和 DevOps 的流程 即将网络自动化集成到开发过程中 NetDevOps 的目标是将虚拟化 自动化和 API 集成到网络基础架构中 并实现开发和运营团队之间的无缝协作 开发运
  • npm 查看包的所有版本号

    这里以 vue cli 脚手架为例 npm view vue cli versions dengzemiao dengzemiaodeMacBook Pro uniapp npm view vue cli versions 3 0 0 al
  • gazebo仿真与ros控制器学习

    gazebo是一个功能强大的模拟器 尤其适合机器人的运动和控制模拟 但也存在很多bug 官方学习地址 http gazebosim org tutorials 包括了所有的教程 从初级中级到高级 也可以按照分类进行学习 这里主要讲与ros控