Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
dce2e49
Transition Hardware package to igvc_hardware
zbrotherton Feb 2, 2026
766d232
Create nav, gazebo, slam packages
zbrotherton Feb 2, 2026
87d2709
Create description package
zbrotherton Feb 2, 2026
074cc84
Modify igvc_description CMakeLists
zbrotherton Feb 2, 2026
73d4f9c
Add oak description to decription package
zbrotherton Feb 2, 2026
12829b7
Remove placeholder uml
zbrotherton Feb 2, 2026
eb19fb1
implement navigation package
zbrotherton Feb 2, 2026
d353d4a
Implement slam package, TODO tune for igvc
zbrotherton Feb 2, 2026
21ff274
Remove redundant CMake library targets
zbrotherton Feb 2, 2026
0250f08
Generate low fidelity sim model URDF
zbrotherton Feb 3, 2026
7712f8d
Add onshape-to-robot config file
zbrotherton Feb 3, 2026
9c9a979
Rename otr urdf to model
zbrotherton Feb 3, 2026
80343c0
Create robot urdf file
zbrotherton Feb 3, 2026
05cd416
Add rviz launch files
zbrotherton Feb 3, 2026
5841444
Change hardware package name to igvc_hardware
zbrotherton Feb 3, 2026
ab2a8be
Correct project name in slam package cmakelist
zbrotherton Feb 3, 2026
d4cf309
Correct meshes to assets in description cmake
zbrotherton Feb 3, 2026
14535e2
Remove references to deprecated urdf file
zbrotherton Feb 3, 2026
2401e56
add package name to URDF meshes (automate this in the future)
zbrotherton Feb 3, 2026
9d30abc
Remove nonexistent adi rosdep
zbrotherton Feb 3, 2026
a532c89
Remove nonexistent odrive rosdep
zbrotherton Feb 3, 2026
9832dd0
Add gz and gz control plugin to gazebo dependencies
zbrotherton Feb 3, 2026
5c2935e
Add directories to gazebo cmake
zbrotherton Feb 3, 2026
a71e39c
Implement empty world files
zbrotherton Feb 3, 2026
a585e08
Rename robot in launch file
zbrotherton Feb 3, 2026
64c88f4
Placeholder sensor simulation and bridge configuration
zbrotherton Feb 3, 2026
d2c3e29
Add config directory to gazebo cmake
zbrotherton Feb 3, 2026
a5e5afd
Split rviz and publisher into separate launches
zbrotherton Feb 3, 2026
a3e3e1c
Include publisher launch file in gazebo launch
zbrotherton Feb 3, 2026
5b33e4e
Remove unused imports
zbrotherton Feb 3, 2026
8c2153c
Configure RGBD camera description
zbrotherton Feb 3, 2026
f280f38
Remove madgwick filter from sim launch file
zbrotherton Feb 3, 2026
d91cac8
rename launch file to hardware.launch.py
TagCiccone Feb 3, 2026
0e29ca3
Update hardware bringups to have the proper ODrive drivetrain
TagCiccone Feb 3, 2026
c3ad690
Add IMU node to hardware launch
TagCiccone Feb 3, 2026
a6757a8
rename hardware xacro
TagCiccone Feb 3, 2026
e08b9a4
Add hardware xacro to robot xacro
TagCiccone Feb 3, 2026
c2bee3e
remove joint state broadcaster from controllers yaml
TagCiccone Feb 3, 2026
a2bd4aa
Update src/igvc_gazebo/launch/empty_world.launch.py
zbrotherton Feb 4, 2026
2e1c123
Update src/igvc_gazebo/launch/empty_world.launch.py
zbrotherton Feb 4, 2026
cb2c268
Fix file URDF locations
zbrotherton Feb 4, 2026
801da6f
Reconfigure robot description to use hardware package for ros2 control
zbrotherton Feb 4, 2026
97ccb9d
Remove duplicate OAK and position existing camera
zbrotherton Feb 4, 2026
b855026
Change oak name, add igvc_robot to sensor xacro
zbrotherton Feb 4, 2026
7e20b99
Fix devcontainer symlink install
TagCiccone Feb 4, 2026
e9033f0
add friction to ground plane
zbrotherton Feb 5, 2026
ae24936
Change sensor formatting to recommended format
zbrotherton Feb 5, 2026
8f84230
Update bridge topic names
zbrotherton Feb 5, 2026
b2580fc
Alter inertial values
zbrotherton Feb 5, 2026
ed17427
Change robot spawn location
zbrotherton Feb 5, 2026
00f8964
Reconfigure OAK simulation URDF
zbrotherton Feb 6, 2026
99c0e80
Change rtabmap sim launch
zbrotherton Feb 6, 2026
674bf19
Add igvc_bringup
Spilsed Feb 6, 2026
d334418
Add control.launch.py
Spilsed Feb 6, 2026
48e4bdc
Remove some extraneous elements and add CMakeLists
TagCiccone Feb 6, 2026
ef01197
Refactor bringup references
TagCiccone Feb 6, 2026
40d155d
Small refactor to hardware bringups
TagCiccone Feb 6, 2026
fe90cec
Fix path substitution
TagCiccone Feb 6, 2026
ec66e42
Working selection of sim scenario
TagCiccone Feb 10, 2026
5176bba
Almost running, controller manager dying on launch
TagCiccone Feb 10, 2026
614e1b4
oops don't need that
TagCiccone Feb 10, 2026
905cda5
comment extraenous stuff
TagCiccone Feb 11, 2026
7c5b5b9
Merge branch 'develop' into feature/add-bringup
TagCiccone Feb 11, 2026
36adb3f
Pass use_mock_hardware through publisher launch
TagCiccone Feb 11, 2026
ca338ad
Add type to bot_drive_controller
zbrotherton Feb 11, 2026
948f5e7
Add config to cmakelist
zbrotherton Feb 11, 2026
22c7260
Merge branch 'feature/add-bringup' of https://github.com/RPI-IGVC-202…
zbrotherton Feb 11, 2026
5febf98
add state interfaces to wheel joints
TagCiccone Feb 11, 2026
8ca05d0
Ros2 control actually runs! It was an error in rclcpp
TagCiccone Feb 13, 2026
f041dba
remove publisher node from empty world launch file
TagCiccone Feb 13, 2026
3e7ebaa
Remove unused launch file
TagCiccone Feb 13, 2026
2e890fd
remove nav2 bringup from launch file
TagCiccone Feb 13, 2026
5cd6395
Update launch configuration names for clarity
TagCiccone Feb 19, 2026
e849f37
Move bot.ros2_control.xacro to igvc_description
TagCiccone Feb 19, 2026
15fbfef
Merge branch 'develop' into feature/add-bringup
TagCiccone Feb 19, 2026
e722e17
Publisher.launch.py file refactored
vincentfborello Feb 20, 2026
3852d6c
rviz.launch.py File Refactor
vincentfborello Feb 27, 2026
5abd246
empty_world.launch.py File Refactor
Feb 27, 2026
1e5c5cb
igvc_nav.launch.py File Refactor
Feb 27, 2026
6fbaccb
igvc_nav.launch.py File Refactor
Mar 10, 2026
63ecbad
Merge branch 'develop' of https://github.com/RPI-IGVC-2025/RobotCode2…
Mar 10, 2026
b8fc4d2
Merge branch 'develop' of https://github.com/RPI-IGVC-2025/RobotCode2…
Mar 20, 2026
301767d
igvc_nav.launch.py Nodes fix/Comment Fix
Mar 20, 2026
cae7c6d
Merge branch 'develop' of https://github.com/RPI-IGVC-2025/RobotCode2…
Mar 24, 2026
317bf0c
Control.launch.py use_sim fix
Mar 24, 2026
40ad9a1
bot_controllers.yaml uncomment
Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 73 additions & 85 deletions src/igvc_description/launch/publisher.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,105 +2,93 @@
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.conditions import IfCondition, UnlessCondition
from launch.substitutions import Command, LaunchConfiguration
from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare

