本章预期的学习目标如下:
- 能够独立使用URDF创建机器人模型,并在Rviz和Gazebo中分别显示;
- 能够使用Gazebo搭建仿真环境;
- 能够使用机器人模型中的传感器(雷达、摄像头、编码器...)获取仿真环境数据。
大目标:
- 先介绍 URDF 与 Rviz 集成使用,在 Rviz 中只是显示机器人模型,主要用于学习 URDF 语法
- 再介绍 URDF 与 Gazebo 集成,主要学习 URDF 仿真相关语法以及仿真环境搭建
- 最后集成 URDF 与 Gazebo 与 Rviz,实现综合应用
概念
URDF是 Unified 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会默认被安装。
运行使用命令rviz
或rosrun rviz rviz
如果rviz没有安装,请调用如下命令自行安装:
sudo apt install ros-[ROS_DISTRO]-rviz
Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装。
URDF 集成 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中显示:
实现流程:
- 准备:新建功能包,导入依赖:
urdf
与xacro
- 核心:编写 urdf 文件
- 核心:在 launch 文件集成 URDF 与 Rviz
- 在 Rviz 中显示机器人模型
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make
step1.创建工作空间
Ctrl+Alt+T打开终端分别输入:
mkdir -p helloworld/src
cd helloworld
catkin_make
step2.创建功能包
继续在该终端输入:【启动VS Code】
code .
这步打不开,可能是环境未有配置好
unzip /tmp/vscode/VSCode-linux-x64.zip -d /opt/
ln -s /opt/VSCode-linux-x64/Code /usr/local/bin/code
直接从图形窗口进入,一般创建功能包的时候就会自动生成.vscode文件
进入对应的目录
在当前功能包下,再新建几个目录:
urdf
: 存储 urdf 文件的目录
meshes
:机器人模型渲染文件(暂不使用)
config
: 配置文件
launch
: 存储 launch 启动文件
package.xml
<buildtool_depend>catkin</buildtool_depend>
<build_depend>urdf</build_depend>
<build_export_depend>urdf</build_export_depend>
<exec_depend>urdf</exec_depend>
新建一个子级文件夹: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为映射变量名称,成功结果如下:
ROS入门教程(三)—— 用C++或Python实现Hello world
URDF文件是一种标准的XML文件,用于描述机器人模型,主要为两部分:连杆link与关节joint。借助ROS官方提供的sw2urdf插件(这个需要借助solidworks工作)将我们 建模好的机器人直接转为URDF模型。
step1.安装sw2urdf插件
卡卡卡,需要用建模工具之后再学把
核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description,示例代码如下:
ROS--机器人小车仿真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
[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
这个问题就是.xacro文件里面有中文了
可运行但是有错误
https://github.com/ibrahimjad/tangent_planner/blob/master/README.md
后面暂时还没有实现