Gazebo仿真-传感器机器人(camera、kinect、Lidar)

本文详细介绍如何在ROS环境中配置并控制带有不同传感器(包括摄像头、Kinect和LiDAR)的机器人。通过运行特定的launch文件,可以实现在Gazebo仿真环境中的机器人视觉、深度信息获取及激光雷达扫描,同时提供了键盘控制机器人移动的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目运行环境为Ubuntu18.04 、ROS为melodic
教程学习up主:古月居。https://blog.csdn.net/hcx25909/article/details/8096373
初次学习可下载他的工作区压缩包来运行调试。该博客也是在他的基础上稍作修改运行了自己的模型文件。他的ubuntu为16版本,ROS为kinetic,稍有不同仔细看自己的运行环境哦。

1、camera

使用下列命令,运行含有摄像头机器人的view_mbot_with_camera_gazebo.launch文件,打开gazebo,可以看到自己的模型文件和机器人。可以看到代码文件的第三行,后面的xxx.world记得修改为自己的.world文件哦。

roslaunch mbot_gazebo 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 mbot -param robot_description"/> 

</launch>

运行下列命令,查看虚拟摄像头。

rqt_image_view

修改虚拟摄像头目录为/camera/image_raw。
在这里插入图片描述
再打开一个终端,运行 mbot_teleop.launch文件,打开键盘控制节点。可以看到文件提示,通过键盘" u i o j k l m , . " 这九个按钮来控制机器人的运动。

roslaunch mbot_teleop mbot_teleop.launch

mbot_teleop.launch文件内容:

 <launch>
  <node name="mbot_teleop" pkg="mbot_teleop" type="mbot_teleop.py" output="screen">
    <param name="scale_linear" value="0.1" type="double"/>
    <param name="scale_angular" value="0.4" type="double"/>
  </node>
</launch>

整体运行截图如下:
在这里插入图片描述

2、Kinect

使用下列命令,运行含有rgbd摄像头机器人的view_mbot_with_kinect_gazebo.launch文件。可以看到代码文件的第三行,后面的xxx.world记得修改为自己的.world文件哦。

roslaunch mbot_gazebo 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 mbot -param robot_description"/> 

</launch>

打开一个新的终端输入下列命令初始化ROS。

roscore

再打开一个终端,使用下列命令运行rviz,查看摄像头内容。

rosrun rviz rviz

点击左下角的add,添加PointCloud2和Image 。

在这里插入图片描述
更改Global Options下Fixed Frame为kinect_link
在这里插入图片描述
更改PointCloud2下Topic目录为/kinect/depth/points
在这里插入图片描述
更改Image下Image Topic为/kinect/rgb/image_raw
在这里插入图片描述
同第1部分,新开一个终端,使用命令roslaunch mbot_teleop mbot_teleop.launch运行 mbot_teleop.launch文件,打开键盘控制节点,使用键盘按钮来控制机器人运动。

整体运行截图如下:
在这里插入图片描述

3、lidar

使用下列命令,运行含有雷达扫描摄像头机器人的view_mbot_with_laser_gazebo.launch文件。可以看到代码文件的第三行,后面的xxx.world记得修改为自己的.world文件哦。

roslaunch mbot_gazebo 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 mbot -param robot_description"/> 

</launch>

打开一个新的终端输入下列命令初始化ROS。

roscore

再打开一个终端,使用下列命令运行rviz,查看摄像头内容。

rosrun rviz rviz

点击左下角的add,添加RobotModel 和 LaserScan。
在这里插入图片描述

更改Global Options下Fixed Frame为odom
在这里插入图片描述
更改LaserScan下Topic为/sacn
修改Size(m)为0.05可以将激光点变大 一些。
在这里插入图片描述
同第1部分,新打开一个终端,使用命令roslaunch mbot_teleop mbot_teleop.launch运行 mbot_teleop.launch文件,打开键盘控制节点,使用键盘按钮来控制机器人运动。

整体运行截图如下:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君琴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值