Gazebo机器人仿真 —— 通过Rviz显示传感器(camera、kinect、Lidar)采集信息

一、安装Rviz工具

1. 准备工作

如何在虚拟机下打开摄像头,请参考:OpenCV在Ubuntu下的图像编程的第三步。

2. 安装相关功能包

sudo apt-get install ros-melodic-uvc-camera
sudo apt-get install ros-melodic-image-*
sudo apt-get install ros-melodic-rqt-image-view

3. 启动 ROS 核心程序

roscore

4. 在另外的终端运行uvc_camera节点

rosrun uvc_camera uvc_camera_node

5. 打开另外一个终端,查看话题消息

rostopic list

6. 打印相机信息

rostopic echo /camera_info

7. 打开rviz

rviz

在这里插入图片描述

将image Topic的值更改为/image_raw

在这里插入图片描述

二、搭建gazebo机器人物理仿真环境

1. 运行 gazebo 仿真软件

gazebo

如果打开 gazebo 出现闪退的情况,解决办法关闭硬件加速:

echo " export SVGA_VGPU10=0" >> ~/.bashrc
source ~/.bashrc

2. 新建 gazebo 机器人仿真工具包

cd ~/catkin_ws/src
catkin_create_pkg mbot_gazebo std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make

此处 catkin_ws 为ROS的工作空间,如何创建一个工作空间请参考:

3. 创建工程所需文件

cd ~/catkin_ws/src/mbot_gazebo
mkdir launch
cd launch
touch gazebo_empty.launch
gedit gazebo_empty.launch

gazebo_empty.launch 文件中添加如下内容:

<launch>
    <!-- 设置launch文件的参数 -->
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_gazebo.xacro'" /> 

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

    <!-- 在gazebo中加载机器人模型-->
    <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-urdf -model mrobot -param robot_description"/> 

</launch>

4. 修改 CMakeLists.txt 文件内容

cd ~/catkin_ws/src/mbot_gazebo
gedit CMakeLists.txt

find_package 中添加:

gazebo_plugins
gazebo_ros
gazebo_ros_control

在这里插入图片描述

5. 修改 package.xml 文件内容

cd ~/catkin_ws/src/mbot_gazebo
gedit package.xml

然后添加如下内容:

<build_depend>gazebo_plugins</build_depend>
<build_depend>gazebo_ros</build_depend>
<build_depend>gazebo_ros_control</build_depend>
<build_export_depend>gazebo_plugins</build_export_depend>
<build_export_depend>gazebo_ros</build_export_depend>
<build_export_depend>gazebo_ros_control</build_export_depend>
<exec_depend>gazebo_plugins</exec_depend>
<exec_depend>gazebo_ros</exec_depend>
<exec_depend>gazebo_ros_control</exec_depend>

在这里插入图片描述

6. 程序编译

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

7. 运行 gazebo 进行机器人仿真

roslaunch mbot_gazebo gazebo_empty.launch

然后可能会报如下错:

在这里插入图片描述

缺少一个机器人建模的功能包:mbot_description

大家可以参考:ROS——URDF机器人建模,自己动手建一个机器人模型。

或者花一些积分下载别人已经建好了的模型:https://download.csdn.net/download/qq_42451251/12344221

正常情况应包含如下两个功能包:

在这里插入图片描述

然后重新执行第6和第7步命令:

在这里插入图片描述

三、gazebo搭建传感器仿真环境,并通过Rviz数据显示

1. 提前下载gazebo的仿真模型

cd ~/.gazebo
mkdir models
cd ~/.gazebo/models
wget http://file.ncnynl.com/ros/gazebo_models.txt
wget -i gazebo_models.txt
ls model.tar.g* | xargs -n1 tar xzvf

在这里插入图片描述

2. 文件配置

cd ~/catkin_ws/src/mbot_gazebo
mkdir worlds
cd worlds
touch playground.world
gedit playground.world

由于一共有600多行,这里就不在展示了,大家自取:playground.world

创建room.world文件

touch room.world
gedit room.world

同样代码过长,大家自取:room.world

3. 传感器 camera 的环境搭建

cd ~/catkin_ws/src/mbot_gazebo/launch
touch view_mbot_with_camera_gazebo.launch
gedit view_mbot_with_camera_gazebo.launch

view_mbot_with_camera_gazebo.launch 添加如下内容:

<launch>
    <!-- 设置launch文件的参数 -->
    <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>
    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)" />
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>
    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_camera_gazebo.xacro'" /> 
    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 
    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>
    <!-- 在gazebo中加载机器人模型-->
    <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-urdf -model mrobot -param robot_description"/> 
</launch>

运行该文件

cd ~/catkin_ws
roslaunch mbot_gazebo view_mbot_with_camera_gazebo.launch

在这里插入图片描述

打开Rviz,进行摄像头显示

cd ~/catkin_ws
rosrun rviz rviz

然后配置如下:

在这里插入图片描述
在这里插入图片描述

4. 传感器 kinect 的环境搭建

cd ~/catkin_ws/src/mbot_gazebo/launch
touch view_mbot_with_kinect_gazebo.launch
gedit view_mbot_with_kinect_gazebo.launch

view_mbot_with_kinect_gazebo.launch 添加如下内容:

<launch>

    <!-- 设置launch文件的参数 -->
    <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)" />
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_kinect_gazebo.xacro'" /> 

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

    <!-- 在gazebo中加载机器人模型-->
    <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-urdf -model mrobot -param robot_description"/> 

</launch>

运行该文件

cd ~/catkin_ws
roslaunch mbot_gazebo view_mbot_with_kinect_gazebo.launch

在这里插入图片描述

同样运行Rviz

cd catkin_ws
rosrun rviz rviz

先点击 “Add”,再添加 ImagePointCloud2,然后进行如下操作:

在这里插入图片描述

5. 传感器 Lidar的环境搭建

cd ~/catkin_ws/src/mbot_gazebo/launch
touch view_mbot_with_laser_gazebo.launch
gedit view_mbot_with_laser_gazebo.launch

view_mbot_with_laser_gazebo.launch 添加如下内容:

<launch>

    <!-- 设置launch文件的参数 -->
    <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)" />
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_laser_gazebo.xacro'" /> 

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

    <!-- 在gazebo中加载机器人模型-->
    <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-urdf -model mrobot -param robot_description"/> 

</launch>

运行该文件

cd ~/catkin_ws
roslaunch mbot_gazebo view_mbot_with_laser_gazebo.launch

同样运行Rviz

cd catkin_ws
rosrun rviz rviz

先点击 “Add”,再添加 LaserScan,然后进行如下操作:

在这里插入图片描述

6. 用键盘操控 “皮皮虾号” 移动

为了给 “皮皮虾号” 注入灵魂,还需要新建一个功能包 mbot_teleop ,怎么引入就不说了,记得引入之后需要编译哦!!!

catkin_make
source ~/catkin_ws/devel/setup.bash

在这里插入图片描述

先搭建一个环境

cd ~/catkin_ws
roslaunch mbot_gazebo view_mbot_with_camera_gazebo.launch

再在另一个终端运行

cd ~/catkin_ws
roslaunch mbot_teleop mbot_teleop.launch

我们走,皮皮虾
在这里插入图片描述

四、参考🔗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值