Robot Model Visualization
Moby Description Package
The moby_description
package includes the model files (URDF) for use with RViz and Gazebo simulator.
Robot Model
- URDF (The Universal Robotic Description Format): an XML-format file describing the kinematic and dynamic elements of the robot.
- Xacro: an XML macro language that constructs shorter and more readable XML files by using macros that expand to larger XML expressions.
In the urdf folder of the moby_description
package, There's a config
folder which contains all config for Moby models (MobyRP and MobyRP_V3)
The other xacro files read the config
files and build the description of the robot.
The diagram below show the relationship of the files
joint_limits ────────┐
kinematics ──────────┤
physical_parameters ─┤
visual_parameters ───┤
moby_common ─┤
moby_transmission ─┤
materials ─┴─ moby_macro─moby.urdf
For more information about urdf and xacro, please visit * ROS2 Humble build model tutorial
Launching RViz
Moby models can be visualized with RViz2. launch file is a file for launching a number of ROS nodes at the same time. The following command is used to launch the robot description and visualization for the Moby robot model in ROS2.
By specifying the moby_type
as "moby_rp", the launch file will load the appropriate configuration files and launch the necessary nodes to display the robot in a visualization tool like RViz.
Now you should see windows launched.
by tweaking the joint position value of joint_states_publisher
, the position of the Indy robot and Moby wheels in RViz can be changed.
Launch File
The code below is moby_display.launch.py, from the command above.
#!/usr/bin/python3
#-*- coding: utf-8 -*-
from launch_ros.actions import Node
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch_ros.substitutions import FindPackageShare
from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution
def generate_launch_description():
# Declare arguments
declared_arguments = []
declared_arguments.append(
DeclareLaunchArgument(
"name",
default_value="moby"
)
)
declared_arguments.append(
DeclareLaunchArgument(
"moby_type",
default_value="moby_rp",
description="Type of Moby robot.",
choices=["moby_rp", "moby_rp_v3"]
)
)
declared_arguments.append(
DeclareLaunchArgument(
"prefix",
default_value='""',
description="Prefix of the joint names, useful for \
multi-robot setup. If changed than also joint names in the controllers configuration \
have to be updated."
)
)
# Initialize Arguments
name = LaunchConfiguration("name")
moby_type = LaunchConfiguration("moby_type")
prefix = LaunchConfiguration("prefix")
description_package = FindPackageShare('moby_description')
robot_description_content = Command(
[
PathJoinSubstitution([FindExecutable(name="xacro")]),
" ",
PathJoinSubstitution([description_package, "urdf", 'moby.urdf.xacro']),
" ",
"name:=",
name,
" ",
"moby_type:=",
moby_type,
" ",
"prefix:=",
prefix
]
)
robot_description = {"robot_description": robot_description_content}
rviz_config_file = PathJoinSubstitution(
[description_package, "rviz_config", "moby.rviz"]
)
robot_state_publisher_node = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
output="screen",
parameters=[robot_description]
)
joint_state_publisher_gui_node = Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui'
)
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="log",
arguments=["-d", rviz_config_file]
)
nodes = [
joint_state_publisher_gui_node,
robot_state_publisher_node,
rviz_node,
]
return LaunchDescription(declared_arguments + nodes)
-
robot_description: Reads
moby.urdf.xacro
also, it is parameters forjoint_state_publisher
node. -
joint_state_publisher: publishes the joint positions of
robot_description
, with /joint_states topic. -
robot_state_publisher: subscribes /joint_states topic, and publishes transform of each link.
-
rviz : launches RViz node, loading rviz configuration file (moby_description/rviz_config/moby.rviz). Subscribes
tf
published byrobot_state_publisher
node, and visualizes them.