ROS2放弃指南5:初识Gazebo

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

初识Gazebo

  • 重点注意事项
  • 安装条件
  • 基本使用
  • ros2 示例
  • urdf
  • urdf简单模型
  • urdf 小车

重点注意事项

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 osfrom 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_directorydef generate_launch_description():package_name = 'fishbot_description'urdf_name = "fishbot_base.urdf"ld = LaunchDescription()package=package_namepkg_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>

在这里插入图片描述


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部