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控制器学习 的相关文章

  • Symfony2 在包和控制器之间传递数据

    这更像是一个 最佳实践 问题 而不是一个实际问题 我正在 Symfony 2 中开发一个项目 并且构建了一个包来处理我的所有 Web 服务 基本上 一个控制器获取一些 JSON 数据 将其发送到另一个控制器以检查其是否与所描述的格式匹配 然
  • 视图应该依赖于它的控制器吗? (ASP.NET MVC)

    这里有一个关于 ASP NET MVC 的设计 使用的问题 在html帮助器类中 您可以通过Html ViewContext Controller获取当前控制器 此外 您可以从 html 帮助器类获取请求 路由集合等 这不违背MVC的规则吗
  • 如何在 ASP.net 控制器操作中访问整个查询字符串

    我知道如果我有一个像 XController Action id 1 这样的 url 和一个操作方法 void Action int id id 参数将自动从查询字符串中读取 但是 当我事先不知道所有参数的名称时 如何访问整个查询字符串 例
  • 服务层=应用层=GRASP控制器层[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我认为服务 应用程序层与 Larman 描述的 GRASP 控制器相同 是 GUI 层之外委托给域层的
  • 在控制器上声明 ViewBag

    我在控制器的方法中多次使用具有相同消息的 ViewBag Message 可以在类的顶部声明 ViewBag Message 这样就可以在整个控制器中使用而无需重复代码吗 假设 Razor 语法可以实现这一点 string pageMess
  • 如何使用 PyQT5 连接和分离外部应用程序或对接外部应用程序?

    我正在使用 ROS 为多机器人系统开发 GUI 但我对界面中最不想做的事情感到困惑 在我的应用程序中嵌入 RVIZ GMAPPING 或其他屏幕 我已经在界面中放置了一个终端 但我无法解决如何向我的应用程序添加外部应用程序窗口的问题 我知道
  • Java FX 更改前一阶段场景中的标签文本

    我有一个Main启动我的应用程序的类有其MainControllerfxml 中指定的类 当点击Connect按钮打开另一个具有不同场景和控制器的窗口 基于我想要改变的行动Label通过 my 的文本值MainController 但它没有
  • 我该如何解决这个问题?单元类型存在于两个dll文件中

    我目前正在学习使用 Visual Studio 11 beta 的教程 当尝试在我的一个类中设置字段值的最大长度时 MaxLength 50 public string LastName get set 它出错并且不会让我编译 因为MaxL
  • 我可以获取视图中当前控制器的名称吗?

    有没有办法从视图中找出当前控制器是什么 举个例子说明为什么我想知道这一点 如果多个控制器共享相同的布局 我可能在布局 ERB 文件中包含一部分 我想在其中突出显示基于控制器的当前页面的菜单项 也许这是一个糟糕的方法 如果是这样 更优选的方法
  • 在 Symfony2 中向删除表单添加“确认选项”的最佳方法是什么?

    如果您使用控制台为 Symfony2 中的实体创建 CRUD 代码 您最终将得到一个非常基本的删除功能 此功能简洁高效 但不提供 您确定吗 确认 如果要删除的实体存在 则立即删除 有人对添加用户确认的最简单方法有建议吗 到目前为止我一直在使
  • 如何重命名项目中的 Rails 控制器和模型

    我启动了一个 Rails 应用程序 一切正常 但现在 我想重命名控制器和关联的模型 我想改变Corps控制器到Stores模型也相同 没有最后的 s 在谷歌上查看 人们建议销毁然后重新生成控制器和模型 问题是它会删除每个文件的实际代码 解决
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 如何在 Spring Boot 中从 RESTful 控制器返回 HTML 页面?

    我想从控制器返回一个简单的 HTML 页面 但我只得到文件的名称而不是其内容 为什么 这是我的控制器代码 RestController public class HomeController RequestMapping public St
  • 如何在Spring-MVC方法中绑定抽象类的子类?

    给定 Spring MVC 控制器中的 保存 方法 RequestMapping value save public void save ModelAttribute MY KEY final MyModel myModel 拥有位于myM
  • 在 spring3 控制器上返回“ModelAndView”或“String”哪个更好

    ModelAndView的返回方式 RequestMapping value list method RequestMethod GET public ModelAndView list UserAuth UserAuth user Mod
  • Rails 2 到 Rails 3,控制器中的方法验证消失了吗?

    来自 Rails 2 的我的大多数控制器都会有这些行 verify method gt post only gt create render gt text gt 405 HTTP POST required status gt 405 a
  • AppDelegate 或 AppController

    在阅读可可教程时 我注意到一些教程使用AppDelegate还有一些AppController用于定义IBActions打开使用子类的各种窗口NSWindowController 这有某种经验法则吗 我创建一个仅是我的应用程序委托的类 并实
  • GEF + EMF:为什么当调用refreshChildren() 时,我的编辑器不删除已删除对象的图形?

    我已经为类似图形的 EMF 模型实现了 GEF 编辑器 并为图形中的某种类型的节点提供了删除命令 我想我已经完成了所有必要的步骤以使此设置正常工作 vainolo https stackoverflow com users 817399 v
  • ASP.NET MVC 2 - POST 后 ViewData 为空

    我真的不知道在哪里寻找错误 情况 我有一个 ASPX 视图 其中包含一个表单和一些输入 当我单击 提交 按钮时 所有内容都会 POST 到我的一个 ASP NET MVC 操作 当我在那里设置断点时 它被正确命中 当我使用 FireBug
  • JavaFX TabPane - 每个选项卡一个控制器

    我是 Fx 新手 我有一个带有 10 个选项卡的 TabPanel 每个选项卡都有很多控件 图表 按钮等 我想要的是为每个选项卡分配一个控制器 SceneBuilder 只让我为整个视图分配一个控制器 我的意思是 只有顶部面板 根 具有 控

随机推荐

  • 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控