利用ros控制gazebo节点
一、 目标
如下图1是我在gazebo里弄的两个关节,和他们之间的节点,此次实践目标是用python程序,控制节点运行。如图2所示。
图1
图2
二、 步骤
1. model.urdf文件配置
红色蓝色两根关节就不讲了,可以看看urdf文件,主要关注gazebo插件配置部分
图3
a. joint部分
主要是配置关节的属性,比如关节连接点,旋转轴和旋转方式,具体配置看下图
b). trans部分
transmission是硬件抽象层中的一部分,配置都差不多,主要是记住两个name,第一个自定义,第二个是相应的joint name,比如上面joint部分讲的。
c) control部分
照抄就行,都一样,一个urdf文件只需要写一次
2. config.yaml文件配置
a) 注意第一行的model,这个是跟urdf文件里声明的robot name一致
b) 第一个joint_state_controller,主要是发布节点信息,只需要写一次即可,照抄
c) 第二个one_to_two_position_controller名字为自定义(后面要用,不能重复),type为JointPositionController,也就是直接控制节点的位置,而不是速度什么的,joint为urdf相应的joint 名字(参考图3)
3. launch文件部分
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
示例功能包下载地址
示例功能包,点击下载
版权归原作者 weixin_39566143 所有, 如有侵权,请联系我们删除。