見出し画像

Robotics and ROS 2 - Learn by Doing! Manipulators: ランチファイル (セクション4-3/10)

  • RVizを使用してロボットのURDFモデルを可視化し、複数のROS 2ノードを起動する方法を学びました。

  • ランチファイルを使用して、複雑なノードの起動プロセスを簡略化し、単一のコマンドで複数のノードを管理できるようにしました。

  • 課題1では、URDFモデルにRGBカメラを追加し、固定ジョイントを使って正しく配置する方法を実践しました。

「Robotics and ROS 2 - Learn by Doing! Manipulators」コースのセクション4の第3/4では、ロボットモデルの可視化と複数のROS 2ノードの起動プロセスの簡略化のための高度な技術を学びました。このセグメントは、デジタルツインセクションのレクチャー35から37および課題1(課題1)をカバーしています。

レクチャー35:ロボットの可視化

RVizでロボットを可視化する

このレッスンでは、これまでに学んだすべてを適用して、RVizを使用してロボットのURDFモデルを可視化しました。このプロセスには、複数のROS 2ノードとターミナルコマンドが含まれます:

  1. Robot State Publisherノード: ロボットのURDFモデルをパブリッシュします。

    . install/setup.bash
    ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(xacro /home/hafnium/Robotics-and-ROS-2-Learn-by-Doing-Manipulators/Section4_Digital_Twin/arduinobot_ws/src/arduinobot_description/urdf/arduinobot.urdf.xacro)"
  1. Joint State Publisher GUI: ロボットのジョイントを操作するためのスライダーを提供します。

    . install/setup.bash
    ros2 run joint_state_publisher_gui joint_state_publisher_gui
  1. RVizの可視化: ロボットモデルとその動きを表示します。

    . install/setup.bash
    ros2 run rviz2 rviz2

RVizでロボットを可視化するために、TFとRobotModelプラグインを追加し、ロボット説明トピックを指定しました。このセットアップにより、Joint State Publisher GUIのスライダーに従って動くロボットのジョイントとリンクを見ることができました。

レクチャー36:ランチファイルによる簡略化

複雑な操作の簡素化

複数のROS 2ノードを管理するのは面倒であり、特にアプリケーションが複雑になるとその傾向が顕著です。ROS 2のランチファイルは、単一のコマンドで複数のノードを起動し、パラメータを設定するためのソリューションを提供します。ランチファイルはPython、XML、またはYAMLで記述できますが、Pythonが柔軟性のために推奨されます。

ランチファイルの主要コンポーネント

  1. ノード: 起動するROS 2ノードを定義します。

  2. パラメータ: ノードのパラメータを設定します。

  3. 依存関係: 依存関係と実行順序を管理します。

操作をランチファイルに整理することで、可用性と保守性が向上し、複雑なロボットアプリケーションの管理が容易になります。

レクチャー37:可視化のためのランチファイルの作成

ランチファイルの構築

ロボットの可視化プロセスを開始するためのPythonベースのランチファイルを作成しました:

  1. ランチ引数の宣言: ロボットのURDFモデルへのパスを定義します。

  2. ノードの定義: 起動するノード(Robot State Publisher、Joint State Publisher GUI、RViz)を指定します。

  3. パラメータの設定: Robot State Publisherノードのロボット説明パラメータを構成します。

以下はランチファイルの簡略化バージョンです:

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

def generate_launch_description():
    arduinobot_description_dir = get_package_share_directory('arduinobot_description')
    model_arg = DeclareLaunchArgument(
        name='model', 
        default_value=os.path.join(arduinobot_description_dir, 'urdf', 'arduinobot.urdf.xacro'),
        description='Absolute path to robot urdf file'
    )
    
    robot_description = ParameterValue(Command(['xacro ', LaunchConfiguration('model')]), value_type=str)
    
    robot_state_publisher_node = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        parameters=[{'robot_description': 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='screen',
        arguments=['-d', os.path.join(arduinobot_description_dir, 'rviz', 'display.rviz')]
    )
    
    return LaunchDescription([
        model_arg,
        joint_state_publisher_gui_node,
        robot_state_publisher_node,
        rviz_node
    ])

ランチファイルの実行

ランチファイルを作成した後、ワークスペースをビルドし、ランチファイルを実行しました:

colcon build
. install/setup.bash
ros2 launch arduinobot_description display.launch.py

このコマンドにより、必要なすべてのノードが起動され、ロボットモデルの可視化プロセスが大幅に簡素化されました。

課題1: RGBカメラをロボットに追加する

課題の目的

この課題では、ロボットのURDFモデルにRGBカメラを統合し、新しいセンサーを追加することでその機能を拡張することに焦点を当てました。

課題を完了するためのステップ

  1. 新しいリンクの追加: RGBカメラ用の新しいリンクをURDFに定義します。

  2. 新しいジョイントの追加: RGBカメラリンクをロボットアームのベースリンクに接続します。

  3. カメラの位置と向きの設定: リンクの原点を調整して、カメラを正しく位置付け、向きを合わせます。

URDFスニペットの例

<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="arduinobot">
    <link name="rgb_camera">
        <inertial>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <mass value="0.1"/>
            <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/>
        </inertial>
        <visual>
            <origin xyz="0 0.12 0.12" rpy="${PI/2} -${PI} ${PI/2}"/>
            <geometry>
                <mesh filename="package://arduinobot_description/meshes/pi_camera.STL" scale="0.01 0.01 0.01"/>
            </geometry>
        </visual>
        <collision>
            <origin xyz="0 0.12 0.12" rpy="${PI/2} -${PI} ${PI/2}"/>
            <geometry>
                <mesh filename="package://arduinobot_description/meshes/pi_camera.STL" scale="0.01 0.01 0.01"/>
            </geometry>
        </collision>
    </link>
    <joint name="rgb_camera_joint" type="fixed">
        <parent link="base_link"/>
        <child link="rgb_camera"/>
        <origin xyz="0.45 0.2 0.2" rpy="0 -0.5 1.57"/>
    </joint>
</robot>

課題の反省

この演習では、URDFモデリングの精度と、ランチファイルを使用して複雑な操作を簡素化するツールの重要性が強調されました。値を反復的に調整し、固定ジョイントを使用することで、カメラが正しく位置付けられ、向きを合わせることができました。

結論

これらのレッスンでは、ROS 2でのロボットアプリケーションの可視化と管理能力を向上させました。RVizを利用して詳細な可視化を行い、ランチファイルを使用して操作を簡素化することで、より複雑で効率的なロボットシステムの構築が可能になりました。ハンズオン課題を通じて、URDFモデリングとセンサー統合に対する理解を深めました。

「超本当にドラゴン」へ

この記事が気に入ったらサポートをしてみませんか?