赞
踩
要在 RViz2 中创建一个可视化的机器人,首先需要有一个机器人的 URDF (Unified Robot Description Format) 文件。URDF 文件描述了机器人的物理组成和关节等动态特性。接下来,就可以使用 RViz2 来加载和查看这个模型。
在 ROS(Robot Operating System)的环境中,URDF(Unified Robot Description Format)是用于描述机器人模型的 XML 格式。虽然手动编写 URDF 文件是一种常见的做法,但也存在一些可视化工具可以帮助简化和加速这一过程。以下是一些可用的工具,它们可以在创建和编辑 URDF 文件时提供图形界面或可视化支持:
描述:这是一个 SolidWorks 插件,允许用户直接从 SolidWorks CAD 软件中导出 URDF 文件。这个工具特别适合那些已经使用 SolidWorks 设计机器人的用户。
链接:SolidWorks to URDF Exporter on GitHub
描述:Autodesk Fusion 360 用户可以利用这个插件将他们的 CAD 模型转换成 URDF 格式。这提供了从流行的 CAD 软件到 ROS 的无缝过渡。
链接:Fusion 360 to URDF Exporter
描述:这是 SolidWorks 的另一个插件,用于将 SolidWorks 模型转换为 URDF。它支持导出复杂的装配体,并包括联动和其他动态特性。
链接:通常可以在 SolidWorks 插件市场或 ROS 社区资源中找到。
描述:Phobos 是一个 Blender 插件,使用户能够在 Blender 内编辑和导出 URDF 文件。这不仅可以创建静态模型,还可以定义动态属性和机器人的运动学。
链接:Phobos on GitHub
描述:这是另一个 Blender 插件,专注于改进 Blender 制作的模型到 URDF 格式的转换过程。它适用于希望在图形界面中操作并直观看到结果的用户。
链接:URDF for Blender
ros2 pkg create rviz2_4_udf_package --build-type ament_python
这个包可以在某个文件夹的src文件夹下。
packagename:rviz2_4_udf_package
编译方式:ament_python
cd rviz2_4_udf_package/
mkdir urdf
cd urdf
touch virtural_botbase.urdf
cd ..
mkdir launch
cd launch
touch display_rviz2.launch.py
现在的文件夹结构如下:
├── launch └── display_rviz2.launch.py ├── package.xml ├── resource └── rviz2_4_udf_package ├── rviz2_4_udf_package └── __init__.py ├── setup.cfg ├── setup.py ├── test ├── test_copyright.py ├── test_flake8.py └── test_pep257.py └── urdf └── virtural_botbase.urdf
参考 fishros 8.2 RVIZ2可视化移动机器人模型中的模型构建
以下代码为构建一个4轮麦克纳姆轮的正方形底盘
<?xml version="1.0"?> <robot name="mecanum_robot"> <!-- Base Link --> <link name="base_link"> <visual> <geometry> <box size="0.5 0.5 0.1"/> <!-- Length, Width, Height --> </geometry> <material name="blue"> <color rgba="0 0 1 1"/> <!-- RGBA Colors --> </material> </visual> <collision> <geometry> <box size="0.5 0.5 0.1"/> </geometry> </collision> </link> <!-- Mecanum Wheels --> <!-- Wheel Front Left --> <link name="wheel_front_left"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> <!-- Height and radius of the wheel --> </geometry> <material name="black"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </collision> </link> <!-- Joint connecting front left wheel to base --> <joint name="joint_front_left" type="continuous"> <parent link="base_link"/> <child link="wheel_front_left"/> <origin xyz="0.25 0.25 0" rpy="0 0 0"/> <!-- Position of the wheel --> <axis xyz="0 0 1"/> <!-- Rotation axis --> </joint> <!-- Similar definitions for other three wheels --> <link name="wheel_front_right"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <material name="black"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </collision> </link> <joint name="joint_front_right" type="continuous"> <parent link="base_link"/> <child link="wheel_front_right"/> <origin xyz="0.25 -0.25 0" rpy="0 0 0"/> <axis xyz="0 0 1"/> </joint> <!-- Rear Left --> <link name="wheel_rear_left"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <material name="black"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </collision> </link> <joint name="joint_rear_left" type="continuous"> <parent link="base_link"/> <child link="wheel_rear_left"/> <origin xyz="-0.25 0.25 0" rpy="0 0 0"/> <axis xyz="0 0 1"/> </joint> <!-- Rear Right --> <link name="wheel_rear_right"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <material name="black"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </collision> </link> <joint name="joint_rear_right" type="continuous"> <parent link="base_link"/> <child link="wheel_rear_right"/> <origin xyz="-0.25 -0.25 0" rpy="0 0 0"/> <axis xyz="0 0 1"/> </joint> </robot>
**基本结构:**机器人包括一个基本的 base_link 和四个 wheel_ 链接。
**视觉和碰撞元素:**每个链接都有视觉和碰撞属性定义。视觉属性定义了该部件的外观,碰撞属性定义了物理交互时的形状。
**关节:**每个轮子通过一个类型为 continuous 的关节与底盘相连。这允许轮子围绕其安装点无限旋转。
import os from launch import LaunchDescription from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare def generate_launch_description(): package_name = 'rviz2_4_udf_package' urdf_name = "virtural_botbase.urdf" ld = LaunchDescription() pkg_share = FindPackageShare(package=package_name).find(package_name) urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}') robot_state_publisher_node = Node( package='robot_state_publisher', executable='robot_state_publisher', arguments=[urdf_model_path] ) joint_state_publisher_node = Node( package='joint_state_publisher_gui', executable='joint_state_publisher_gui', name='joint_state_publisher_gui', arguments=[urdf_model_path] ) rviz2_node = Node( package='rviz2', executable='rviz2', name='rviz2', output='screen', ) ld.add_action(robot_state_publisher_node) ld.add_action(joint_state_publisher_node) ld.add_action(rviz2_node) return ld
from glob import glob
import os
package_name = 'rviz2_4_udf_package'
(os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
(os.path.join('share', package_name, 'urdf'), glob('urdf/**')),
from setuptools import find_packages, setup from glob import glob import os package_name = 'rviz2_4_udf_package' setup( name=package_name, version='0.0.0', packages=find_packages(exclude=['test']), data_files=[ ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')), (os.path.join('share', package_name, 'urdf'), glob('urdf/**')), ], install_requires=['setuptools'], zip_safe=True, maintainer='harebert', maintainer_email='harebert@todo.todo', description='TODO: Package description', license='TODO: License declaration', tests_require=['pytest'], entry_points={ 'console_scripts': [ ], }, )
回到src以上层级文件夹,编译
colcon build
source install/setup.bash
以下命令是在基于 Ubuntu 的系统中安装 ROS 的 joint-state-publisher-gui 和 robot-state-publisher 包。这些是 ROS 组件,用于发布机器人关节状态,并提供一个 GUI(图形用户界面)来手动操作这些关节状态,非常有用于调试和可视化机器人模型的运动。
sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisher
在安装完毕后,可以使用如下命令来检查是否安装成功:
apt list --installed | grep ros-$ROS_DISTRO-joint-state-publisher-gui
apt list --installed | grep ros-$ROS_DISTRO-robot-state-publisher
ros2 launch rviz2_4_udf_package display_rviz2.launch.py
打开add按钮,添加RobotModel,然后选择当前的机器人
在RobotModel的DescriptionTopic中选择当前机器人
在GlobalOption的FixFrame中选择base_link
最终呈现的效果如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。