ROS2放弃指南3:初识Gazebo

gazebo的模型下载链接;这个链接很快哦

重点注意事项

1 每次修改urdf文件之后,必须重新编译
2 killall gzserver

安装条件

这篇文章主要是参考 鱼香ROS2里面的教程,不过小鱼的操作环境应该是 ubuntu20.0+foxy
我的操作环境是 ubuntu18 + dashing
所以在一些函数名之类的操作上会有一些变化

如果是虚拟机 记得关闭3D图形加速

git rest --hard  // 撤销掉你本地的修改 有重要的文件记得备份
git pull origin master   // 拉取代码
catkin_make --pkg **  // 单独编译指定功能包
sudo apt-get install ros-dashing-gazebo-ros  ros-dashing-gazebo-plugins  ros-dashing-joint-state-publisher  ros-dashing-joint-state-publisher-gui 	ros-dashing-robot-state-publisher

通过上面的链接,下载模型之后,把模型放到 ~/.gazebo/Models 下。然后在界面选择 insert -> Add Path 按钮,将这个目录添加进来。
在这里插入图片描述

但是模型放置的位置,不一定非要在 ~/.gazebo/Models 这个路径下。你只要能够正确的打开模型在的路径下就行。

基本使用

鼠标左键,视角移动;中键滚轮和右键,缩放;点击中键 旋转视角
通过file->building Editor 可以新建自己的室内的环境,绘制墙体,添加贴图。也可以添加自己的模型。
在这里插入图片描述
但是我用的gazebo9的版本,在添加门的时候,会出现bug,然后闪退。但是这个bug不是百分百出现的。

ros2 示例

// 运行两轮差速小车
gazebo /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world 
// 让小车动起来
ros2 topic pub /demo/cmd_demo geometry_msgs/msg/Twist "{linear: {x: 0.2,y: 0,z: 0},angular: {x: 0,y: 0,z: 0}}"
// 出现报错
[INFO] [launch]: All log files can be found below /home/xs-csy/.ros/log/2022-03-24-09-51-36-965705-dellg3-G3-2023
[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): cannot import name 'FindPackageShare'

urdf

我们把左轮,右轮、支撑轮子,IMU和雷达部件称为机器人的Link
而Link和Link之间的连接部分称之为Joint关节
在这里插入图片描述
在这里插入图片描述

urdf简单模型

// 建立工作空间和功能包
mkdir -p ~/test-ros2-launch/src
cd ~/test-ros2-launch/src
ros2 pkg create fishbot_description --build-type ament_python
// 建立URDF文件
cd fishbot_description && mkdir urdf 
cd urdf
touch fishbot_base.urdf

编辑fishbot_base.urdf

<?xml version="1.0"?>
<robot name="fishbot">

  <!-- base link -->
  <link name="base_link">
      <visual>      <!-- 显示形状 -->
      <origin xyz="0 0 0.0" rpy="0 0 0"/>  <!-- origin (可选:默认在物体几何中心)属性 xyz默认为零矢量 rpy弧度表示的翻滚、俯仰、偏航  -->
      <geometry>  <!-- <geometry> (几何形状) -->
        <cylinder length="0.12" radius="0.10"/>  < !-- <cylinder> 圆柱体 标签属性:radius -半径 length-高度 -->
      </geometry>
    </visual>
  </link>
    
  <!-- laser link -->
  <link name="laser_link">
      <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.02" radius="0.02"/>
      </geometry>
      <material name="black">  <!--material 材质;属性 name名字;color 属性rgba a代表透明度 -->
          <color rgba="0.0 0.0 0.0 0.8" /> 
      </material>
    </visual>
  </link>
    
  <!-- laser joint -->
    <joint name="laser_joint" type="fixed">  <!-- name 关节的名称;type 关节的类型 -->
        <parent link="base_link" />    <!--  parent 父link名称  -->
        <child link="laser_link" />  <!-- child子link名称 -->
        <origin xyz="0 0 0.075" />  <!-- origin 父子之间的关系xyz rpy -->
        <axis xyz="0 0 1" />   <!-- axis 围绕旋转的关节轴  -->
    </joint>

</robot>
tyep关节名称类型
revolute:旋转关节 绕单轴旋转,角度有上下限,比如舵机0-180
continuous旋转关节 可以绕单轴无限旋转,比如自行车的前后轮
fixed:固定关节 不允许运动的特殊关节
prismatic:滑动关节 沿某一轴线移动的关节,有位置极限
planer:平面关节 允许在xyz,rxryrz六个方向运动
floating:浮动关节 允许进行平移、旋转运动
cd ../
mkdir launch
cd launch
touch display_rviz2.launch.py

