赞
踩
在rviz中,能够显示的小车模型如下所示。
1、创建功能包添加依赖项
创建一个新的功能包,名称自定义然后导入依赖urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins
,然后在当前功能包下,再新建几个目录:
urdf:存储 urdf 文件的目录
meshes:机器人模型渲染文件(暂不使用)
config: 配置文件
launch: 存储 launch 启动文件
world:存放场景地图文件
2、编写urdf文件
<robot name="myAGV"> <link name="base_coordinate"> <visual> <geometry> <sphere radius="0.001" /> </geometry> </visual> </link> <link name="base_link"> <visual> <geometry> <mesh filename="package://simulation_scene/meshes/agv.stl"/> </geometry> <origin xyz="0 0 0" rpy="0 0 1.57" /> <material name="blue"> <color rgba="0 0.25 0.5 0.8" /> </material> </visual> <collision> <geometry> <box size="0.34 0.34 0.34" /> </geometry> <origin xyz="-0.8 0.0 0.0" rpy="0.0 0.0 1.57" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="1" /> <inertia ixx="0.2" ixy="0" ixz="0" iyy="0.2" iyz="0" izz="0.2" /> </inertial> </link> <gazebo reference="base_link"> <material>Gazebo/Blue</material> </gazebo> <joint name="base_link_to_base_coordinate" type="fixed"> <parent link="base_coordinate" /> <child link="base_link"/> <origin xyz="0 0 0.205" /> </joint> <link name="right_wheel"> <visual> <geometry> <cylinder radius="0.09" length="0.06" /> </geometry> <origin xyz="0 0 0" rpy="1.57 0 0" /> <material name="black"> <color rgba="0.0 0.0 0.0 1.0" /> </material> </visual> <collision> <geometry> <cylinder radius="0.09" length="0.06" /> </geometry> <origin xyz="0 0 0" rpy="1.57 0 0" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="2" /> <inertia ixx="0.02" ixy="0" ixz="0" iyy="0.02" iyz="0" izz="0.04" /> </inertial> </link> <gazebo reference="right_wheel"> <material>Gazebo/Black</material> </gazebo> <joint name="base_r_wheel_joint" type="continuous"> <parent link="base_link" /> <child link="right_wheel" /> <origin xyz="0.13 -0.1575 -0.115" /> <axis xyz="0 1 0" /> </joint> <link name="left_wheel"> <visual> <geometry> <cylinder radius="0.09" length="0.06" /> </geometry> <origin xyz="0 0 0" rpy="1.57 0 0" /> <material name="black"> <color rgba="0.0 0.0 0.0 1.0" /> </material> </visual> <collision> <geometry> <cylinder radius="0.09" length="0.06" /> </geometry> <origin xyz="0 0 0" rpy="1.57 0 0" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="2" /> <inertia ixx="0.02" ixy="0" ixz="0" iyy="0.02" iyz="0" izz="0.04" /> </inertial> </link> <gazebo reference="left_wheel"> <material>Gazebo/Black</material> </gazebo> <joint name="base_l_wheel_joint" type="continuous"> <parent link="base_link" /> <child link="left_wheel" /> <origin xyz="0.13 0.1575 -0.115" /> <axis xyz="0 1 0" /> </joint> <link name="universal_wheel"> <visual> <geometry> <sphere radius="0.035" /> </geometry> <origin xyz="0 0 0" rpy="0 0 0" /> <material name="black"> <color rgba="0.0 0.0 0.0 1.0" /> </material> </visual> <collision> <geometry> <sphere radius="0.035" /> </geometry> <origin xyz="0 0 0" rpy="0 0 0" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="0.5" /> <inertia ixx="0.0002" ixy="0" ixz="0" iyy="0.0002" iyz="0" izz="0.0002" /> </inertial> </link> <gazebo reference="universal_wheel"> <material>Gazebo/White</material> </gazebo> <joint name="universal_wheel_to_base_link" type="continuous"> <parent link="base_link" /> <child link="universal_wheel" /> <origin xyz="-0.135 0 -0.17" /> <axis xyz="1 1 1" /> </joint> <link name="laser"> <visual> <geometry> <box size="0.05 0.05 0.05" /> </geometry> <origin xyz="0 0 0" rpy="0 0 0" /> <material name="red"> <color rgba="1.0 0.0 0.0 1.0" /> </material> </visual> <collision> <geometry> <box size="0.05 0.05 0.05" /> </geometry> <origin xyz="0 0 0" rpy="0 0 0" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="0.2" /> <inertia ixx="0.00008" ixy="0" ixz="0" iyy="0.00008" iyz="0" izz="0.00008" /> </inertial> </link> <gazebo reference="laser"> <material>Gazebo/Red</material> </gazebo> <joint name="laser_to_base_link" type="fixed"> <parent link="base_link" /> <child link="laser" /> <origin xyz="0.12 0 0.195" /> </joint> <link name="camera"> <visual> <geometry> <cylinder radius="0.02" length="0.01" /> </geometry> <origin xyz="0 0 0" rpy="0 1.57 0" /> <material name="yellow"> <color rgba="1.0 1.0 0.0 1.0" /> </material> </visual> <collision> <geometry> <cylinder radius="0.02" length="0.01" /> </geometry> <origin xyz="0 0 0" rpy="0 1.57 0" /> </collision> <inertial> <origin xyz="0 0 0" /> <mass value="0.1" /> <inertia ixx="0.00001" ixy="0" ixz="0" iyy="0.00001" iyz="0" izz="0.00002" /> </inertial> </link> <gazebo reference="camera"> <material>Gazebo/Yellow</material> </gazebo> <joint name="camera_to_base_link" type="fixed"> <parent link="base_link" /> <child link="camera" /> <origin xyz="0.23 0 0.145" /> </joint> </robot>
Tips:这里由于默认前进方向是X向,对模型都有一个向Y轴的偏转。
3、编写launch文件
<launch> <!-- 设置参数 其中param的名字必须是robot_description --> <param name="robot_description" textfile="$(find simulation_scene)/urdf/myAGV.urdf" /> <!-- 启动 rviz --> <node pkg="rviz" type="rviz" name="rviz" args="-d $(find simulation_scene)/config/myAGV.rviz" /> <!-- 启动机器人状态和关节状态发布节点 --> <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" /> <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /> <!-- 启动 gazebo --> <include file="$(find gazebo_ros)/launch/empty_world.launch" > <arg name="world_name" value="$(find simulation_scene)/world/house.world" /> </include> <!-- 在 gazebo 中显示机器人模型 --> <node pkg="gazebo_ros" type="spawn_model" name="myAGV" args="-urdf -model myAGV -param robot_description" /> </launch>
1、运行gazebo
2、绘制墙体
3、添加简单障碍物
4、保存为world文件
1、启动gazebo:在终端输入gazebo即可
2、绘制墙体:在Edit选项卡,选择building editor,点击wall再绘图即可;将绘制好的墙体保存,最后点击左上角的file先save后再exit即可。
1、添加简单障碍物:在gazebo的操作栏上,点击方块或者圆柱体 拖动到界面,即可。
2、保存为world文件:在File下,save world as保存为world文件。最后终端输入killall gzserver
结束所有gazebo进程。
3、最后将world文件添加到ROS功能包的world目录下。
上一篇: 5 ROS仿真建模(1- urdf和rviz、gazebo的基础操作).
下一篇: 5 ROS仿真建模(3- rviz+gazebo+控制仿真机器人).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。