因为都是一边学一边做,所以难免走一些弯路了,如果有什么错误希望各位指出来,谢谢

接着上次的思路,希望让添加的模型动起来,但连Gazebo官网上都是用urdf文件讲的……所以那还是用urdf文件吧

通过前面我们已经知道怎么让urdf文件形成的模型在gazebo里出现了(在launch文件中spawn一个),这一次希望它能动起来,基于一辆简单的“小车”模型吧,参考的这个项目以及官方教程。这个文件是已经完成的,还是从仅有模型形态的urdf文件开始,一步步来:

1. 添加标签

这一步比较简单,就是需要在urdf文件的标签下添加与joint相应的标签。

这个标签的作用是在joint上添加一个actuator(执行器),也很好理解,大致形式如下:

transmission_interface_SimpleTransmission

hardware_interface/VelocityJointInterface

hardware_interface/VelocityJointInterface

1

可以看到主要就是三部分的内容:type, joint和actuator

表示transmission的类型

指明将在哪个joint上添加执行器,用name给出该joint的名字。另外,其中还包含一个标签,用来指定一个支持的关节空间硬件接口。这句话是官方翻译过来的,感觉等于白说,还没仔细研究,不是很懂hardInterface是干啥的,留个坑

表示连接到joint的执行器,name表示它的名字。包含表示减速比。

来自官方的几个说明:

如果在Gazebo里加载这个transmission,里的的值应该是EffortJointInterface,而如果在RobotHW中加载,则该值应该是haedwareInterface/EffortJointInterface(当然不仅有EffortJointInterface,还有VelocityJointInterface, PositionJointInterface,或者自己写的类);

标签下的是可选项,而在ROS Kinetic版本以后就不在这里出现了,而是在标签里,这个应该是一个bug,所以Gazebo官方里要求两个地方都写,不过我也在Kinetic中测试过,去掉之后也可以运行。

到此为止,相当于是模型部分弄完了,加的transimission也算是实际机器人的硬件部分,所以我就暂时把这以前的内容视为一大部分,接下来就是控制器部分,相当于软件部分。虽说我把以后的工作与前面分开来,但并不代表不再对urdf文件进行操作了,只是说从功能的上,我个人觉得这样划分更易于理解。

2. 添加gazebo_ros_control plugin

ROS里有个ros_control包,用于机器人的控制,相应的,在Gazebo里使用则需要在urdf文件中添加一个gazebo plugin:

/MYROBOT

默认使用这样就够了,但是我在运行的时候遇到了一个关于什么legacyNS的报错,查了一下,需要在里面添加一条:

true

3. 新建一个ros_controls包

新建一个新ROS包

mkdir ~/catkin_ws

cd~/catkin_ws

catkin_create_pkg MYROBOT_control controller_manager joint_state_controller robot_state_publisher

cd MYROBOT_controlmkdirconfigmkdir launch

新建.yaml配置文件

.yaml文件用于配置控制器的类型和PID参数(为啥一定是PID控制器?),MYROBOT_control大概长这样:

MYROBOT:#controls the rear two tires based on individual motors

#Publish all joint states -----------------------------------

joint_state_controller:

type: joint_state_controller/JointStateController

publish_rate:50

#Controllers -----------------------------------

SOME_JOINT_controller:

type: velocity_controllers/JointVelocityController

joint: SOME_JOINT

pid: {p:100.0, i: 0.01, d: 10.0}

ANOTHER_JOINT_controller:

type: effort_controllers/JointPositionController

joint: ANOTHER_JOINT

pid: {p:100.0, i: 0.01, d: 10.0}

这里要注意controller的type,要和transimission中的hardwareInterface类型相对应。

在launch文件中添加controller节点启动语句

这里主要是为了加载.yaml文件,以及启动controller的spawn节点,网上的帖子大部分是另外写了一个launch文件,我是直接写在之前我们启动机器人的launch文件中了,也是可以的:

注意SOME_JOINT_controller等对应着MYROBOT_control.yaml里的SOME_JOINT_controller等名字。

至此,所有的文件和内容都准备好了,通过roslaunch启动以上launch文件,就可以看到小车出现在gazebo的世界中了,这时候通过rostopic list可以看到以下topics,比原来多了关于controller的topics

/clock

/gazebo/link_states

/gazebo/model_states

/gazebo/parameter_descriptions

/gazebo/parameter_updates

/gazebo/set_link_state

/gazebo/set_model_state

/gazebo_gui/parameter_descriptions

/gazebo_gui/parameter_updates

/rosout

/rosout_agg/MYROBOT/joint_states/MYROBOT/SOME_JOINT_controller/command/MYROBOT/ANOTHER_JOINT_controller/command

通过rostopic pub向controller发送指令

rostopic pub -r 10 /MYROBOT/SOME_JOINT_controller/command std_msgs/Float64 "data: 100.0"

因为我这边是用的一辆小车,joint是小车的轮子,这时候发现小车并没有动,或只是动了一下,但其实在Gazebo中选定那个轮子发现他其实是在转动的,所以就是说它在空转…这是因为在urdf文件中没有添加轮子的摩擦力标签,其默认是1。所以需要在urdf中添加以下标签,告诉Gazebo轮子的摩擦系数。由此可以看出,Gazebo作为一个物理仿真软件,一切都是物理定理驱动的。

