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,工作空间文件夹下:

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第1张图片

src中包含两个功能包:

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第2张图片

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

进入 robot_sim中,有如下结构

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第3张图片

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

robot建模

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

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第4张图片

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

    
      
        
          
        
      
    

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

    
      
      
      
    

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

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



    
    
    
    
    


    
	
		
	

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

launch

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


    
    
 
    
    
        
    
    
    

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

进入要转化的.xacro文件夹

rosrun xacro xacro xxx.xacro > xxx.urdf

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

运行这个.launch文件

roslaunch robot_sim car_env_gazebo.launch

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

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第5张图片

再运行 my_car_rviz.launch


    

    
    
    
    


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

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第6张图片

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第7张图片

小车也可以加进来

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动_第8张图片

运动控制

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

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文件说明


  
  

你可能感兴趣的:(机器人)