ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动

b站上有一个非常好的ros教程234仿真之URDF_link标签简介-机器人系统仿真_哔哩哔哩_bilibili,推荐去看原视频。

视频教程的相关文档见:6.7.1 机器人运动控制以及里程计信息显示 · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

本文对视频教程第六章的主要内容做一个总结,视频教程没有集成的代码,都是每一课分散的代码,本文把主要代码集合进来,给嫌视频太长不想看的同学做一个总结。教程视频中使用的是rplidar,那个很不好用,也不接近现实。本文改用Velodyne的lidar,相对更好用一些。Velodyne源代码在github。

本文主要包括以下内容:

gazebo仿真世界的构建,mobile robot的构建,RGB相机和雷达这两个传感器的构建,如何获取传感器的数据并在rviz中显示,以及robot的控制器。

下载资源,可以得到如下的

文件结构

工作空间文件夹:ros_robot_navi,工作空间文件夹下:

src中包含两个功能包:

velodyne_descreption是github上下载的lidar仿真模块。

进入 robot_sim中,有如下结构

urdf中放的是robot lidar camera等模型文件,worlds中放的是gazebo模拟世界的环境,launch中就是launch文件了。

robot建模

在urdf/gazebo/中,放的是各类模型。

以my_base.xacro文件为例,这个是robot的底座

html 复制代码
    <link name="base_footprint">
      <visual>
        <geometry>
          <sphere radius="${base_footprint_radius}" />
        </geometry>
      </visual>
    </link>

link标签就是机器人的各个部件,各个部件之间,通过joint标签相连接

html 复制代码
    <joint name="base_link2base_footprint" type="fixed">
      <parent link="base_footprint" />
      <child link="base_link" />
      <origin xyz="0 0 ${earth_space + base_link_length / 2 }" />
    </joint>

collision和initial属性是gazebo仿真必须的属性。进行刚体力学 运动学计算和碰撞计算。

my_car.xacro将各个部分拼装在一起。move是小车运动控制器。

html 复制代码
<!-- 组合小车底盘与摄像头 -->
<robot name="my_car" xmlns:xacro="http://wiki.ros.org/xacro">
    <xacro:include filename="my_head.xacro" />
    <xacro:include filename="my_base.xacro" />
    <xacro:include filename="my_camera.xacro" />
    <xacro:include filename="my_laser.xacro" />
    <xacro:include filename="move.xacro" />


    <xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro"/>
	<xacro:VLP-16 parent="support" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false">
		<origin xyz="0 0 0.4" rpy="0 0 0" />
	</xacro:VLP-16>
</robot>

在集成lidar时,parent是提前建好的joint中的父节点。通过parent这个参数,就可以建立lidar模块和小车底座模块的联系。

launch

在robot_sim功能包的launch文件夹中,car_env_gazebo.launch

html 复制代码
<launch>
    <!--launch urdf content to param server-->
    <param name="robot_description" command="$(find xacro)/xacro $(find robot_sim)/urdf/gazebo/my_car.xacro" />
 
    <!-- launch gazebo -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(find robot_sim)/worlds/box_house.world" />
    </include>
    <!-- display robot in gazebo-->
    <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description"  />
</launch>

command命令是为了将.xacro转为.urdf。也可以通过以下命令单独进行转化:

进入要转化的.xacro文件夹

bash 复制代码
rosrun xacro xacro xxx.xacro > xxx.urdf

把转化集成进.launch中的好处是改了模型以后不用单独转化,直接运行。坏处是,如果模型有问题,不知道哪里报错。如果在gazebo中没有正确显示出模型,那么再单独运行这个转化命令,看看是模型哪里写错了。

运行这个.launch文件

bash 复制代码
roslaunch robot_sim car_env_gazebo.launch

就可以在gazebo中看到小车和雷达了

再运行 my_car_rviz.launch

html 复制代码
<launch>
    <param name="robot_description" command="$(find xacro)/xacro $(find robot_sim)/urdf/gazebo/my_car.xacro" />

    <node pkg="rviz" type="rviz" name="rviz" />
    <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" output="screen" />
    <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen" />
    <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" output="screen" />

</launch>

就可以在rviz中看到lidar的点云和相机的图片了

小车也可以加进来

运动控制

再打开一个终端,source一下,运行

bash 复制代码
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

控制小车运动。

launch文件说明

bash 复制代码
<launch>
  <!-- 启动节点 -->
  <node pkg="your_package_name" type="your_node_executable" name="your_node_name" />
</launch>
相关推荐
袁牛逼3 小时前
电话语音机器人,是由哪些功能构成?
人工智能·自然语言处理·机器人·语音识别
TsingtaoAI4 小时前
2024.10|AI/大模型在机器人/自动驾驶/智能驾舱领域的最新应用和深度洞察
机器人·自动驾驶·ai大模型·具身智能·智能驾舱
不是AI6 小时前
【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》
人工智能·自然语言处理·机器人
鱼会上树cy7 小时前
【机器人学】2-2.六自由度机器人运动学逆解-奇异位形分析【附MATLAB代码】
机器人
北京搜维尔科技有限公司8 小时前
搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
科技·机器人·vr
Matlab程序猿小助手9 小时前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
高登先生10 小时前
京津冀自动驾驶技术行业盛会|2025北京自动驾驶技术展会
大数据·人工智能·科技·机器人·自动驾驶
不是AI1 天前
【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第1章、《系统、环境》
人工智能·自然语言处理·机器人
北京搜维尔科技有限公司2 天前
搜维尔科技:Manus VR数据手套-人形机器人的远程操作和机器学习
科技·机器人·vr
云卓科技2 天前
无人机之中继通信技术篇
科技·嵌入式硬件·安全·机器人·无人机