10000000

10000000

10000000

1

10000000

10000000

10000000

1

其中mu1和mu2表示其摩擦系数,kp和kd表示其刚性,具体参见关于标签的说明。

重新启动,在pub一下就可以看到小车疯狂转圈了~但是由于4个轮子还没有协同控制,小车跑起来怪怪的。

至此,ros已经和gazebo连起来了,我们也可以用ros给gazebo里面的机器人发布命令了,散花。

gazebo设置_GAZEBO学习笔记(3)相关推荐

  1. python图形设置_python学习笔记——基本图形绘制

    1.python蟒蛇python蟒蛇代码 #PythonDraw.py import turtle turtle.setup(650,350,200,200)# 设置画布的长.宽.起点 turtle. ...

  2. a标签里面设置onclick_HTML学习笔记:各种常用标签

    今天是刘小爱自学Java的第76天. 感谢你的观看,谢谢你. 话不多说,继续html的学习: 昨天学习了最基础的文本标签及属性,除此之外还有很多其它标签,今天逐一学习. 一.链接标签(a标签) a标签 ...

  3. 最大化窗口设置_Qt学习笔记4(窗口操作及插入图片)

    窗口操作: Qt全屏显示函数 showFullScreen() Qt最大化显示函数 showMaximized() Qt最小化显示函数 showMinimized() Qt固定尺寸显示函数 resiz ...

  4. 目标检测——初始学习率设置的学习笔记

    1 学习率的搜索策略 我们采用双向搜索的方法进行搜索: 也就是从初始学习率,按照增大学习率和减小学习率两个方向进行搜索: 于是在分方向进行搜索之前,我们需要设置学习率的初始搜索点, 搜索点的初始设置可 ...

  5. java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限

    系统Ubuntu16.04 LTS 1.开放3306端口 查看端口状态: netstat -an|grep 3306 tcp        0      0 127.0.0.1:3306        ...

  6. AD学习笔记(一)基础认识

    文章目录 AD学习笔记 第一讲 AD基础认识 一.两库两图(分别对应下图) 1.PCB图(pcbdoc) 2.原理图(schdoc) 3.原理图库(schlib) 4.PCB库(pcblib) 二.封 ...

  7. Cuda学习笔记(一)——sm流处理器簇对blocks的调度策略

    由于GPU目前在各行各业的广泛应用,无论是深度学习.大数据.云计算等都离不开GPU的并行加速,前阵子自学了Cuda-c编程,希望将来的研究工作能够用得上. Cuda系列总共有4篇,这里主要用于记录本人 ...

  8. ViSP学习笔记(四):在Gazebo环境下实现Pionner3dx移动机器人基于四个特征点的视觉伺服仿真

    开发环境:Unbuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyg ...

  9. opengl 设置每个点的颜色_OpenGL学习笔记(四)着色器

    本文为学习LearnOpenGL的学习笔记,如有书写和理解错误还请大佬扶正: 教程链接: 着色器 - LearnOpenGL CN​learnopengl-cn.github.io 一,基础概念 1, ...

  10. mat opencv 修改roi_设置图片ROI(OpenCV学习笔记之二)

    ROI相关简介 ROI是什么 ROI是region of interest首字母的简写,翻译为感性趣的区域.其实在写本篇之前应该写一篇关于图片是什么的学习笔记,但又感觉里面没多少东西还不能承载一篇学习 ...

最新文章

  1. influxdb tsm文件_利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏
  2. 用Python进行SQLite数据库操作
  3. 【python】基础知识
  4. cf1208G Polygons 欧拉函数
  5. 软件项目周报模板_一份高质量的职场工作周报,要这样写
  6. 数据库查询字段为空时,返回0
  7. zookeeper使用分布式锁
  8. 【ArcGIS|空间分析】查找成本最低路径
  9. 永磁同步电机转子磁链_永磁同步电机转子初始位置检测、增量式光电编码器对位调零思路解析...
  10. Python连接presto
  11. java实现视频加密_JAVA实现视频加密
  12. Java之UUID生成
  13. RCWL-0516微波雷达感应开关 人体感应传感器,迷你多普勒雷达
  14. 龙少的Linux配置大全
  15. 2023 IEEE Fellow出炉:唐立新、宗成庆、朱军、姬水旺、李佳等入选
  16. 加密机是如何工作的_什么是加密,它如何工作?
  17. HTML背景墙上加图标,背景墙挂件—背景墙上放一些什么挂件好
  18. YUV Player Deluxe 注册
  19. 让文字功力从优秀走向精致——25位专业人士的写作心得
  20. 全文检索服务----Elasticsearch

热门文章

  1. HDFS配置之NN-SNN-DN
  2. 微分方程_偏微分方程
  3. [INFO1110课件讲解 一] USYD悉尼大学INFO1110 ED lessons Week1 课件 作业 assignment讲解
  4. 实验吧_网站综合渗透_Discuz!
  5. 如何在 vscode 中更换炫酷的背景图
  6. 【转】codelite
  7. mysql 空洞 性能_mysql 删除数据空洞有关问题,多谢
  8. 设计模式---003代理模式(转载自我的老师 Alley-巷子)
  9. MobileNet_v1:深度可分离卷积
  10. java + selenium 实现QQ快速安全登录xx网站