def generate_launch_description():

declared_arguments = []
# Set the path to this package.
igvc_description_package = FindPackageShare(package='igvc_description').find('igvc_description')
default_urdf = PathJoinSubstitution(
[
igvc_description_package,
'urdf',
'robot.urdf.xacro'
]
)


declared_arguments.append(
DeclareLaunchArgument(
'urdf_model',
default_value=default_urdf,
description='Absolute path to robot urdf file'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'gui',
default_value='False',
description='Flag to enable joint_state_publisher_gui'
)
)

# Set the path to the URDF file
default_urdf_model_path = os.path.join(igvc_description_package , 'urdf/robot.urdf.xacro')
declared_arguments.append(
DeclareLaunchArgument(
'use_robot_state_pub',
default_value='True',
description='Whether to start the robot state publisher'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'use_sim_time',
default_value='False',
description='Use simulation (Gazebo) clock if true'
)
)

# Launch configuration variables specific to simulation
gui = LaunchConfiguration('gui')
urdf_model = LaunchConfiguration('urdf_model')
gui = LaunchConfiguration('gui')
use_robot_state_pub = LaunchConfiguration('use_robot_state_pub')
use_sim_time = LaunchConfiguration('use_sim_time')

# Declare the launch arguments
declare_urdf_model_path_cmd = DeclareLaunchArgument(
name='urdf_model',
default_value=default_urdf_model_path,
description='Absolute path to robot urdf file')

