diff --git a/README.md b/README.md
index 77b854e90..1b7dee1e9 100644
--- a/README.md
+++ b/README.md
@@ -108,6 +108,7 @@ Launch arguments are largely common to both simulation and physical robot. Howev
| ✅ | ✅ | `safety_bt_project_path` | Path to BehaviorTree project file, responsible for safety and shutdown management.
***string:*** [`SafetyBT.btproj`](./husarion_ugv_manager/behavior_trees/SafetyBT.btproj) |
| ✅ | ✅ | `shutdown_hosts_config_path` | Path to file with list of hosts to request shutdown.
***string:*** [`shutdown_hosts.yaml`](./husarion_ugv_manager/config/shutdown_hosts.yaml) |
| ✅ | ✅ | `use_ekf` | Enable or disable EKF.
***bool:*** `True` |
+| ❌ | ✅ | `use_rviz` | Run RViz simultaneously.
***bool:*** `True` |
| ✅ | ✅ | `use_sim` | Whether simulation is used.
***bool:*** `False` |
| ✅ | ✅ | `user_led_animations_path` | Path to a YAML file with a description of the user-defined animations.
***string:*** `''` |
| ✅ | ✅ | `wheel_config_path` | Path to wheel configuration file.
***string:*** [`{wheel_type}.yaml`](./panther_description/config) |
diff --git a/husarion_ugv_gazebo/launch/simulation.launch.py b/husarion_ugv_gazebo/launch/simulation.launch.py
index cf2e78de3..cf34f9865 100644
--- a/husarion_ugv_gazebo/launch/simulation.launch.py
+++ b/husarion_ugv_gazebo/launch/simulation.launch.py
@@ -59,6 +59,18 @@ def generate_launch_description():
launch_arguments={"gz_gui": namespaced_gz_gui, "gz_log_level": "1"}.items(),
)
+ rviz_launch = IncludeLaunchDescription(
+ PythonLaunchDescriptionSource(
+ PathJoinSubstitution(
+ [
+ FindPackageShare("panther_description"),
+ "launch",
+ "rviz.launch.py",
+ ]
+ )
+ ),
+ )
+
simulate_robots = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution(
@@ -77,6 +89,7 @@ def generate_launch_description():
# Sets use_sim_time for all nodes started below (doesn't work for nodes started from ignition gazebo)
SetUseSimTime(True),
gz_sim,
+ rviz_launch,
simulate_robots,
]
diff --git a/lynx_description/urdf/gazebo.urdf.xacro b/lynx_description/urdf/gazebo.urdf.xacro
index 6eea09415..ce1a25c83 100644
--- a/lynx_description/urdf/gazebo.urdf.xacro
+++ b/lynx_description/urdf/gazebo.urdf.xacro
@@ -42,12 +42,15 @@
${config_file}
${namespace}
+ drive_controller/cmd_vel_unstamped:=cmd_vel
+ drive_controller/odom:=odometry/wheels
+ drive_controller/transition_event:=drive_controller/_transition_event
gz_ros2_control/e_stop:=hardware/e_stop
gz_ros2_control/e_stop_reset:=hardware/e_stop_reset
gz_ros2_control/e_stop_trigger:=hardware/e_stop_trigger
imu_broadcaster/imu:=imu/data
- drive_controller/cmd_vel_unstamped:=cmd_vel
- drive_controller/odom:=odometry/wheels
+ imu_broadcaster/transition_event:=imu_broadcaster/_transition_event
+ joint_state_broadcaster/transition_event:=joint_state_broadcaster/_transition_event
diff --git a/panther_description/launch/rviz.launch.py b/panther_description/launch/rviz.launch.py
new file mode 100644
index 000000000..8f0cb3e20
--- /dev/null
+++ b/panther_description/launch/rviz.launch.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+
+# Copyright 2020 ros2_control Development Team
+# Copyright 2024 Husarion sp. z o.o.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from launch import LaunchDescription
+from launch.actions import DeclareLaunchArgument
+from launch.conditions import IfCondition
+from launch.substitutions import (
+ EnvironmentVariable,
+ LaunchConfiguration,
+ PathJoinSubstitution,
+ PythonExpression,
+)
+from launch_ros.actions import Node, SetParameter
+from launch_ros.substitutions import FindPackageShare
+from nav2_common.launch import ReplaceString
+
+
+def generate_launch_description():
+
+ namespace = LaunchConfiguration("namespace")
+ declare_namespace_arg = DeclareLaunchArgument(
+ "namespace",
+ default_value=EnvironmentVariable("ROBOT_NAMESPACE", default_value=""),
+ description="Add namespace to all launched nodes.",
+ )
+
+ rviz_config = LaunchConfiguration("rviz_config")
+ declare_rviz_config_arg = DeclareLaunchArgument(
+ "rviz_config",
+ default_value=PathJoinSubstitution(
+ [FindPackageShare("panther_description"), "rviz", "husarion_ugv.rviz"]
+ ),
+ description="RViz configuration file.",
+ )
+
+ use_rviz = LaunchConfiguration("use_rviz")
+ declare_use_rviz_arg = DeclareLaunchArgument(
+ "use_rviz",
+ default_value="True",
+ description="Run RViz simultaneously.",
+ choices=["True", "true", "False", "false"],
+ )
+
+ use_sim = LaunchConfiguration("use_sim")
+ declare_use_sim_arg = DeclareLaunchArgument(
+ "use_sim",
+ default_value="False",
+ description="Whether simulation is used.",
+ choices=["True", "true", "False", "false"],
+ )
+
+ ns_ext = PythonExpression(["'' if '", namespace, "' else '", namespace, "' + '/'"])
+
+ rviz_config = ReplaceString(
+ source_file=rviz_config,
+ replacements={"/": ns_ext, "": namespace},
+ )
+
+ rviz_node = Node(
+ package="rviz2",
+ executable="rviz2",
+ namespace=namespace,
+ arguments=["-d", rviz_config],
+ condition=IfCondition(use_rviz),
+ )
+
+ actions = [
+ declare_namespace_arg,
+ declare_rviz_config_arg,
+ declare_use_rviz_arg,
+ declare_use_sim_arg,
+ SetParameter(name="use_sim_time", value=use_sim),
+ rviz_node,
+ ]
+
+ return LaunchDescription(actions)
diff --git a/panther_description/package.xml b/panther_description/package.xml
index 8ebdd01da..6661fb5ab 100644
--- a/panther_description/package.xml
+++ b/panther_description/package.xml
@@ -20,8 +20,10 @@
joint_state_publisher
launch
launch_ros
+ nav2_common
robot_state_publisher
ros_components_description
+ rviz
xacro
diff --git a/panther_description/rviz/husarion_ugv.rviz b/panther_description/rviz/husarion_ugv.rviz
new file mode 100644
index 000000000..744745f61
--- /dev/null
+++ b/panther_description/rviz/husarion_ugv.rviz
@@ -0,0 +1,268 @@
+Panels:
+ - Class: rviz_common/Displays
+ Help Height: 78
+ Name: Displays
+ Property Tree Widget:
+ Splitter Ratio: 0.5
+ Tree Height: 719
+ - 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:
+ - Class: rviz_common/Group
+ Displays:
+ - Alpha: 0.5
+ Cell Size: 1
+ Class: rviz_default_plugins/Grid
+ Color: 160; 160; 164
+ 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
+ Enabled: true
+ Name: Map
+ - Class: rviz_common/Group
+ Displays:
+ - 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: 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
+ base_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ body_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ cover_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ fl_wheel_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ fr_wheel_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ front_bumper_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ imu_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ lights_channel_1_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ lights_channel_2_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ rear_bumper_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ rl_wheel_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ rr_wheel_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Mass Properties:
+ Inertia: false
+ Mass: false
+ Name: RobotModel
+ TF Prefix: ""
+ Update Interval: 0
+ Value: true
+ Visual Enabled: true
+ - Class: rviz_default_plugins/TF
+ Enabled: true
+ Frame Timeout: 15
+ Frames:
+ All Enabled: true
+ Marker Scale: 1
+ Name: TF
+ Show Arrows: true
+ Show Axes: true
+ Show Names: false
+ Update Interval: 0
+ Value: true
+ - Angle Tolerance: 0.10000000149011612
+ Class: rviz_default_plugins/Odometry
+ Covariance:
+ Orientation:
+ Alpha: 0.05000000074505806
+ Color: 255; 25; 0
+ Color Style: Unique
+ Frame: Local
+ Offset: 1
+ Scale: 1
+ Value: true
+ Position:
+ Alpha: 0.05000000074505806
+ Color: 255; 25; 0
+ Scale: 1
+ Value: true
+ Value: true
+ Enabled: true
+ Keep: 1000
+ Name: Odometry
+ Position Tolerance: 0.10000000149011612
+ Shape:
+ Alpha: 1
+ Axes Length: 1
+ Axes Radius: 0.10000000149011612
+ Color: 255; 25; 0
+ Head Length: 0.20000000298023224
+ Head Radius: 0.10000000149011612
+ Shaft Length: 0.5
+ Shaft Radius: 0.05000000074505806
+ Value: Arrow
+ Topic:
+ Depth: 5
+ Durability Policy: Volatile
+ Filter size: 10
+ History Policy: Keep Last
+ Reliability Policy: Reliable
+ Value: odometry/filtered
+ Value: true
+ Enabled: true
+ Name: Robot
+ Enabled: true
+ Global Options:
+ Background Color: 48; 48; 48
+ Fixed Frame: /odom
+ 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: 5.996953964233398
+ Enable Stereo Rendering:
+ Stereo Eye Separation: 0.05999999865889549
+ Stereo Focal Distance: 1
+ Swap Stereo Eyes: false
+ Value: false
+ Focal Point:
+ X: 1.012673020362854
+ Y: 0.033135633915662766
+ Z: 0.347855806350708
+ Focal Shape Fixed Size: false
+ Focal Shape Size: 0.05000000074505806
+ Invert Z Axis: false
+ Name: Current View
+ Near Clip Distance: 0.009999999776482582
+ Pitch: 0.5903985500335693
+ Target Frame:
+ Value: Orbit (rviz)
+ Yaw: 1.3703993558883667
+ Saved: ~
+Window Geometry:
+ Displays:
+ collapsed: false
+ Height: 1016
+ Hide Left Dock: false
+ Hide Right Dock: true
+ QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035afc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000035a000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000003efc0100000002fb0000000800540069006d0065010000000000000780000002fb00fffffffb0000000800540069006d00650100000000000004500000000000000000000006240000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+ Selection:
+ collapsed: false
+ Time:
+ collapsed: false
+ Tool Properties:
+ collapsed: false
+ Views:
+ collapsed: true
+ Width: 1920
+ X: 0
+ Y: 27
diff --git a/panther_description/rviz/panther.rviz b/panther_description/rviz/panther.rviz
deleted file mode 100644
index 3fce68121..000000000
--- a/panther_description/rviz/panther.rviz
+++ /dev/null
@@ -1,211 +0,0 @@
-Panels:
- - Class: rviz_common/Displays
- Help Height: 78
- Name: Displays
- Property Tree Widget:
- Expanded:
- - /Global Options1
- Splitter Ratio: 0.5
- Tree Height: 719
- - 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: 160; 160; 164
- 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: /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
- base_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- body_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- Value: true
- cover_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- fl_wheel_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- Value: true
- fr_wheel_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- Value: true
- front_bumper_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- front_light_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- imu_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- rear_bumper_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- rear_light_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- rl_wheel_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- Value: true
- rr_wheel_link:
- Alpha: 1
- Show Axes: false
- Show Trail: false
- Value: true
- Mass Properties:
- Inertia: false
- Mass: false
- Name: RobotModel
- TF Prefix: ""
- Update Interval: 0
- Value: true
- Visual Enabled: true
- Enabled: true
- Global Options:
- Background Color: 48; 48; 48
- Fixed Frame: odom
- 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: 10
- Enable Stereo Rendering:
- Stereo Eye Separation: 0.05999999865889549
- Stereo Focal Distance: 1
- Swap Stereo Eyes: false
- Value: false
- Focal Point:
- X: 0
- Y: 0
- Z: 0
- 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: 1016
- Hide Left Dock: false
- Hide Right Dock: true
- QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035afc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000035a000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073a0000003efc0100000002fb0000000800540069006d006501000000000000073a000002fb00fffffffb0000000800540069006d00650100000000000004500000000000000000000005de0000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
- Selection:
- collapsed: false
- Time:
- collapsed: false
- Tool Properties:
- collapsed: false
- Views:
- collapsed: true
- Width: 1850
- X: 1990
- Y: 27
diff --git a/panther_description/urdf/gazebo.urdf.xacro b/panther_description/urdf/gazebo.urdf.xacro
index 2d520a1c1..409182003 100644
--- a/panther_description/urdf/gazebo.urdf.xacro
+++ b/panther_description/urdf/gazebo.urdf.xacro
@@ -37,12 +37,15 @@
${config_file}
${namespace}
+ drive_controller/cmd_vel_unstamped:=cmd_vel
+ drive_controller/odom:=odometry/wheels
+ drive_controller/transition_event:=drive_controller/_transition_event
gz_ros2_control/e_stop:=hardware/e_stop
gz_ros2_control/e_stop_reset:=hardware/e_stop_reset
gz_ros2_control/e_stop_trigger:=hardware/e_stop_trigger
imu_broadcaster/imu:=imu/data
- drive_controller/cmd_vel_unstamped:=cmd_vel
- drive_controller/odom:=odometry/wheels
+ imu_broadcaster/transition_event:=imu_broadcaster/_transition_event
+ joint_state_broadcaster/transition_event:=joint_state_broadcaster/_transition_event