注意一下 这里面的部分函数 在dashing和foxy之间不是通用的,所以如果是foxy的环境,应该参考小鱼哥原版的教程

import os

from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
#from launch_ros.substitutions import FindPackageShare   
from ament_index_python.packages import get_package_share_directory


def generate_launch_description():
    package_name = 'fishbot_description'
    urdf_name = "fishbot_base.urdf"
    ld = LaunchDescription()
    package=package_name
    pkg_share = get_package_share_directory(package_name)
    urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
    robot_state_publisher_node = Node(
        package='robot_state_publisher',
        # executable='robot_state_publisher',
        node_executable='robot_state_publisher',
        arguments=[urdf_model_path]
        )

    joint_state_publisher_node = Node(  
        package='joint_state_publisher_gui',
        # executable='joint_state_publisher_gui',
        node_executable='joint_state_publisher_gui',
        name='joint_state_publisher_gui',
        arguments=[urdf_model_path]
        )

    rviz2_node = Node(
        package='rviz2',
        # executable='rviz2',
        node_executable='rviz2',
        name='rviz2',
        output='screen',
        )

    ld.add_action(robot_state_publisher_node)
    ld.add_action(joint_state_publisher_node)
    ld.add_action(rviz2_node)
    
    return ld
colcon build
source install/setup.bash
ros2 launch fishbot_description display_rviz2.launch.py

在这里插入图片描述
不过我的Rqt的节点关系图,和小鱼哥的不一样,现在还没有找到原因
在这里插入图片描述

urdf 小车

<?xml version="1.0"?>
<robot name="fishbot">
    
  <!-- base link -->
  <link name="base_link">
      <visual>
      <origin xyz="0 0 0.0" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.12" radius="0.10"/>
      </geometry>
       <material name="blue ">
          <color rgba="0.1 0.1 1.0 0.5" /> 
      </material>

    </visual>
  </link>
    
  <!-- laser link -->
  <link name="laser_link">
      <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.02" radius="0.02"/>
      </geometry>
      <material name="black">
          <color rgba="0.0 0.0 0.0 0.8" /> 
      </material>
    </visual>
  </link>
    
  <!-- laser joint -->
    <joint name="laser_joint" type="fixed">
        <parent link="base_link" />
        <child link="laser_link" />
        <origin xyz="0 0 0.075" />
    </joint>

  <!-- imu link -->
  <link name="imu_link">
      <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <box size="0.02,0.02,0.02"/>
      </geometry>
    </visual>
  </link>
    
  <!-- imu joint -->
    <joint name="imu_joint" type="fixed">
        <parent link="base_link" />
        <child link="imu_link" />
        <origin xyz="0 0 0.02" />
    </joint>

  <link name="right_wheel_link">
      <visual>
        <origin xyz="0 0 0" rpy="1.57079 0 0"/>
        <geometry>
          <cylinder length="0.04" radius="0.032"/>
        </geometry>
          <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" /> 
          </material>
      </visual>
  </link>

  <joint name="right_wheel_joint" type="continuous">
      <parent link="base_link" />
      <child link="right_wheel_link" />
      <origin xyz="-0.02 -0.10 -0.06" />
      <axis xyz="0 1 0" />
  </joint>

  <link name="left_wheel_link">
      <visual>
        <origin xyz="0 0 0" rpy="1.57079 0 0"/>
        <geometry>
          <cylinder length="0.04" radius="0.032"/>
        </geometry>
          <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" /> 
          </material>
      </visual>
  </link>
    
  <joint name="left_wheel_joint" type="continuous">
      <parent link="base_link" />
      <child link="left_wheel_link" />
      <origin xyz="-0.02 0.10 -0.06" />
      <axis xyz="0 1 0" />
  </joint>

<link name="caster_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
          <sphere radius="0.016"/>
      </geometry>
        <material name="black">
          <color rgba="0.0 0.0 0.0 0.5" /> 
        </material>
    </visual>
  </link>
    
  <joint name="caster_joint" type="fixed">
      <parent link="base_link" />
      <child link="caster_link" />
      <origin xyz="0.06 0.0 -0.076" />
  </joint>
 <!-- Robot Footprint 避免车轮向下 -->
  <link name="base_footprint"/>
  <joint name="base_joint" type="fixed">
    <parent link="base_footprint"/>
    <child link="base_link"/>
    <origin xyz="0.0 0.0 0.076" rpy="0 0 0"/>
  </joint>
</robot>

在这里插入图片描述



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值