declare_use_joint_state_publisher_cmd = DeclareLaunchArgument(
name='gui',
default_value='False',
description='Flag to enable joint_state_publisher_gui')

declare_use_robot_state_pub_cmd = DeclareLaunchArgument(
name='use_robot_state_pub',
default_value='True',
description='Whether to start the robot state publisher')

declare_use_sim_time_cmd = DeclareLaunchArgument(
name='use_sim_time',
default_value='False',
description='Use simulation (Gazebo) clock if true')

# Specify the actions

# Publish the joint state values for the non-fixed joints in the URDF file.
start_joint_state_publisher_cmd = Node(
condition=UnlessCondition(gui),
package='joint_state_publisher',
executable='joint_state_publisher',
name='joint_state_publisher')

# A GUI to manipulate the joint state values
start_joint_state_publisher_gui_node = Node(
condition=IfCondition(gui),
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
name='joint_state_publisher_gui')
# Subscribe to the joint states of the robot, and publish the 3D pose of each link.
start_robot_state_publisher_cmd = Node(
condition=IfCondition(use_robot_state_pub),
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[{'use_sim_time': use_sim_time,
'robot_description': Command(
[
'xacro ', urdf_model,
' use_mock_hardware:=', LaunchConfiguration('use_mock_hardware')
]
),
}],
joint_state_publisher_node = Node(
package='joint_state_publisher',
executable='joint_state_publisher',
name='joint_state_publisher',
condition=UnlessCondition(gui)
)

# Create foxglove bridge
start_foxglove_bridge_cmd = Node(
package='foxglove_bridge',
executable='foxglove_bridge'
)

# Create the launch description and populate
# Create the launch description and populate
launch_description = LaunchDescription(
[
DeclareLaunchArgument(
'use_mock_hardware',
default_value='false',
description='Run in Simulation'
),

]
joint_state_publisher_gui_node = Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
name='joint_state_publisher_gui',
condition=IfCondition(gui)
)

robot_state_publisher_node = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='robot_state_publisher',
parameters=[{'use_sim_time': use_sim_time,
'robot_description': Command([
'xacro ', urdf_model,
'use_mock_hardware:=', LaunchConfiguration('use_mock_hardware')
]
)
}]
)
foxglove_bridge_node = Node(
package='foxglove_bridge',
executable='foxglove_bridge'
)
Nodes = [
joint_state_publisher_node,
joint_state_publisher_gui_node,
robot_state_publisher_node,
foxglove_bridge_node]

return LaunchDescription(declared_arguments + Nodes)

# Declare the launch options
launch_description.add_action(declare_urdf_model_path_cmd)
launch_description.add_action(declare_use_joint_state_publisher_cmd)
launch_description.add_action(declare_use_robot_state_pub_cmd)
launch_description.add_action(declare_use_sim_time_cmd)

# Add any actions
launch_description.add_action(start_foxglove_bridge_cmd)
launch_description.add_action(start_joint_state_publisher_cmd)
launch_description.add_action(start_joint_state_publisher_gui_node)
launch_description.add_action(start_robot_state_publisher_cmd)

return launch_description
83 changes: 72 additions & 11 deletions src/igvc_description/launch/rviz.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,81 @@
from launch_ros.substitutions import FindPackageShare

def generate_launch_description():

declared_arguments = []
# Set the path to this package.
igvc_description_package = FindPackageShare(package='igvc_description').find('igvc_description')

# Set the path to the RViz configuration settings
default_rviz_config_path = os.path.join(igvc_description_package, 'rviz/rviz_settings.rviz')

# Set the path to the URDF file
default_urdf_model_path = os.path.join(igvc_description_package, 'urdf/robot.urdf.xacro')

# Set the path to the Publisher launch file
publisher_launch_path = os.path.join(igvc_description_package, 'launch/publisher.launch.py')

