本章预期的学习目标如下:

  • 能够独立使用URDF创建机器人模型,并在Rviz和Gazebo中分别显示;
  • 能够使用Gazebo搭建仿真环境;
  • 能够使用机器人模型中的传感器(雷达、摄像头、编码器...)获取仿真环境数据。

大目标:

  • 先介绍 URDF 与 Rviz 集成使用,在 Rviz 中只是显示机器人模型,主要用于学习 URDF 语法
  • 再介绍 URDF 与 Gazebo 集成,主要学习 URDF 仿真相关语法以及仿真环境搭建
  • 最后集成 URDF 与 Gazebo 与 Rviz,实现综合应用

概念

URDFUnified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件

RViz 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将 数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感 器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等

以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,RViz会默认被安装。

运行使用命令rvizrosrun rviz rviz

如果rviz没有安装,请调用如下命令自行安装:

sudo apt install ros-[ROS_DISTRO]-rviz

Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。

以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装。

URDF 集成 RVIZ 基本流程

10.机器人系统仿真(urdf集成gazebo、rviz)

rviz 怎么打开

roscore
rviz

URDF 集成 RVIZ 基本流程

URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单,后期,基于Rviz的集成实现,我们再进一步介绍URDF语法。

三者应用中,只是创建 URDF 意义不大,一般需要结合 Gazebo 或 Rviz 使用,在 Gazebo 或 Rviz 中可以将 URDF 文件解析为图形化的机器人模型,一般的使用组合为:

如果非仿真环境,那么使用 URDF 结合 Rviz 直接显示感知的真实环境信息

如果是仿真环境,那么需要使用 URDF 结合 Gazebo 搭建仿真环境,并结合 Rviz 显示感知的虚拟环境信息

若需要建立一个盒型机器人并在RVIZ中显示:

实现流程:

  1. 准备:新建功能包,导入依赖:urdfxacro
  2. 核心:编写 urdf 文件
  3. 核心:在 launch 文件集成 URDF 与 Rviz
  4. 在 Rviz 中显示机器人模型
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

step1.创建工作空间

Ctrl+Alt+T打开终端分别输入:

mkdir -p helloworld/src
cd helloworld
catkin_make

gazebo 搭建环境1_工作空间

gazebo 搭建环境1_工作空间_02

step2.创建功能包

继续在该终端输入:【启动VS Code】

code .

这步打不开,可能是环境未有配置好

ubuntu添加环境变量的四种方法

unzip /tmp/vscode/VSCode-linux-x64.zip -d /opt/

ln -s /opt/VSCode-linux-x64/Code /usr/local/bin/code

直接从图形窗口进入,一般创建功能包的时候就会自动生成.vscode文件

gazebo 搭建环境1_工作空间_03

进入对应的目录

在当前功能包下,再新建几个目录:

urdf: 存储 urdf 文件的目录

meshes:机器人模型渲染文件(暂不使用)

config: 配置文件

launch: 存储 launch 启动文件

gazebo 搭建环境1_配置文件_04

package.xml

<buildtool_depend>catkin</buildtool_depend>
  <build_depend>urdf</build_depend>
  <build_export_depend>urdf</build_export_depend>
  <exec_depend>urdf</exec_depend>

gazebo 搭建环境1_配置文件_05

新建一个子级文件夹:urdf(可选),文件夹中添加一个.urdf文件,复制如下内容:

<robot name="mycar">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.5 0.2 0.1" />
            </geometry>
        </visual>
    </link>
</robot>

在 launch 文件中集成 URDF 与 Rviz

在launch目录下,新建一个 launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型,

Hello world实现流程

step1.创建工作空间

无论是C++还是Python其他编程语言,实现流程都是大同小异:

创建工作空间 → 创建功能包 → 编辑源文件 → 编辑配置文件 → 编译并执行

mkdir -p helloworld_ws/src
cd helloworld_ws
catkin_make  #

step2.创建功能包

