系列文章目录
前言
Author: Sherif Fathey, Toqa Essam
Review: KG
以下是机器人上传感器的清晰列表:
- 二维激光雷达(A2 RPLIDAR): 提供 360 度距离测量,创建机器人周围环境的二维地图,对于障碍物探测和绘图至关重要。
- 摄像头(RealSense D435): 捕捉深度和彩色图像,用于高级感知任务,包括物体识别和空间理解。
- IMU(MPU 6050): 测量加速度和角速度,提供方向和移动数据,对稳定和导航至关重要。
- 超声波传感器(HC-SR04): 利用声波测量与附近物体的距离,对避免碰撞和距离感应非常有用。
- 全球定位系统(NEO-6): 通过连接全球卫星网络提供位置数据,实现精确的位置跟踪和导航。
一、安装 SolidWorks 到 URDF 输出插件
要将 SolidWorks 模型导出为 URDF 文件以便在 ROS 中使用,您需要安装相应的 URDF 导出器插件。请按照以下步骤,根据您的 SolidWorks 版本安装正确的插件。
1.1 确定您的 SolidWorks 版本:
检查您的 SolidWorks 版本(2019、2020、2021 或更高版本)。根据您的版本,URDF 导出器有不同的版本,因此选择正确的版本非常重要。
1.2 下载正确的 URDF 导出器插件:
适用于 SolidWorks 2021 及更高版本(2022 及更高版本):
下载 1.6.1 版 URDF 导出器。
此版本与 SolidWorks 2021 兼容,也可用于 SolidWorks 的更高版本(如 2022)。
适用于 SolidWorks 2020:
下载 1.6.0 版 URDF 输出程序。
对于 SolidWorks 2019(在 2018 SP 5 上):
下载 1.5.1 版 URDF 输出程序。
1.3 运行安装程序:
下载正确版本后,解压文件并找到 setup.exe 安装程序。
右键单击安装程序并选择以管理员身份运行。
按照屏幕提示完成安装
1.4 在 SolidWorks 中启用插件:
启动 SolidWorks .
导航至 “工具”>“插件”。
在 “插件 ”菜单中,找到 URDF 输出插件,并通过选中 “活动插件 ”和 “启动 ”将其启用。
1.5 验证安装:
激活后,您应在 SolidWorks 工具栏中看到一个标有 URDF Exporter 的新选项卡。
如果该选项卡可见,则说明插件已安装并准备就绪
二、创建用于导出 URDF 的坐标系
为机器人的每个部件创建精确的坐标系对于正确导出 URDF 至关重要。坐标系应遵循 REP 103 中定义的标准 ROS 约定,以确保在 RViz 和 Gazebo 等仿真环境中的正确转换和行为。
2.1 REP 103:标准计量单位和坐标约定
根据 REP 103:标准计量单位和坐标约定,ROS 中的标准坐标系约定如下:
定义原点:在零件中心建立一个参考点。
根据 REP 103 对齐坐标轴:
- X 轴 : 指向前方(机器人的前进方向,或 “前方”)。
- Y 轴 : 指向机器人的左侧。
- Z 轴 : 指向上方(朝向天空)。
模拟测试 : 在 RViz 或 Gazebo 中加载 URDF 模型,验证转换和方向是否符合 REP 103 的要求。
2.2 创建和对齐坐标系的步骤:
创建 Base Link 坐标系(质量中心)
2.2.1 打开 “参考几何体”>“质量中心”,以定位 CoM。
首先选择 Base Link 的质量中心 (COM) 作为坐标系的原点。这样可确保坐标系以机器人底座最平衡点为中心。
2.2.2 创建坐标系
导航至 “参考几何体 ”工具并选择 “坐标系”。通过该工具,我们可以在 Base Link 处定义新的坐标系。
设置轴对齐 :
现在,我们需要确保坐标系的轴线符合 ROS 的约定。为此
- Z 轴应朝上。点击底座链接的上表面或机器人任何朝上的部分,确保 Z 轴指向正确方向。
- X 轴应指向前方 . 单击底座连接件的前表面,使 X 轴朝前(机器人向前运动的方向)。
- Y 轴应指向左侧 。Y 轴应自动调整为与 X 轴和 Z 轴垂直,指向左侧。
验证坐标系 :
分配坐标轴后,请务必直观地查看坐标系。您应该看到
- Z 轴向上(朝向天空或机器人顶部)。
- X 轴指向前方(机器人的运动方向)。
- Y 轴指向左侧。
2.3 创建车轮坐标系的步骤
2.3.1 在车轮中心创建一个点:
导航至 “参考几何体”>“点 ”选项卡,在车轮中心创建一个参考点。该点将作为车轮坐标系的原点。
2.3.2 使用中心点创建坐标系:
一旦定义了中心点,就可以创建与车轮预期运动对齐的坐标系。
转到 “参考几何体 ”选项卡并选择 “坐标系”。
将坐标系的原点设置为刚刚创建的中心点。
2.4 设置轴对齐 :
现在,我们需要确保坐标系的轴线符合 ROS 的约定。为此
- Z轴应朝上。点击底座链接的上表面或机器人朝上的任何部分,确保 Z 轴指向正确方向。
- X 轴应指向前方 . 单击底座连接件的前表面,使 X 轴朝前(机器人向前运动的方向)。
- Y轴应指向左侧 。该轴至关重要,因为它是机器人偏航的旋转轴。Y 轴将自动调整为与 X 轴和 Z 轴垂直,确保其指向机器人左侧,并支持模拟中的正确旋转行为。
三、设置车轮的旋转轴
在这一步中,我们将为机器人创建旋转轴。按照 ROS 的惯例,Y 轴代表偏航(绕垂直轴旋转)的轴线。下面介绍如何设置旋转轴:
3.1 创建旋转轴的步骤
3.1.1 隐藏车轮组件:
首先,在 CAD 模型中隐藏机器人的轮子,以便更好地显示 Base Link 和坐标系。这样可以更容易地定义旋转轴,而不受其他部件的干扰。
3.1.2 使用参考几何体 :
导航至 “参考几何体 ”工具并选择 “轴”。该工具允许您根据机器人 Base Link 的几何形状定义旋转轴。
3.1.3 选择旋转轮轴:
在这一步中,您需要选择车轮的轴来定义车轮的旋转轴,而不是只选择机器人底座链接的 Y 轴。该轴将作为车轮的旋转轴。
选择轴的圆柱面或车轮安装点的圆边。这样可以确保旋转轴与车轮的实际运动正确对齐。
轴线应指向车轮的 Y 轴,因为这是车轮的旋转方向。
四、为传感器创建坐标系的步骤
传感器是机器人感知和导航的重要组成部分,正确定义其坐标系至关重要。正确的传感器对齐可确保传感器数据(如摄像头或激光雷达扫描)在 ROS 和 Gazebo 仿真中的正确方向。在本步骤中,您将学习如何为摄像头或激光雷达等传感器创建坐标系,确保它们遵循正确的约定。
4.1 传感器坐标系为何重要?
传感器为机器人提供数据,而数据的准确性取决于传感器在机器人坐标系中的正确方向。
传感器的坐标系定义了传感器的安装位置,以及 ROS 将如何解释其数据(如摄像头图像或激光扫描)。
正确对齐的坐标系对于测绘、定位和物体检测等任务至关重要。
4.2 创建激光雷达坐标系 :
4.2.1 在激光雷达的光圈处创建一个点:
光圈是激光雷达光束的发源地。您需要在此位置创建一个参考点,作为激光雷达坐标系的原点。
步骤 :
使用 “参考几何体”>“点 ”选项卡在激光雷达的光圈处创建一个参考点(通常是扫描平面的中心或发射光束的原点)。
确保该点位于激光雷达扫描区域的精确中心,因为这将是激光雷达坐标系的参考点。
4.2.2 使用激光雷达的光圈创建坐标系 :
创建点之后,现在可以使用光圈作为原点定义坐标系。
然后,将原点设置为刚刚在激光雷达孔径处创建的点
五、将设计导出为 URDF
设置好所有坐标系和旋转轴后,请按照以下步骤将 SolidWorks 模型导出为 URDF 文件,以便与 ROS 和 Gazebo 集成
5.1 打开 URDF 导出器 :
- 在 SolidWorks 中,转到工具选项卡。
- 找到 URDF 输出程序扩展
从 Base Link 开始
- 选择坐标系:首先选择为 Base Link 创建的坐标系。
- 设置 Base Link
- 添加 Child Links
添加车轮 Links
- 为每个车轮选择在车轮轴上创建的坐标系。
- 将车轮作为 Child Links 添加到 Base Link。
- 确保每个车轮都根据其坐标系和旋转轴正确定位和定向
添加传感器 Links
- 选择坐标系
- 指定关节类型 :传感器链接使用固定关节。
5.2 导出完整的 URDF
预览和导出
单击 URDF 导出器中的预览和导出按钮,查看生成的 URDF 文件。
- 确保预览中显示的一切符合预期。
- 如果满意,单击 “预览和导出 ”按钮生成最终 URDF 文件。
保存文件 :
选择一个位置来保存导出的 URDF 文件以及任何相关文件(如网格、纹理)。
导出过程将创建一个包含 URDF 文件、网格和任何启动文件的文件夹。
从 SolidWorks 导出后,打开此软件包,您将看到一系列重要文件和目录,它们构成了机器人项目的主干。以下是您将发现的内容:
├── CMakeLists.txt # Build configuration for the project
├── config
│ └── joint_names_arabian_robot.yaml # Configuration for joint names
├── export.log # Export log from SolidWorks
├── launch # Launch files for various purposes
│ ├── display.launch # Visualization launch file
│ └── gazebo.launch # Gazebo simulation launch file
├── meshes # 3D models for robot components
│ ├── 2d_lidar.STL # Lidar sensor mesh
│ ├── arabian_link.STL # Main robot body mesh
│ ├── base_link.STL # Base link of the robot
│ ├── camera_link.STL # Camera attachment mesh
│ ├── front_left_wheel.STL # Front left wheel mesh
│ ├── front_right_wheel.STL # Front right wheel mesh
│ ├── gps_Link.STL # GPS module attachment mesh
│ ├── imu_Link.STL # IMU sensor link mesh
│ ├── lidar_link.STL # Lidar sensor link mesh
│ ├── plug_collision.stl # Collision geometry for plug
│ ├── plug.stl # Charging plug mesh
│ ├── realsenseD435.dae # RealSense camera model
│ ├── rear_left_wheel.STL # Rear left wheel mesh
│ ├── rear_right_wheel.STL # Rear right wheel mesh
│ ├── rear_ultrasonic_link.STL # Rear ultrasonic sensor link mesh
│ ├── rear_ultrasonic.STL # Rear ultrasonic sensor mesh
│ ├── ultrasonic_link.STL # Ultrasonic sensor link mesh
│ └── upper_Link.STL # Upper robot body part mesh
├── package.xml # ROS package manifest
├── readme.md # Documentation for this package
├── textures # Placeholder for any textures used in the models
└── urdf # Robot description files in URDF/Xacro format
├── arabian_robot.csv # CSV data related to robot configuration
└── arabian_robot.urdf # Main URDF file in Xacro format
注:该结构提供了使机器人栩栩如生所需的一切--从物理模型到用于模拟和现实世界交互的启动文件!
5.3 编辑 URDF 结构和启动文件
URDF 文件: 我们将把 arabian_robot.urdf 文件分为两个独立文件 arabian_robot.urdf.xacro , sensor.xacro
- 创建 arabian_robot.urdf.xacro: 编辑此文件以定义机器人的主体。这包括指定机器人的物理结构和组件。
- 创建 sensor.xacro: 在此文件中定义机器人上的传感器。文件中应说明每个传感器的位置和属性。
- 创建 plugin.gazebo: 添加此文件以指定机器人所需的任何 Gazebo 插件。这可能包括用于模拟目的的插件,如摄像头传感器或控制器。
更多详情,请参阅我们在插件部分的说明 arab meet/plugins.md。
5.3.1 添加 GPS 插件
安装必要的 ROS 软件包:打开终端并运行以下命令来安装 GPS 所需的 Gazebo 插件:
sudo apt-get install ros-noetic-hector-gazebo-plugins
将 GPS 插件添加到 Gazebo 模型中: 接下来,在机器人的 URDF 文件中加入以下插件构型,以集成 GPS 功能:
<gazebo>
<plugin name="gazebo_ros_gps" filename="libhector_gazebo_ros_gps.so">
<updateRate>4.0</updateRate>
<bodyName>gps_Link</bodyName>
<frameId>gps_Link</frameId>
<topicName>/gps/fix</topicName>
<velocityTopicName>/gps/fix_velocity</velocityTopicName>
<referenceLatitude>-30.06022459407145675</referenceLatitude>
<referenceLongitude>-51.173913575780311191</referenceLongitude>
<referenceHeading>90</referenceHeading>
<referenceAltitude>10</referenceAltitude>
<offset>0 0 0</offset>
<drift>0.001 0.001 0.001</drift>
<gaussianNoise>0.05 0.05 0.05</gaussianNoise>
<velocityDrift>0.001 0.001 0.001</velocityDrift>
<velocityGaussianNoise>0.5 0.5 0.5</velocityGaussianNoise>
</plugin>
</gazebo>
要查找您所在位置的经纬度,请访问本网站: GPS 坐标。只需输入您的位置,网站就会为您提供相应的经纬度值。
启动文件:
我们有两个启动文件:display.launch 用于在 RViz 中启动机器人,以实现可视化;gazebo.launch 用于在 Gazebo 仿真中启动机器人。接下来,我们将 创建 robot_description.launch,以同时运行 Gazebo 和 RViz。
5.3.2 在 Gazebo 中为您的机器人定制材料和纹理
要在 Gazebo 中创建一个白色部件,请按照以下步骤操作:
创建材质文件:
打开终端,创建新的材质文件:
nano white_material.material
然后,将这些内容粘贴到文件中:
material WhiteMaterial
{
technique
{
pass
{
ambient 1 1 1 1
diffuse 1 1 1 1
specular 1 1 1 1
emissive 1 1 1 1
}
}
}
该文件定义了机器人模型的白色材料(WhiteMaterial),具体说明了它对光线的反应:
- 环境光: 反射环境光(白色)。
- 漫反射:反射直射光(白色)。
- 镜面反射: 添加闪亮高光(白色)。
- 发射:使表面发光(白色): 使表面发光(白色)。这将在模拟中为机器人创建明亮的白色发光效果。
将材质文件复制到 Gazebo matrial:将 white_material.material 文件复制到 Gazebo 的材质脚本目录:使用此命令
cp white_material.material /usr/share/gazebo-11/media/materials/scripts/
如果遇到权限拒绝错误,请使用 sudo 获取必要的权限:
sudo cp white_material.material /usr/share/gazebo-11/media/materials/scripts/
在您的URDF中应用白色材料: 要将材料应用到机器人上,请将其添加到 URDF 文件中:
<gazebo reference="upper_Link">
<material>WhiteMaterial</material>
</gazebo>
5.3.3 为机器人添加自定义徽标
请按照以下步骤应用自定义徽标纹理:
创建徽标材质文件:
打开终端,为徽标创建材质文件:
nano logo.material
然后,将这些内容粘贴到文件中:
material testing/material
{
technique
{
pass
{
ambient 1 1 1 1
diffuse 1 1 1 1
specular 1 1 1 1
emissive 1 1 1 1
texture_unit
{
texture logo.png
}
}
}
}
该材质脚本定义了表面在 3D 环境中的外观:
- 材质名称:测试/材质
- 颜色属性:环境、漫反射、镜面和发射都设置为白色(1 1 1 1),这意味着该材质看起来完全是白色的。
- 纹理 在表面应用纹理图像 logo.png。
将材质文件复制到 gazebo matrial:
将 logo.material 文件复制到 Gazebo 的材质脚本目录下:
sudo cp logo.material /usr/share/gazebo-11/media/materials/scripts/
复制徽标图像:
将徽标图像复制到 Gazebo 的材质纹理目录中:
sudo cp logo.png /usr/share/gazebo-11/media/
在URDF中应用徽标: 更新 URDF 文件,在需要徽标的机器人部件中引用新材料:
<gazebo reference="logo">
<material>testing/material</material>
</gazebo>
将 “徽标 ”替换为机器人上徽标所在位置的适当参考值。
按照以上步骤,您就可以在 Gazebo 中为机器人添加自定义材质和纹理,包括徽标。
六、设置和运行机器人的步骤
6.1 创建和构建工作区
首先,创建 ROS 工作区并克隆机器人软件包:
mkdir -p catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
同时运行 Gazebo 和 RViz
要同时启动 Gazebo 模拟和 RViz 可视化,请使用下面的命令:
roslaunch arabian_robot robot_description.launch