ros2 visualize

ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(xacro /home/user/ros2/arduinobot_ws/src/arduinobot_description/urdf/arduinobot_urdf.xacro)"
# all the movable joints of our robots
ros2 run joint_state_publisher_gui joint_state_publisher_gui
# open rviz2 visulize
ros2 run rviz2 rviz2

use launch file
display.launch.py

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
import os
from ament_index_python.packages import get_package_share_directory
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command, LaunchConfiguration

def generate_launch_description():
    model_arg=DeclareLaunchArgument(
        name="model",
        default_value=os.path.join(get_package_share_directory("arduinobot_description"),"urdf","arduinobot_urdf.xacro"),
        description="Absolute path to the robot URDF file"
    )
    """
        convert xacro to plain urdf
        LaunchConfiguration read the content of model argument which full path of axcro model
        robot_description will be full plain urdf model
    """
    robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]))
    # all the nodes want to start
    robot_state_publisher = Node(
        package="robot_state_publisher",
        executable="robot_state_publisher",
        parameters=[{"robot_description":robot_description}]
    )

    joint_state_publisher_gui = Node(
        package="joint_state_publisher_gui",
        executable="joint_state_publisher_gui"
    )
    rviz_node = Node(
        package="rviz2",
        executable="rviz2",
        name="rviz2",
        output="screen",
        arguments=["-d",os.path.join(get_package_share_directory("arduinobot_description"),"rviz","display.rviz")]
    )
    return LaunchDescription([
        model_arg,
        robot_state_publisher,
        joint_state_publisher_gui,
        rviz_node
    ])

cmd

ros2 launch arduinobot_description display.launch.py

gazebo launch

需要先在axcro中添加质点惯性张量和collision,collision复制stl文件即可

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument, SetEnvironmentVariable, IncludeLaunchDescription
import os
from ament_index_python.packages import get_package_share_directory, get_package_prefix
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command, LaunchConfiguration
from launch.launch_description_sources import PythonLaunchDescriptionSource

def generate_launch_description():
    model_arg=DeclareLaunchArgument(
        name="model",
        default_value=os.path.join(get_package_share_directory("arduinobot_description"),"urdf","arduinobot_urdf.xacro"),
        description="Absolute path to the robot URDF file"
    )

    """
    set enviromental variable so that it can properly load
    and visualize robot's urdf model
    """
    env_var = SetEnvironmentVariable("GAZEBO_MODEL_PATH",os.path.join(get_package_prefix("arduinobot_description"),"share"))
    """
        convert xacro to plain urdf
        LaunchConfiguration read the content of model argument which full path of axcro model
        robot_description will be full plain urdf model
    """
    robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]))
    # all the nodes want to start
    robot_state_publisher = Node(
        package="robot_state_publisher",
        executable="robot_state_publisher",
        parameters=[{"robot_description":robot_description}]
    )
    """
    gazebo has 2 modules server and client, need launch
    """
    start_gazebo_server = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(get_package_share_directory("gazebo_ros"),"launch","gzserver.launch.py"))
    )
    start_gazebo_client = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(get_package_share_directory("gazebo_ros"),"launch","gzclient.launch.py"))
    )
    # appear our bot
    spawn_robot = Node(
        package="gazebo_ros",
        executable="spawn_entity.py",
        arguments=["-entity","arduinobot","-topic", "robot_description"]
    )

    return LaunchDescription([
        env_var,
        model_arg,
        robot_state_publisher,
        start_gazebo_server,
        start_gazebo_client,
        spawn_robot
    ])

gazebo

transmission this tag indicates the presense of machanical transmission connects each motor of robot to each link of arm.
all movable links will be actuated by the same motor with same mechanical.

<!-- the number of the joint to which transmission refers to -->
<xacro:macro name="default_transmission" params="number">
    <transmission name="transmission_${number}">
        <!-- simulation of transmission logic -->
        <plugin>transmission_interface/SimpleTransmission</plugin>
        <joint name="joint_${number}" role="joint1">
            <!-- one degree of the motor corresponds to one degree of the robot arm -->
            <mechanicalReduction>1.0</mechanicalReduction>
        </joint>
        <actuator name="motor_${number}" role="actuator1">
          
        </actuator>
    </transmission>
</xacro:macro>

<xacro:default_transmission number="1"/>
<xacro:default_transmission number="2"/>
<xacro:default_transmission number="3"/>
<xacro:default_transmission number="4"/>
posted @ 2025-07-15 22:45  fangshuo  阅读(51)  评论(0)    收藏  举报