cd src
catkin_create_pkg helloworld roscpp rospy std_msgs

其中helloworld为我们的功能包名称,roscpp 、rospy和std_msgs为添加的依赖,这些依赖是我们在ROS中运行程序最基本的一些依赖,成功结果如下:【低版本的ROS中message依赖可能为ros_msgs】

step3.编辑源文件

继续在终端输入:【在功能包中创建源文件】

cd helloworld/src
gedit helloworld_c.cpp

在空白文档中输入:【Hello world!】

#include <ros/ros.h>//包含ros头文件
 
/******主函数******/
int main(int argc,char *argv[]){
	ros::init(argc,argv,"hello_node");//初始化节点
	ROS_INFO("Hello world!");//输出日志
 
	return 0;
}

step4.编辑配置文件

打开helloworld功能包中的CMakeLists.txt【helloworld_ws/src/helloword/CMakeLists.txt】

将136行与149行更改为如下结果:【在文编编辑器的首选项中打开显示行号功能】

其中hello为映射变量名称,helloworld_c.cpp为源代码文件名称。

step5.编译并执行

重新打开一个输入:【启动ros核心】

roscore

再重新打开另一个终端输入:【在工作空间中编译并执行】

cd ~/helloworld_ws
catkin_make
source ./devel/setup.bash
rosrun helloworld hello

其中,source命令为修改环境变量,helloworld为功能包名称,hello为映射变量名称,成功结果如下:gazebo 搭建环境1_源文件_06

ROS入门教程(三)—— 用C++或Python实现Hello world

ROS入门教程(四)—— URDF文件与导出

URDF文件是一种标准的XML文件,用于描述机器人模型,主要为两部分:连杆link与关节joint。借助ROS官方提供的sw2urdf插件(这个需要借助solidworks工作)将我们  建模好的机器人直接转为URDF模型。

step1.安装sw2urdf插件

卡卡卡,需要用建模工具之后再学把


核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description,示例代码如下:

ROS机器人小车建模仿真

ROS--机器人小车仿真rviz  这个可以的(就是没有轮子)

gazebo 搭建环境1_源文件_07

ROS--URDF集成Gazebo仿真小车和rviz结合

文章展示如何使用ROS的URDF和Gazebo进行小车仿真,包括编写xacro文件封装惯性矩阵,定义底盘、驱动轮、支撑轮的属性和形状,以及添加摄像头和雷达的详细过程。此外,还涵盖了创建运动控制实现系统和在Gazebo中加载、显示模型的launch文件配置。

ROS–URDF集成Gazebo仿真小车

实现流程:

需要编写封装惯性矩阵算法的 xacro 文件

为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性

在 launch 文件中启动 gazebo 并添加机器人模型

添加辅助运行包(这步骤没有明白)

gazebo_plugins  gazebo_ros  gazebo_ros_control  urdf  xacro


gazebo 搭建环境1_工作空间_08

gazebo 搭建环境1_源文件_09


gazebo 搭建环境1_工作空间_10

[ERROR] [1726024187.190067818, 5.255000000]: PluginlibFactory: The plugin for class 'rviz/Views<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdlee)/config/showmycar.rviz" />' failed to load.  Error: According to the loaded plugin descriptions the class rviz/Views<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdlee)/config/showmycar.rviz" /> with base class type rviz::Panel does not exist. Declared types are  rviz_plugin_tutorials/Teleop

可以了都可以实现了

source ./devel/setup.bash

roslaunch urdf02_gazebo demo_03.launch

roslaunch urdf02_gazebo demo_04_sens.launch

gazebo 搭建环境1_源文件_11

gazebo 搭建环境1_工作空间_12

这个问题就是.xacro文件里面有中文了


gazebo 搭建环境1_源文件_13

可运行但是有错误


gazebo 搭建环境1_源文件_14

https://github.com/ibrahimjad/tangent_planner/blob/master/README.md



后面暂时还没有实现

路径规划:基于ros的bug算法(二)