diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6fccbd26..75448fe2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,19 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Changelog for package LBR FRI ROS 2 Stack ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Humble v2.1.0 (2024-09-10) +-------------------------- +* De-couple launch files from ``lbr_bringup`` for easier customization (breaking change): + + * Removed ``sim:=true / false`` argument from launch files in favor of dedicated launch files (since no feature parity between simulation and real robot) + * MoveIt and RViz need to be launched separately now + * User can now launch via: + + * ``ros2 launch lbr_bringup mock.launch.py`` (new: mock system) + * ``ros2 launch lbr_bringup hardware.launch.py`` (real robot) + * ``ros2 launch lbr_bringup gazebo.launch.py`` (Gazebo simulation) +* Added mock hardware to ``lbr_ros2_control`` (for simple ``ros2_control`` testing without the need for Gazebo) + Humble v2.0.0 (2024-07-08) -------------------------- * Remove ``app.launch.py`` from demos in favor for ``ros2_control`` variant (breaking change) diff --git a/lbr_description/config/config.rviz b/lbr_bringup/config/gazebo.rviz similarity index 77% rename from lbr_description/config/config.rviz rename to lbr_bringup/config/gazebo.rviz index f0e17afd..f4486f40 100644 --- a/lbr_description/config/config.rviz +++ b/lbr_bringup/config/gazebo.rviz @@ -1,14 +1,15 @@ Panels: - Class: rviz_common/Displays - Help Height: 78 + Help Height: 87 Name: Displays Property Tree Widget: Expanded: - /Global Options1 - /Status1 - /RobotModel1 - Splitter Ratio: 0.5 - Tree Height: 787 + - /RobotModel1/Description Topic1 + Splitter Ratio: 0.40760868787765503 + Tree Height: 657 - Class: rviz_common/Selection Name: Selection - Class: rviz_common/Tool Properties @@ -22,6 +23,11 @@ Panels: - /Current View1 Name: Views Splitter Ratio: 0.5 + - Class: rviz_common/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: "" Visualization Manager: Class: "" Displays: @@ -53,7 +59,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /robot_description + Value: /lbr/robot_description Enabled: true Links: All Links Enabled: true @@ -105,25 +111,15 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - storz_straight_exoscope_hsi_link_0: - Alpha: 1 - Show Axes: false - Show Trail: false - Value: true - storz_straight_exoscope_hsi_link_cm: - Alpha: 1 - Show Axes: false - Show Trail: false - storz_straight_exoscope_hsi_link_cm_optical: - Alpha: 1 - Show Axes: false - Show Trail: false world: Alpha: 1 Show Axes: false Show Trail: false + Mass Properties: + Inertia: false + Mass: false Name: RobotModel - TF Prefix: "" + TF Prefix: lbr Update Interval: 0 Value: true Visual Enabled: true @@ -142,6 +138,9 @@ Visualization Manager: - Class: rviz_default_plugins/Measure Line color: 128; 128; 0 - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 Topic: Depth: 5 Durability Policy: Volatile @@ -170,39 +169,41 @@ Visualization Manager: Views: Current: Class: rviz_default_plugins/Orbit - Distance: 4.795630931854248 + Distance: 3.38482666015625 Enable Stereo Rendering: Stereo Eye Separation: 0.05999999865889549 Stereo Focal Distance: 1 Swap Stereo Eyes: false Value: false Focal Point: - X: -0.19523456692695618 - Y: -0.17667146027088165 - Z: 0.2629773020744324 - Focal Shape Fixed Size: true + X: -0.10796727985143661 + Y: -0.08450233191251755 + Z: 0.1360965371131897 + Focal Shape Fixed Size: false Focal Shape Size: 0.05000000074505806 Invert Z Axis: false Name: Current View Near Clip Distance: 0.009999999776482582 - Pitch: 0.785398006439209 + Pitch: 0.7853981852531433 Target Frame: - Value: Orbit (rviz_default_plugins) - Yaw: 0.785398006439209 + Value: Orbit (rviz) + Yaw: 0.7853981852531433 Saved: ~ Window Geometry: Displays: collapsed: false - Height: 1016 + Height: 1021 Hide Left Dock: false Hide Right Dock: false - QMainWindow State: 000000ff00000000fd0000000400000000000001ba0000039efc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000039e000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000039efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d0000039e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d00650100000000000004500000000000000000000004ab0000039e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd00000004000000000000021200000337fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000007901000003fb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000004e00000337000000ff01000003fb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035bfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003f0000035b000000d701000003fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073a0000004efc0100000002fb0000000800540069006d006501000000000000073a000002e701000003fb0000000800540069006d00650100000000000004500000000000000000000005270000033700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 Selection: collapsed: false + Time: + collapsed: false Tool Properties: collapsed: false Views: collapsed: false - Width: 1920 - X: 0 - Y: 27 + Width: 1850 + X: 1080 + Y: 450 diff --git a/lbr_bringup/config/config.rviz b/lbr_bringup/config/hardware.rviz similarity index 100% rename from lbr_bringup/config/config.rviz rename to lbr_bringup/config/hardware.rviz diff --git a/lbr_bringup/config/mock.rviz b/lbr_bringup/config/mock.rviz new file mode 100644 index 00000000..f4486f40 --- /dev/null +++ b/lbr_bringup/config/mock.rviz @@ -0,0 +1,209 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 87 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + - /RobotModel1 + - /RobotModel1/Description Topic1 + Splitter Ratio: 0.40760868787765503 + Tree Height: 657 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz_common/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: "" +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 34; 141; 255 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz_default_plugins/RobotModel + Collision Enabled: false + Description File: "" + Description Source: Topic + Description Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /lbr/robot_description + Enabled: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + link_0: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_1: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_2: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_3: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_4: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_5: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_6: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_7: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + link_ee: + Alpha: 1 + Show Axes: false + Show Trail: false + world: + Alpha: 1 + Show Axes: false + Show Trail: false + Mass Properties: + Inertia: false + Mass: false + Name: RobotModel + TF Prefix: lbr + Update Interval: 0 + Value: true + Visual Enabled: true + Enabled: true + Global Options: + Background Color: 21; 21; 26 + Fixed Frame: world + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 3.38482666015625 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: -0.10796727985143661 + Y: -0.08450233191251755 + Z: 0.1360965371131897 + Focal Shape Fixed Size: false + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.7853981852531433 + Target Frame: + Value: Orbit (rviz) + Yaw: 0.7853981852531433 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1021 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd00000004000000000000021200000337fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000007901000003fb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000004e00000337000000ff01000003fb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035bfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003f0000035b000000d701000003fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073a0000004efc0100000002fb0000000800540069006d006501000000000000073a000002e701000003fb0000000800540069006d00650100000000000004500000000000000000000005270000033700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1850 + X: 1080 + Y: 450 diff --git a/lbr_bringup/launch/gazebo.launch.py b/lbr_bringup/launch/gazebo.launch.py index ee76f9b3..0ff93e5b 100644 --- a/lbr_bringup/launch/gazebo.launch.py +++ b/lbr_bringup/launch/gazebo.launch.py @@ -1,6 +1,7 @@ from launch import LaunchDescription from launch.substitutions import LaunchConfiguration, PathJoinSubstitution -from lbr_bringup.description import GazeboMixin, LBRDescriptionMixin +from lbr_bringup.description import LBRDescriptionMixin +from lbr_bringup.gazebo import GazeboMixin from lbr_bringup.ros2_control import LBRROS2ControlMixin @@ -37,7 +38,9 @@ def generate_launch_description() -> LaunchDescription: # Gazebo ld.add_action(GazeboMixin.include_gazebo()) # Gazebo has its own controller manager - spawn_entity = GazeboMixin.node_spawn_entity(tf=world_robot_tf) + spawn_entity = GazeboMixin.node_spawn_entity( + tf=world_robot_tf + ) # spawns robot in Gazebo through robot_description topic of robot_state_publisher ld.add_action(spawn_entity) # controllers diff --git a/lbr_bringup/launch/move_group.launch.py b/lbr_bringup/launch/move_group.launch.py index 1fc8c06a..c9796c9a 100644 --- a/lbr_bringup/launch/move_group.launch.py +++ b/lbr_bringup/launch/move_group.launch.py @@ -3,7 +3,7 @@ from launch import LaunchContext, LaunchDescription, LaunchDescriptionEntity from launch.actions import OpaqueFunction from launch.substitutions import LaunchConfiguration -from lbr_bringup.description import LBRDescriptionMixin, RVizMixin +from lbr_bringup.description import LBRDescriptionMixin from lbr_bringup.move_group import LBRMoveGroupMixin @@ -40,28 +40,6 @@ def launch_setup(context: LaunchContext) -> List[LaunchDescriptionEntity]: namespace=robot_name, ) ) - - # RViz - rviz = RVizMixin.node_rviz( - rviz_config_pkg=f"{model}_moveit_config", - rviz_config="config/moveit.rviz", - parameters=LBRMoveGroupMixin.params_rviz( - moveit_configs=moveit_configs_builder.to_moveit_configs() - ) - + [{"use_sim_time": use_sim_time}], - remappings=[ - ("display_planned_path", robot_name + "/display_planned_path"), - ("joint_states", robot_name + "/joint_states"), - ("monitored_planning_scene", robot_name + "/monitored_planning_scene"), - ("planning_scene", robot_name + "/planning_scene"), - ("planning_scene_world", robot_name + "/planning_scene_world"), - ("robot_description", robot_name + "/robot_description"), - ("robot_description_semantic", robot_name + "/robot_description_semantic"), - ], - ) - - ld.add_action(rviz) - return ld.entities diff --git a/lbr_bringup/launch/rviz.launch.py b/lbr_bringup/launch/rviz.launch.py new file mode 100644 index 00000000..aed07293 --- /dev/null +++ b/lbr_bringup/launch/rviz.launch.py @@ -0,0 +1,32 @@ +from typing import List + +from launch import LaunchContext, LaunchDescription, LaunchDescriptionEntity +from launch.actions import OpaqueFunction +from launch.substitutions import LaunchConfiguration +from lbr_bringup.description import LBRDescriptionMixin +from lbr_bringup.rviz import RVizMixin + + +def launch_setup(context: LaunchContext) -> List[LaunchDescriptionEntity]: + ld = LaunchDescription() + mode = LaunchConfiguration("mode").perform(context) + + # nodes + ld.add_action( + RVizMixin.node_rviz( + rviz_config_pkg="lbr_bringup", + rviz_config=f"config/{mode}.rviz", + ) + ) + return ld.entities + + +def generate_launch_description() -> LaunchDescription: + ld = LaunchDescription() + + # launch arguments + ld.add_action(LBRDescriptionMixin.arg_mode()) + + # rviz with mode-specific configuration + ld.add_action(OpaqueFunction(function=launch_setup)) + return ld diff --git a/lbr_bringup/launch/rviz2.launch.py b/lbr_bringup/launch/rviz2.launch.py deleted file mode 100644 index e69de29b..00000000 diff --git a/lbr_bringup/lbr_bringup/description.py b/lbr_bringup/lbr_bringup/description.py index 797a8c86..5981b84f 100644 --- a/lbr_bringup/lbr_bringup/description.py +++ b/lbr_bringup/lbr_bringup/description.py @@ -1,7 +1,6 @@ from typing import Dict, List, Optional, Union -from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription -from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.actions import DeclareLaunchArgument from launch.substitutions import ( Command, FindExecutable, @@ -12,48 +11,6 @@ from launch_ros.substitutions import FindPackageShare -class GazeboMixin: - @staticmethod - def include_gazebo(**kwargs) -> IncludeLaunchDescription: - return IncludeLaunchDescription( - PythonLaunchDescriptionSource( - PathJoinSubstitution( - [ - FindPackageShare("gazebo_ros"), - "launch", - "gazebo.launch.py", - ] - ) - ), - **kwargs, - ) - - @staticmethod - def node_spawn_entity( - robot_name: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration( - "robot_name", default="lbr" - ), - tf: List[float] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], - **kwargs, - ) -> Node: - label = ["-x", "-y", "-z", "-R", "-P", "-Y"] - tf = [str(x) for x in tf] - return Node( - package="gazebo_ros", - executable="spawn_entity.py", - arguments=[ - "-topic", - "robot_description", - "-entity", - robot_name, - ] - + [item for pair in zip(label, tf) for item in pair], - output="screen", - namespace=robot_name, - **kwargs, - ) - - class LBRDescriptionMixin: @staticmethod def param_robot_description( @@ -168,51 +125,3 @@ def node_static_tf( ], **kwargs, ) - - -class RVizMixin: - @staticmethod - def arg_rviz_config_pkg( - default_value: str = "lbr_description", - ) -> DeclareLaunchArgument: - return DeclareLaunchArgument( - name="rviz_config_pkg", - default_value=default_value, - description="The RViz configuration file.", - ) - - @staticmethod - def arg_rviz_config( - default_value: str = "config/config.rviz", - ) -> DeclareLaunchArgument: - return DeclareLaunchArgument( - name="rviz_config", - default_value=default_value, - description="The RViz configuration file.", - ) - - @staticmethod - def node_rviz( - rviz_config_pkg: Optional[ - Union[LaunchConfiguration, str] - ] = LaunchConfiguration("rviz_config_pkg", default="lbr_description"), - rviz_config: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration( - "rviz_config", default="config/config.rviz" - ), - **kwargs, - ) -> Node: - return Node( - package="rviz2", - executable="rviz2", - name="rviz2", - arguments=[ - "-d", - PathJoinSubstitution( - [ - FindPackageShare(rviz_config_pkg), - rviz_config, - ] - ), - ], - **kwargs, - ) diff --git a/lbr_bringup/lbr_bringup/gazebo.py b/lbr_bringup/lbr_bringup/gazebo.py new file mode 100644 index 00000000..145e052d --- /dev/null +++ b/lbr_bringup/lbr_bringup/gazebo.py @@ -0,0 +1,49 @@ +from typing import List, Optional, Union + +from launch.actions import IncludeLaunchDescription +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare + + +class GazeboMixin: + @staticmethod + def include_gazebo(**kwargs) -> IncludeLaunchDescription: + return IncludeLaunchDescription( + PythonLaunchDescriptionSource( + PathJoinSubstitution( + [ + FindPackageShare("gazebo_ros"), + "launch", + "gazebo.launch.py", + ] + ) + ), + **kwargs, + ) + + @staticmethod + def node_spawn_entity( + robot_name: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration( + "robot_name", default="lbr" + ), + tf: List[float] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + **kwargs, + ) -> Node: + label = ["-x", "-y", "-z", "-R", "-P", "-Y"] + tf = [str(x) for x in tf] + return Node( + package="gazebo_ros", + executable="spawn_entity.py", + arguments=[ + "-topic", + "robot_description", + "-entity", + robot_name, + ] + + [item for pair in zip(label, tf) for item in pair], + output="screen", + namespace=robot_name, + **kwargs, + ) diff --git a/lbr_bringup/lbr_bringup/rviz.py b/lbr_bringup/lbr_bringup/rviz.py new file mode 100644 index 00000000..57f7ade7 --- /dev/null +++ b/lbr_bringup/lbr_bringup/rviz.py @@ -0,0 +1,54 @@ +from typing import Optional, Union + +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare + + +class RVizMixin: + @staticmethod + def arg_rviz_config_pkg( + default_value: str = "lbr_bringup", + ) -> DeclareLaunchArgument: + return DeclareLaunchArgument( + name="rviz_config_pkg", + default_value=default_value, + description="The RViz configuration file.", + ) + + @staticmethod + def arg_rviz_config( + default_value: str = "config/mock.rviz", + ) -> DeclareLaunchArgument: + return DeclareLaunchArgument( + name="rviz_config", + default_value=default_value, + description="The RViz configuration file.", + ) + + @staticmethod + def node_rviz( + rviz_config_pkg: Optional[ + Union[LaunchConfiguration, str] + ] = LaunchConfiguration("rviz_config_pkg", default="lbr_bringup"), + rviz_config: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration( + "rviz_config", default="config/mock.rviz" + ), + **kwargs, + ) -> Node: + return Node( + package="rviz2", + executable="rviz2", + name="rviz2", + arguments=[ + "-d", + PathJoinSubstitution( + [ + FindPackageShare(rviz_config_pkg), + rviz_config, + ] + ), + ], + **kwargs, + ) diff --git a/lbr_demos/lbr_moveit_cpp/doc/lbr_moveit_cpp.rst b/lbr_demos/lbr_moveit_cpp/doc/lbr_moveit_cpp.rst index bf0fc249..ad38c5c6 100644 --- a/lbr_demos/lbr_moveit_cpp/doc/lbr_moveit_cpp.rst +++ b/lbr_demos/lbr_moveit_cpp/doc/lbr_moveit_cpp.rst @@ -69,7 +69,7 @@ The ``MoveGroup`` configurations are parsed conveniently through a mixin: .. code-block:: python - from launch_mixins.lbr_bringup import LBRMoveGroupMixin + from lbr_bringup.move_group import LBRMoveGroupMixin ... diff --git a/lbr_demos/lbr_moveit_cpp/launch/hello_moveit.launch.py b/lbr_demos/lbr_moveit_cpp/launch/hello_moveit.launch.py index 685b7014..765fecda 100644 --- a/lbr_demos/lbr_moveit_cpp/launch/hello_moveit.launch.py +++ b/lbr_demos/lbr_moveit_cpp/launch/hello_moveit.launch.py @@ -3,15 +3,19 @@ from launch import LaunchContext, LaunchDescription, LaunchDescriptionEntity from launch.actions import OpaqueFunction from launch.substitutions import LaunchConfiguration -from launch_mixins.lbr_bringup import LBRMoveGroupMixin -from launch_mixins.lbr_description import LBRDescriptionMixin from launch_ros.actions import Node +from lbr_bringup.description import LBRDescriptionMixin +from lbr_bringup.move_group import LBRMoveGroupMixin def launch_setup(context: LaunchContext) -> List[LaunchDescriptionEntity]: ld = LaunchDescription() model = LaunchConfiguration("model").perform(context) + mode = LaunchConfiguration("mode").perform(context) + use_sim_time = False + if mode == "gazebo": + use_sim_time = True # generate moveit configs moveit_configs = LBRMoveGroupMixin.moveit_configs_builder( @@ -26,7 +30,7 @@ def launch_setup(context: LaunchContext) -> List[LaunchDescriptionEntity]: executable="hello_moveit", parameters=[ moveit_configs.to_dict(), - {"use_sim_time": LaunchConfiguration("sim")}, + {"use_sim_time": use_sim_time}, LBRDescriptionMixin.param_robot_name(), ], ) @@ -39,7 +43,7 @@ def generate_launch_description() -> LaunchDescription: ld.add_action(LBRDescriptionMixin.arg_model()) ld.add_action(LBRDescriptionMixin.arg_robot_name()) - ld.add_action(LBRDescriptionMixin.arg_sim()) + ld.add_action(LBRDescriptionMixin.arg_mode()) ld.add_action(OpaqueFunction(function=launch_setup))