diff --git a/README.md b/README.md
index 77b854e9..1b7dee1e 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 cf2e78de..34da7dc9 100644
--- a/husarion_ugv_gazebo/launch/simulation.launch.py
+++ b/husarion_ugv_gazebo/launch/simulation.launch.py
@@ -16,6 +16,7 @@
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
+from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import (
EnvironmentVariable,
@@ -45,6 +46,14 @@ def generate_launch_description():
description="Add namespace to all launched nodes.",
)
+ use_rviz = LaunchConfiguration("use_rviz")
+ declare_use_rviz_arg = DeclareLaunchArgument(
+ "use_rviz",
+ default_value="True",
+ description="Run RViz simultaneously.",
+ choices=["True", "true", "False", "false"],
+ )
+
namespaced_gz_gui = ReplaceString(
source_file=gz_gui,
replacements={"{namespace}": namespace},
@@ -59,6 +68,19 @@ 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",
+ ]
+ )
+ ),
+ condition=IfCondition(use_rviz),
+ )
+
simulate_robots = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution(
@@ -74,9 +96,11 @@ def generate_launch_description():
actions = [
declare_gz_gui,
declare_namespace_arg,
+ declare_use_rviz_arg,
# 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 6eea0941..ce1a25c8 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 00000000..b194341c
--- /dev/null
+++ b/panther_description/launch/rviz.launch.py
@@ -0,0 +1,79 @@
+#!/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.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_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],
+ )
+
+ actions = [
+ declare_namespace_arg,
+ declare_rviz_config_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 8ebdd01d..6661fb5a 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/panther.rviz b/panther_description/rviz/husarion_ugv.rviz
similarity index 52%
rename from panther_description/rviz/panther.rviz
rename to panther_description/rviz/husarion_ugv.rviz
index 3fce6812..8285a047 100644
--- a/panther_description/rviz/panther.rviz
+++ b/panther_description/rviz/husarion_ugv.rviz
@@ -3,8 +3,7 @@ Panels:
Help Height: 78
Name: Displays
Property Tree Widget:
- Expanded:
- - /Global Options1
+ Expanded: ~
Splitter Ratio: 0.5
Tree Height: 719
- Class: rviz_common/Selection
@@ -28,107 +27,115 @@ Panels:
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
+ - 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
- 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
+ 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
+ Mass Properties:
+ Inertia: false
+ Mass: false
+ Name: RobotModel
+ TF Prefix:
+ Update Interval: 0
Value: true
- Mass Properties:
- Inertia: false
- Mass: false
- Name: RobotModel
- TF Prefix: ""
- Update Interval: 0
- Value: true
- Visual Enabled: true
+ Visual Enabled: true
+ - Class: rviz_default_plugins/TF
+ Enabled: false
+ Frame Timeout: 15
+ Frames:
+ All Enabled: true
+ Marker Scale: 1
+ Name: TF
+ Show Arrows: true
+ Show Axes: true
+ Show Names: false
+ Tree:
+ {}
+ Update Interval: 0
+ Value: false
+ - 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: false
+ 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: false
+ Enabled: true
+ Name: Robot
Enabled: true
Global Options:
Background Color: 48; 48; 48
- Fixed Frame: odom
+ Fixed Frame: /odom
Frame Rate: 30
Name: root
Tools:
@@ -148,14 +155,14 @@ Visualization Manager:
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
- Value: /initialpose
+ Value: initialpose
- Class: rviz_default_plugins/SetGoal
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
- Value: /goal_pose
+ Value: goal_pose
- Class: rviz_default_plugins/PublishPoint
Single click: true
Topic:
@@ -163,7 +170,7 @@ Visualization Manager:
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
- Value: /clicked_point
+ Value: clicked_point
Transformation:
Current:
Class: rviz_default_plugins/TF
@@ -171,25 +178,25 @@ Visualization Manager:
Views:
Current:
Class: rviz_default_plugins/Orbit
- Distance: 10
+ Distance: 5.996953964233398
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
+ 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.7853981852531433
+ Pitch: 0.5903985500335693
Target Frame:
Value: Orbit (rviz)
- Yaw: 0.7853981852531433
+ Yaw: 1.3703993558883667
Saved: ~
Window Geometry:
Displays:
@@ -197,7 +204,7 @@ Window Geometry:
Height: 1016
Hide Left Dock: false
Hide Right Dock: true
- QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035afc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000035a000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073a0000003efc0100000002fb0000000800540069006d006501000000000000073a000002fb00fffffffb0000000800540069006d00650100000000000004500000000000000000000005de0000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+ QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035afc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000035a000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000003efc0100000002fb0000000800540069006d0065010000000000000780000002fb00fffffffb0000000800540069006d00650100000000000004500000000000000000000006240000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
@@ -206,6 +213,6 @@ Window Geometry:
collapsed: false
Views:
collapsed: true
- Width: 1850
- X: 1990
+ Width: 1920
+ X: 0
Y: 27
diff --git a/panther_description/urdf/gazebo.urdf.xacro b/panther_description/urdf/gazebo.urdf.xacro
index 2d520a1c..40918200 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