利用ros控制gazebo节点

一、 目标

如下图1是我在gazebo里弄的两个关节,和他们之间的节点,此次实践目标是用python程序,控制节点运行。如图2所示。

python 运动模糊 python做运动控制_python 运动模糊


图1

python 运动模糊 python做运动控制_python 运动模糊_02


图2

二、 步骤

1. model.urdf文件配置

红色蓝色两根关节就不讲了,可以看看urdf文件,主要关注gazebo插件配置部分

python 运动模糊 python做运动控制_python 运动模糊_03


图3

a. joint部分

主要是配置关节的属性,比如关节连接点,旋转轴和旋转方式,具体配置看下图

python 运动模糊 python做运动控制_python 运动模糊_04

b). trans部分

python 运动模糊 python做运动控制_自定义_05


python 运动模糊 python做运动控制_python_06

transmission是硬件抽象层中的一部分,配置都差不多,主要是记住两个name,第一个自定义,第二个是相应的joint name,比如上面joint部分讲的。

c) control部分
照抄就行,都一样,一个urdf文件只需要写一次

2. config.yaml文件配置

python 运动模糊 python做运动控制_python_07


a) 注意第一行的model,这个是跟urdf文件里声明的robot name一致

b) 第一个joint_state_controller,主要是发布节点信息,只需要写一次即可,照抄

c) 第二个one_to_two_position_controller名字为自定义(后面要用,不能重复),type为JointPositionController,也就是直接控制节点的位置,而不是速度什么的,joint为urdf相应的joint 名字(参考图3)3. launch文件部分

python 运动模糊 python做运动控制_加载_08


a) 1启动gazebo

b) 2为加载上面说的config.yaml文件

c) 3为加载urdf文件

d) 4将urdf文件的模型,放到gazebo里

e) 5使第2步加载的config.yaml文件生效,注意args参数的内容,有两个 controller,是跟config.yaml里的内容对应的。

f) 发布gazebo里关节点的状态

4. control.py代码(主要看代码注释,这里讲解核心部分)
a) 由于我们是控制节点的位置信息,在这个例子里就是旋转角度,所以发布一个数字给节点即可,这个消息类型为std_msgs.msg 里面的Float64,使用方法很简单,如下所示

position = Float64()
position.data = v
pub_joint_command.publish(position)

其中v为一个数字,比如0.5,就代表旋转0.5个弧度(注意是弧度,不是角度),然后再利用一个发布者将这个消息发送出去。

5. 功能包使用方法
a) 打开launch文件

roslaunch communication_demo gazebo.launch

b) 运行control.py文件

rosrun communition_demo control.py 0.5

后面的数字可选,代表相应的弧度

c) 执行上述两步后,也可以用cmd_vel命令控制节点,拨动下图中间的白色小方块即可。

rosrun rqt_robot_steering rqt_robot_steering

示例功能包下载地址
示例功能包,点击下载