# Launch configuration variables specific to simulation
declared_arguments.append(
DeclareLaunchArgument(
'urdf_model',
default_value=default_urdf_model_path,
description='Absolute path to robot urdf file'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'gui',
default_value='True',
description='Flag to enable joint_state_publisher_gui'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'use_robot_state_pub',
default_value='True',
description='Whether to start the robot state publisher'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'use_sim_time',
default_value='True',
description='Use simulation (Gazebo) clock if true'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'rviz_config_file',
default_value=default_rviz_config_path,
description='Full path to the RVIZ config file to use'
)
)
declared_arguments.append(
DeclareLaunchArgument(
'use_rviz',
default_value='true',
description='Whether to start RVIZ'
)
)
urdf_model = LaunchConfiguration('urdf_model')
gui = LaunchConfiguration('gui')
use_robot_state_pub = LaunchConfiguration('use_robot_state_pub')
use_sim_time = LaunchConfiguration('use_sim_time')
rviz_config_file = LaunchConfiguration('rviz_config_file')
use_rviz = LaunchConfiguration('use_rviz')



rviz_node = Node(
package='rviz2',
executable='rviz2',
name='rviz2',
condition=IfCondition(use_rviz),
output='screen',
arguments=['-d', rviz_config_file]
)
Node = [
rviz_node
]
return LaunchDescription(declared_arguments + Node)



"""
# Launch configuration variables specific to simulation
gui = LaunchConfiguration('gui')
urdf_model = LaunchConfiguration('urdf_model')
rviz_config_file = LaunchConfiguration('rviz_config_file')
Expand Down Expand Up @@ -59,7 +120,7 @@ def generate_launch_description():
name='use_sim_time',
default_value='True',
description='Use simulation (Gazebo) clock if true')

# Specify the publisher action
start_publisher_cmd = IncludeLaunchDescription(
PythonLaunchDescriptionSource(publisher_launch_path),
Expand All @@ -70,7 +131,6 @@ def generate_launch_description():
'use_sim_time' : use_sim_time,
}.items()
)

# Launch RViz
start_rviz_cmd = Node(
condition=IfCondition(use_rviz),
Expand All @@ -80,7 +140,7 @@ def generate_launch_description():
output='screen',
arguments=['-d', rviz_config_file])

# Create the launch description and populate
# Create the launch description and populate
launch_description = LaunchDescription()

# Declare the launch options
Expand All @@ -96,3 +156,4 @@ def generate_launch_description():
launch_description.add_action(start_rviz_cmd)

return launch_description
"""
50 changes: 24 additions & 26 deletions src/igvc_gazebo/launch/empty_world.launch.py
Original file line number Diff line number Diff line change
@@ -1,47 +1,44 @@
import os

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription, DeclareLaunchArgument
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch_ros.substitutions import FindPackageShare

from launch_ros.actions import Node

def generate_launch_description():
declared_arguments = []
igvc_description_package = FindPackageShare(package='igvc_description').find('igvc_description')
ros_gz_sim_package = get_package_share_directory('ros_gz_sim')
package_description = FindPackageShare(package='igvc_description').find('igvc_description')

gz_launch_path = os.path.join(ros_gz_sim_package, 'launch', 'gz_sim.launch.py')

world = LaunchConfiguration('world')

default_world = os.path.join(
get_package_share_directory('igvc_gazebo'),
'worlds',
'empty_world.sdf'
)

world_arg = DeclareLaunchArgument(
'world',
default_value=default_world,
description='World to load'
bridge_params = os.path.join(get_package_share_directory('igvc_gazebo'), 'config', 'gz_bridge.yaml')
default_world = os.path.join(get_package_share_directory('igvc_gazebo'), 'worlds','empty_world.sdf')

declared_arguments.append(
DeclareLaunchArgument(
'world',
default_value=default_world,
description='World to load'
)
)

gazebo = IncludeLaunchDescription(
declared_arguments.append(
DeclareLaunchArgument(
'gazebo',
PythonLaunchDescriptionSource(gz_launch_path),
launch_arguments={'gz_args': ['-r -v4 ', world], 'on_exit_shutdown': 'true'}.items()
)
)

spawn_entity = Node(package='ros_gz_sim', executable='create',

spawn_entity = Node(
package='ros_gz_sim', executable='create',
arguments=['-topic', 'robot_description',
'-name', 'igvc_robot'],
output='screen'
)

bridge_params = os.path.join(get_package_share_directory('igvc_gazebo'), 'config', 'gz_bridge.yaml')

ros_gz_bridge = Node(
package="ros_gz_bridge",
Expand All @@ -52,10 +49,11 @@ def generate_launch_description():
f'config_file:={bridge_params}',
]
)

return LaunchDescription([
world_arg,
gazebo,
Node = [
spawn_entity,
ros_gz_bridge
])
]
return LaunchDescription(declared_arguments + Node)



Loading