gazebo学习记录(杂乱)

一、完整系列教程

如何使用gazebo进行机器人仿真(很重要):https://zhuanlan.zhihu.com/p/367796338
基础教程和关键概念讲解(很重要):https://zhuanlan.zhihu.com/p/363385163
古月居:http://www.guyuehome.com/34642

二、使用rviz显示urdf文件

1、创建软件包

先创建一个软件包,然后在src中创建一个节点文件夹robot1。在robot1中创建launch和urdf文件夹,my_robot.urdf放在urdf文件夹中,display2.launch放在launch文件夹中。在launch中使用roslaunch robot1 display2.launch命令运行即可。

2、编写urdf文件

urdf文件详解1:https://www.guyuehome.com/34641
urdf文件详解2:https://www.cnblogs.com/linuxAndMcu/p/10874789.html
urdf工具:https://blog.csdn.net/qq_40875849/article/details/119955957
例子my_robot.urdf


<robot name="my_robot">

    <link name="link_base">  //定义一个机构
        <inertial>        //惯性设置
            <origin  xyz="0 0 0" rpy="0 0 0"/>
            <mass value="10"/>
            <inertia ixx="100" ixy="0" ixz="0" iyy="100" izz="100" iyz="0"/>
        inertial>
         
        <visual>         //外表设置
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>    
            <geometry>
                <box size="5.0 5.0 1.0"/>
            geometry>
            <material name="123">
                <color rgba="0.0 1.0 1.0 1.0"/>
            material>
        visual>

        <collision>     //碰撞体积设置
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
            <geometry>
                <box size="5.0 5.0 1.0"/>
            geometry>
        collision>

    link>


   <link name="link_one">
        <inertial>
            <origin  xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>
            <mass value="5"/>
            <inertia ixx="100" ixy="0" ixz="0" iyy="100" izz="100" iyz="0"/>
        inertial>
        
        <visual>
            <origin xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>    
            <geometry>
                <box size="3.0 3.0 10.0"/>
            geometry>
            <material name="234">
                <color rgba="0.8 0.5 0 0.5"/>
            material>
        visual>

        <collision>
            <origin xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>
            <geometry>
                <box size="1.0 1.0 10.0"/>
            geometry>
        collision>
        
    link>


   <link name="link_two">
        <inertial>
            <origin  xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>
            <mass value="5"/>
            <inertia ixx="100" ixy="0" ixz="0" iyy="100" izz="100" iyz="0"/>
        inertial>
        
        <visual>
            <origin xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>    
            <geometry>
                <box size="1.0 1.0 10.0"/>
            geometry>
            <material name="234">
                <color rgba="0.0 5.0 1.0 1.0"/>
            material>
        visual>

        <collision>
            <origin xyz="0.0 0.0 5.0" rpy="0.0 0.0 0.0"/>
            <geometry>
                <box size="1.0 1.0 10.0"/>
            geometry>
        collision>
        
    link>


    <joint name="joint_one" type="revolute">    //定义一个关节
        <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
        <parent link="link_base"/>
        <child link="link_one"/>
        <axis xyz="1.0 0.0 0.0"/>
        <limit lower="-3.0" upper="3.0" effort="10.0" velocity="3.0"/>
    joint>


    <joint name="joint_two" type="revolute">
        <origin xyz="0.0 0.0 10.0" rpy="0.0 0.0 0.0"/>
        <parent link="link_one"/>
        <child link="link_two"/>
        <axis xyz="1.0 0.0 0.0"/>
        <limit lower="-3.0" upper="3.0" effort="10.0" velocity="3.0"/>
    joint>

robot>

注意urdf文件中不能有中文,所以要把这些注释去掉。uedf文件最基础的内容就是由link(机构)和joint(关节)组成的。

3、在rviz中显示urdf文件

launch文件添加模型到rviz:http://www.rply.cn/news/67476.html
https://www.cnblogs.com/caiyishuai/p/15030386.html
例子:display.launch2


<launch>
    <arg name="model" />
    
    <param name="robot_description" textfile="/media/wangyuanhao/DATA/ros_data/gazebo_7_26/src/urdf/my_robot.urdf" />
 
    
    <param name="use_gui" value="true"/>
 
    
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
    
    
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
 
    
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" />
launch>

有一些资料说不能用joint_state_publisher,要用joint_state_publisher_gui。但是我用joint_state_publisher可行,加上gu反而不行,应该与版本有关。

三、gazebo引入world文件

资料:https://zhuanlan.zhihu.com/p/368032054

1、launch文件启动gazebo

1.1空白仿真文件的launch文件

先设置参数,再启动客户端和服务端

roslaunch gazebo_ros empty_world.launch

1.2 launch文件中启动空白仿真的launch文件,并导入world文件

例子:robot.launch


<launch>
  
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find robot2_gazebo)/worlds/robot.world"/>
    
  include>
launch>

2、launch文件引入模型urdf文件

可以启动对应的python节点用于向gazebo中导入模型

2.1 rosrun命令导入

 rosrun gazebo_ros spawn_model -file `rospack find baxter_description`/urdf/baxter.urdf -urdf -z 1 -model baxter

2.2 launch文件导入

<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />

两种方法其实美区别都是调用了gazebo_ros包的一个python脚本用于引入模型,这个脚本就是用python创建了一个订阅的节点,回调函数中就是调用了和gazebo的pythonapi。

3、world文件引入模型urdf文件

可以在world文件中直接加入sdf模型代码,也可以用include标签直接引用sdf文件

4、world文件引入插件so文件

(1)world文件是完整的仿真文件,可以插入sdf模型和so插件文件。插件通过c++文件编译成so文件引用。
(2)插件包括world、model、sensor、system、visual、gui六种。统一使用标签引入world文件,不同种类的插件以在不同的标签内引入,比如world插件在标签内引入。
插件标签使用:

例子:


<sdf version="1.4">
  <world name="default">
    <plugin name="hello_world" filename="libhello_world.so"/>
  world>
sdf>

上面这个例子引入了一个world类型插件

四、使用gazebo使用插件

1、gazebo增加插件文件

资料:https://zhuanlan.zhihu.com/p/363385163
资料:https://blog.csdn.net/lc1852109/article/details/126450496

2、自定义关节控制插件

资料:https://blog.csdn.net/Robot_Starscream/article/details/120323907
关节控制的插件主要利用模型插件,gzebo的模型插件有自带的api用于与gazebo中的模型传递消息。这个代码是用插件来获取gazebo中关节的参数,并将参数通过publish发送到back_wheel_steering的topic,主函数再订阅即可获得角度。
gazebo学习记录(杂乱)_第1张图片

3、ros_contrl使用

gazebo学习记录(杂乱)_第2张图片

你可能感兴趣的:(学习)