Gazebo仿真小例程一(通过例程熟悉整个仿真步骤)

目录

1.编辑urdf文件。

(1)dynamic标签

 (2)gazebo标签

(3)transmission标签

(4)ros_control插件

2.编辑yaml文件

3.编辑launch文件启动gazebo仿真环境

4.编写程序控制机器人关节往复运动

5.运行效果

6.全部源码地址


为了方便入门和理解,我们这里建立一个最简单的单关节机器人,以此来入门机器人的gazebo仿真。

1.编辑urdf文件。

首先,我们在solidworks里面新建好机器人模型,然后导出urdf文件。

导出了urdf文件之后呢,我们就需要给urdf文件重新修改了, 首先直接修改文件名,在后面添加上.xacro后缀,改成了xacro文件。

 里面有solidworks软件里面的插件(转urdf插件)自己生成的两个连杆(base_link和link_1)和一个关节(joint_1)。然后我们就需要给其添加gazebo仿真所需要的标签了。

(1)dynamic标签

这个标签主要涉及动力学。

改标签是link标签的子标签,因此这个标签添加在link标签下面,每个link都需要一个dynamic标签。这个标签我们设置两个属性,第一个属性damping是阻尼系数,我们设置为0.7,第二个标签是摩擦系数,我们设置为0.5.

 (2)gazebo标签

这个标签主要设置连杆的颜色等属性。

  Gazebo/Black

(3)transmission标签

这个标签主要是设置关节驱动器,关节驱动器一般是电机,舵机这些,用于驱动关节,改变关节变量用的,每个活动关节都需要设置一个关节驱动电机,设置的每个关节驱动电机都需要和对应的关节绑定,以此来说明改驱动器驱动该关节。

  transmission_interface/SimpleTransmissionhardware_interface/PositionJointInterfacehardware_interface/PositionJointInterface1

(4)ros_control插件

此外我们还需要用gazebo标签来载入ros_control插件,由于我们整个驱动控制是基于ros_control做的,因此需要载入该插件,这个插件会给我们自动处理其余的任务,我们无需自己配置。

需要注意的是下面的标签,这个标签声明命名空间,这个需要留意一下。

  /gazebo_demogazebo_ros_control/DefaultRobotHWSimtrue

添加了这些之后,我们的urdf文件就修改好了。

修改好之后的urdf文件如下:

Gazebo/BlackGazebo/Blacktransmission_interface/SimpleTransmissionhardware_interface/PositionJointInterfacehardware_interface/PositionJointInterface1/gazebo_demogazebo_ros_control/DefaultRobotHWSimtrue

2.编辑yaml文件

yaml文件为配置文件,主要配置关节控制器的物理参数,例如控制器类型,和pid等参数。

控制器类型一共有三种,分别是:位置控制,速度控制和力控制。

我这里配置好的文件如下。

gazebo_demo:# Publish all joint states -----------------------------------joint_state_controller:type: joint_state_controller/JointStateControllerpublish_rate: 50  # Position Controllers ---------------------------------------joint1_position_controller:type: position_controllers/JointPositionControllerjoint: joint_1#pid: {p: 100.0, i: 0.01, d: 10.0}gazebo_demo/gazebo_ros_control/pid_gains:joint_1: {p: 100.0, i: 0.0, d: 10.0}

3.编辑launch文件启动gazebo仿真环境

这里我也编辑好了,如下:

启动之后就可以看到这个机器人出现在了地面上。

4.编写程序控制机器人关节往复运动

这里编写了一个简单的节点进行控制,程序如下:

#include "ros/ros.h"
#include "std_msgs/Float64.h" 
#include int main(int argc, char  *argv[])
{   setlocale(LC_ALL,"");ros::init(argc,argv,"control_gazebo_demo");ros::NodeHandle nh;ros::Publisher pub = nh.advertise("/gazebo_demo/joint1_position_controller/command",10);std_msgs::Float64 control_gazebo_demo;control_gazebo_demo.data=0.0;bool flag=0;//0weizeng 1weijianros::Rate r(50);while (ros::ok()){for(control_gazebo_demo.data=0.0;control_gazebo_demo.data<=1.5;control_gazebo_demo.data+=0.01){pub.publish(control_gazebo_demo);ROS_INFO("发送的消息:%f",control_gazebo_demo);r.sleep();}for(control_gazebo_demo.data=1.5;control_gazebo_demo.data>=0.0;control_gazebo_demo.data-=0.01){pub.publish(control_gazebo_demo);ROS_INFO("发送的消息:%f",control_gazebo_demo);r.sleep();}ros::spinOnce();}return 0;
}

5.运行效果

Gazebo仿真1自由度关节

6.全部源码地址

源码地址:

https://gitee.com/li9535/gazebo_simulation_ros_package/tree/master/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部