diff --git a/libmavsdk-dev_3.14.0_ubuntu22.04_amd64.deb b/libmavsdk-dev_3.14.0_ubuntu22.04_amd64.deb new file mode 100644 index 00000000..35b5face Binary files /dev/null and b/libmavsdk-dev_3.14.0_ubuntu22.04_amd64.deb differ diff --git a/src/bringup/launch/autonav.launch.py b/src/bringup/launch/autonav.launch.py index c98a4ea3..7c7d3e13 100644 --- a/src/bringup/launch/autonav.launch.py +++ b/src/bringup/launch/autonav.launch.py @@ -99,6 +99,11 @@ def generate_launch_description(): choices=['true', 'false'], description='Launch the Nav2 config GUI.', ), + DeclareLaunchArgument( + 'can_interface', + default_value='can1', + description='CAN interface to use for hardware interfaces.', + ), OpaqueFunction(function=launch_setup), ]) @@ -116,6 +121,7 @@ def launch_setup(context, *args, **kwargs): use_respawn = LaunchConfiguration('use_respawn').perform(context) log_level = LaunchConfiguration('log_level').perform(context) use_config = LaunchConfiguration('use_config').perform(context) + can_interface = LaunchConfiguration('can_interface').perform(context) drive_bringup = get_package_share_directory('drive_bringup') nav_bringup = get_package_share_directory('nav_bringup') @@ -131,6 +137,7 @@ def launch_setup(context, *args, **kwargs): 'use_mock_hardware': use_mock_hardware, 'mock_sensor_commands': mock_sensor_commands, 'robot_controller': robot_controller, + 'can_interface': can_interface, }.items(), ) @@ -147,6 +154,7 @@ def launch_setup(context, *args, **kwargs): 'use_respawn': use_respawn, 'log_level': log_level, 'use_config': use_config, + 'can_interface': can_interface, }.items(), ) diff --git a/src/bringup/launch/delivery.launch.py b/src/bringup/launch/delivery.launch.py index 46865bb7..eb46eba9 100644 --- a/src/bringup/launch/delivery.launch.py +++ b/src/bringup/launch/delivery.launch.py @@ -43,6 +43,7 @@ def generate_launch_description(): ), DeclareLaunchArgument('use_3dof', default_value='false', choices=['true', 'false']), DeclareLaunchArgument('deactivate_talon', default_value='false', choices=['true', 'false']), + DeclareLaunchArgument('can_interface', default_value='can1'), OpaqueFunction(function=launch_setup), ]) @@ -55,6 +56,7 @@ def launch_setup(context, *args, **kwargs): robot_controller = LaunchConfiguration('robot_controller').perform(context) use_3dof = LaunchConfiguration('use_3dof').perform(context) deactivate_talon = LaunchConfiguration('deactivate_talon').perform(context) + can_interface = LaunchConfiguration('can_interface').perform(context) drive_share = get_package_share_directory('drive_bringup') arm_bringup_share = get_package_share_directory('arm_bringup') @@ -73,6 +75,7 @@ def launch_setup(context, *args, **kwargs): 'use_mock_hardware': use_mock_hardware, 'mock_sensor_commands': mock_sensor_commands, 'robot_controller': robot_controller, + 'can_interface': can_interface, }.items(), ) @@ -103,6 +106,7 @@ def launch_setup(context, *args, **kwargs): ' mock_sensor_commands:=', mock_sensor_commands, ' use_3dof:=', use_3dof, ' deactivate_talon:=', deactivate_talon, ' ', + ' can_interface:=', can_interface, ' ', ]) use_3dof_bool = use_3dof.lower() == 'true' diff --git a/src/bringup/launch/equipment_servicing.launch.py b/src/bringup/launch/equipment_servicing.launch.py index 46865bb7..11df3e20 100644 --- a/src/bringup/launch/equipment_servicing.launch.py +++ b/src/bringup/launch/equipment_servicing.launch.py @@ -43,6 +43,7 @@ def generate_launch_description(): ), DeclareLaunchArgument('use_3dof', default_value='false', choices=['true', 'false']), DeclareLaunchArgument('deactivate_talon', default_value='false', choices=['true', 'false']), + DeclareLaunchArgument('can_interface', default_value='can1'), OpaqueFunction(function=launch_setup), ]) @@ -55,6 +56,7 @@ def launch_setup(context, *args, **kwargs): robot_controller = LaunchConfiguration('robot_controller').perform(context) use_3dof = LaunchConfiguration('use_3dof').perform(context) deactivate_talon = LaunchConfiguration('deactivate_talon').perform(context) + can_interface = LaunchConfiguration('can_interface').perform(context) drive_share = get_package_share_directory('drive_bringup') arm_bringup_share = get_package_share_directory('arm_bringup') @@ -73,6 +75,7 @@ def launch_setup(context, *args, **kwargs): 'use_mock_hardware': use_mock_hardware, 'mock_sensor_commands': mock_sensor_commands, 'robot_controller': robot_controller, + 'can_interface': can_interface, }.items(), ) @@ -103,6 +106,7 @@ def launch_setup(context, *args, **kwargs): ' mock_sensor_commands:=', mock_sensor_commands, ' use_3dof:=', use_3dof, ' deactivate_talon:=', deactivate_talon, ' ', + ' can_interface:=', can_interface, ' ', ]) use_3dof_bool = use_3dof.lower() == 'true' diff --git a/src/description/config/odrive.ros2_control.xacro b/src/description/config/odrive.ros2_control.xacro index 4d6a4739..901cc064 100644 --- a/src/description/config/odrive.ros2_control.xacro +++ b/src/description/config/odrive.ros2_control.xacro @@ -1,12 +1,12 @@ - + odrive_ros2_control_plugin/ODriveHardwareInterface - can0 + ${can_interface} 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/arm/arm.rotary_encoder.ros2_control.xacro b/src/description/ros2_control/arm/arm.rotary_encoder.ros2_control.xacro index e24ece2c..2dd74a57 100644 --- a/src/description/ros2_control/arm/arm.rotary_encoder.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.rotary_encoder.ros2_control.xacro @@ -1,10 +1,10 @@ - + rotary_encoder_ros2_control/RotaryEncoderHardwareInterface - can1 + ${can_interface} 0x130 10 5 diff --git a/src/description/ros2_control/arm/arm.servo.ros2_control.xacro b/src/description/ros2_control/arm/arm.servo.ros2_control.xacro index 16885fab..94bf7567 100644 --- a/src/description/ros2_control/arm/arm.servo.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.servo.ros2_control.xacro @@ -1,13 +1,13 @@ - + servo_ros2_control/SERVOHardwareInterface 1 5 0 - can1 + ${can_interface} 0x80 diff --git a/src/description/ros2_control/arm/arm.smc_2dof.ros2_control.xacro b/src/description/ros2_control/arm/arm.smc_2dof.ros2_control.xacro index 05a1446d..978291f8 100644 --- a/src/description/ros2_control/arm/arm.smc_2dof.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.smc_2dof.ros2_control.xacro @@ -1,13 +1,13 @@ - + smc_ros2_control/SMCHardwareInterface 10 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/arm/arm.smc_3dof.ros2_control.xacro b/src/description/ros2_control/arm/arm.smc_3dof.ros2_control.xacro index a79076ce..3ee5a2ed 100644 --- a/src/description/ros2_control/arm/arm.smc_3dof.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.smc_3dof.ros2_control.xacro @@ -1,13 +1,13 @@ - + smc_ros2_control/SMCHardwareInterface 10 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/arm/arm.talon_2dof.ros2_control.xacro b/src/description/ros2_control/arm/arm.talon_2dof.ros2_control.xacro index d4ae7274..0b59c8bb 100644 --- a/src/description/ros2_control/arm/arm.talon_2dof.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.talon_2dof.ros2_control.xacro @@ -1,6 +1,6 @@ - + ${deactivate_talon} @@ -12,7 +12,7 @@ 10 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/arm/arm.talon_3dof.ros2_control.xacro b/src/description/ros2_control/arm/arm.talon_3dof.ros2_control.xacro index 392d4e55..50b26693 100644 --- a/src/description/ros2_control/arm/arm.talon_3dof.ros2_control.xacro +++ b/src/description/ros2_control/arm/arm.talon_3dof.ros2_control.xacro @@ -1,6 +1,6 @@ - + @@ -11,7 +11,7 @@ 10 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/drive/drive.led.ros2_control.xacro b/src/description/ros2_control/drive/drive.led.ros2_control.xacro index 24628c1d..19d9095e 100644 --- a/src/description/ros2_control/drive/drive.led.ros2_control.xacro +++ b/src/description/ros2_control/drive/drive.led.ros2_control.xacro @@ -1,7 +1,7 @@ - + diff --git a/src/description/ros2_control/drive/drive.odrive.ros2_control.xacro b/src/description/ros2_control/drive/drive.odrive.ros2_control.xacro index ec25c66b..4dc31b49 100644 --- a/src/description/ros2_control/drive/drive.odrive.ros2_control.xacro +++ b/src/description/ros2_control/drive/drive.odrive.ros2_control.xacro @@ -1,7 +1,7 @@ - + @@ -14,7 +14,7 @@ 30 5 0 - can1 + ${can_interface} @@ -50,4 +50,4 @@ - \ No newline at end of file + diff --git a/src/description/ros2_control/drive/drive.rmd.ros2_control.xacro b/src/description/ros2_control/drive/drive.rmd.ros2_control.xacro index efcebb7e..56bab191 100644 --- a/src/description/ros2_control/drive/drive.rmd.ros2_control.xacro +++ b/src/description/ros2_control/drive/drive.rmd.ros2_control.xacro @@ -1,13 +1,13 @@ - + rmd_ros2_control/RMDHardwareInterface 30 5 0 - can1 + ${can_interface} diff --git a/src/description/ros2_control/science/science.dc.ros2_control.xacro b/src/description/ros2_control/science/science.dc.ros2_control.xacro index 49687248..24f7d2b6 100644 --- a/src/description/ros2_control/science/science.dc.ros2_control.xacro +++ b/src/description/ros2_control/science/science.dc.ros2_control.xacro @@ -1,7 +1,7 @@ - + @@ -10,7 +10,7 @@ 20 5 0 - can0 + ${can_interface} 0x70 diff --git a/src/description/ros2_control/science/science.led.ros2_control.xacro b/src/description/ros2_control/science/science.led.ros2_control.xacro index 4b583700..6bca5fa7 100644 --- a/src/description/ros2_control/science/science.led.ros2_control.xacro +++ b/src/description/ros2_control/science/science.led.ros2_control.xacro @@ -1,10 +1,10 @@ - + led_ros2_control/LEDHardwareInterface - can0 + ${can_interface} 0x110 10 5 diff --git a/src/description/ros2_control/science/science.limit_switch.ros2_control.xacro b/src/description/ros2_control/science/science.limit_switch.ros2_control.xacro index 698ced10..61deba09 100644 --- a/src/description/ros2_control/science/science.limit_switch.ros2_control.xacro +++ b/src/description/ros2_control/science/science.limit_switch.ros2_control.xacro @@ -1,10 +1,10 @@ - + limit_switch_ros2_control/LimitSwitchHardwareInterface - can0 + ${can_interface} 0x100 10 5 diff --git a/src/description/ros2_control/science/science.servo.ros2_control.xacro b/src/description/ros2_control/science/science.servo.ros2_control.xacro index d20d1578..c0046f2c 100644 --- a/src/description/ros2_control/science/science.servo.ros2_control.xacro +++ b/src/description/ros2_control/science/science.servo.ros2_control.xacro @@ -1,13 +1,13 @@ - + servo_ros2_control/SERVOHardwareInterface 20 5 0 - can0 + ${can_interface} 0x80 diff --git a/src/description/ros2_control/science/science.stepper.ros2_control.xacro b/src/description/ros2_control/science/science.stepper.ros2_control.xacro index 8d8fc00f..135152c6 100644 --- a/src/description/ros2_control/science/science.stepper.ros2_control.xacro +++ b/src/description/ros2_control/science/science.stepper.ros2_control.xacro @@ -1,7 +1,7 @@ - + @@ -10,7 +10,7 @@ 10 5 0 - can0 + ${can_interface} 0x90 @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/src/description/ros2_control/science/science.talon.ros2_control.xacro b/src/description/ros2_control/science/science.talon.ros2_control.xacro index 5629a1da..aabe1b57 100644 --- a/src/description/ros2_control/science/science.talon.ros2_control.xacro +++ b/src/description/ros2_control/science/science.talon.ros2_control.xacro @@ -1,6 +1,6 @@ - + ${deactivate_talon} @@ -12,7 +12,7 @@ 10 5 0 - can0 + ${can_interface} diff --git a/src/description/urdf/athena_arm.urdf.xacro b/src/description/urdf/athena_arm.urdf.xacro index 3d4453d8..187bc098 100644 --- a/src/description/urdf/athena_arm.urdf.xacro +++ b/src/description/urdf/athena_arm.urdf.xacro @@ -10,6 +10,7 @@ + @@ -56,20 +57,20 @@ - - + + - - + + - - - - - - + + + + + + diff --git a/src/description/urdf/athena_drive.urdf.xacro b/src/description/urdf/athena_drive.urdf.xacro index 11119ab5..294ff484 100644 --- a/src/description/urdf/athena_drive.urdf.xacro +++ b/src/description/urdf/athena_drive.urdf.xacro @@ -8,6 +8,7 @@ + @@ -72,16 +73,16 @@ - + - + - + - + diff --git a/src/description/urdf/athena_science.urdf.xacro b/src/description/urdf/athena_science.urdf.xacro index 92b023a4..d8e053bb 100644 --- a/src/description/urdf/athena_science.urdf.xacro +++ b/src/description/urdf/athena_science.urdf.xacro @@ -4,6 +4,7 @@ + @@ -29,23 +30,23 @@ - + - + - + - + - + - - + + diff --git a/src/simulation/launch/spawn.launch.py b/src/simulation/launch/spawn.launch.py index 7a6e4797..adee51c6 100644 --- a/src/simulation/launch/spawn.launch.py +++ b/src/simulation/launch/spawn.launch.py @@ -22,6 +22,8 @@ description='Robot namespace'), DeclareLaunchArgument('world_name', default_value='', description='World name'), + DeclareLaunchArgument('can_interface', default_value='can0', + description='CAN interface to use for hardware interfaces.'), ] @@ -34,13 +36,16 @@ def generate_launch_description(): rviz_config_file = os.path.join(pkg_sim, 'rviz', 'sim.rviz') namespace = LaunchConfiguration('namespace') + can_interface = LaunchConfiguration('can_interface') robot_name = 'athena' robot_description_content = Command([ 'xacro ', urdf_file, ' use_mock_hardware:=true', ' sim_gazebo:=true', - f' simulation_controllers:={controllers_file}' + f' simulation_controllers:={controllers_file}', + ' can_interface:=', + can_interface, ]) spawn_robot_group_action = GroupAction([ diff --git a/src/subsystems/arm/arm_bringup/launch/athena_arm.jetson.launch.py b/src/subsystems/arm/arm_bringup/launch/athena_arm.jetson.launch.py index 11594daf..31024964 100644 --- a/src/subsystems/arm/arm_bringup/launch/athena_arm.jetson.launch.py +++ b/src/subsystems/arm/arm_bringup/launch/athena_arm.jetson.launch.py @@ -71,6 +71,13 @@ def generate_launch_description(): description="Deactivate the talon joints in the URDF when using mock hardware to prevent excessive CAN flow.", ) ) + declared_arguments.append( + DeclareLaunchArgument( + "can_interface", + default_value="can1", + description="CAN interface to use for hardware interfaces.", + ) + ) # -- Initialize Arguments -- runtime_config_package = LaunchConfiguration("runtime_config_package") controllers_file = LaunchConfiguration("controllers_file") @@ -80,6 +87,7 @@ def generate_launch_description(): mock_sensor_commands = LaunchConfiguration("mock_sensor_commands") use_3dof = LaunchConfiguration("use_3dof") deactivate_talon = LaunchConfiguration("deactivate_talon") + can_interface = LaunchConfiguration("can_interface") # -- Building Path Files -- robot_description_path = PathJoinSubstitution( @@ -115,6 +123,9 @@ def generate_launch_description(): "deactivate_talon:=", deactivate_talon, " ", + "can_interface:=", + can_interface, + " ", ] ) robot_description = {"robot_description": robot_description_content} diff --git a/src/subsystems/arm/arm_bringup/launch/athena_arm.launch.py b/src/subsystems/arm/arm_bringup/launch/athena_arm.launch.py index 0fa388be..c15397fc 100644 --- a/src/subsystems/arm/arm_bringup/launch/athena_arm.launch.py +++ b/src/subsystems/arm/arm_bringup/launch/athena_arm.launch.py @@ -115,6 +115,13 @@ def generate_launch_description(): description="Deactivate the talon joints in the URDF when using mock hardware to prevent excessive CAN flow.", ) ) + declared_arguments.append( + DeclareLaunchArgument( + "can_interface", + default_value="can0", + description="CAN interface to use for hardware interfaces.", + ) + ) return LaunchDescription(declared_arguments + [OpaqueFunction(function=launch_setup)]) @@ -133,6 +140,7 @@ def launch_setup(context, *args, **kwargs): mock_sensor_commands = LaunchConfiguration("mock_sensor_commands") use_3dof = LaunchConfiguration("use_3dof") deactivate_talon = LaunchConfiguration("deactivate_talon") + can_interface = LaunchConfiguration("can_interface") # -- Building Path Files -- # Get URDF via xacro. @@ -191,6 +199,9 @@ def launch_setup(context, *args, **kwargs): " ", "deactivate_talon:=", deactivate_talon, + " ", + "can_interface:=", + can_interface, ] ) robot_description = {"robot_description": robot_description_content} diff --git a/src/subsystems/drive/drive_bringup/launch/athena_drive.launch.py b/src/subsystems/drive/drive_bringup/launch/athena_drive.launch.py index 101af9d2..91999751 100644 --- a/src/subsystems/drive/drive_bringup/launch/athena_drive.launch.py +++ b/src/subsystems/drive/drive_bringup/launch/athena_drive.launch.py @@ -119,6 +119,13 @@ def generate_launch_description(): description="Deactivate the ODrive joints in the URDF when using mock hardware to prevent excessive CAN flow.", ) ) + declared_arguments.append( + DeclareLaunchArgument( + "can_interface", + default_value="can0", + description="CAN interface to use for hardware interfaces.", + ) + ) return LaunchDescription(declared_arguments + [OpaqueFunction(function=launch_setup)]) @@ -138,6 +145,7 @@ def launch_setup(context, *args, **kwargs): mock_sensor_commands = LaunchConfiguration("mock_sensor_commands") robot_controller = LaunchConfiguration("robot_controller") deactivate_odrive = LaunchConfiguration("deactivate_odrive") + can_interface = LaunchConfiguration("can_interface") robot_description_path = PathJoinSubstitution( [FindPackageShare(description_package), "urdf", description_file] @@ -177,6 +185,9 @@ def launch_setup(context, *args, **kwargs): " ", "deactivate_odrive:=", deactivate_odrive, + " ", + "can_interface:=", + can_interface, ] ) diff --git a/src/subsystems/navigation/nav_bringup/launch/nav_bringup.launch.py b/src/subsystems/navigation/nav_bringup/launch/nav_bringup.launch.py index d11f47c5..6ca05525 100644 --- a/src/subsystems/navigation/nav_bringup/launch/nav_bringup.launch.py +++ b/src/subsystems/navigation/nav_bringup/launch/nav_bringup.launch.py @@ -25,6 +25,7 @@ def generate_launch_description(): use_respawn = LaunchConfiguration('use_respawn') log_level = LaunchConfiguration('log_level') use_config = LaunchConfiguration('use_config') + can_interface = LaunchConfiguration('can_interface') use_localizer = PythonExpression( ["'false' if '", use_zed_localizer, "' == 'true' else 'true'"] @@ -38,6 +39,9 @@ def generate_launch_description(): PathJoinSubstitution([ FindPackageShare('description'), 'urdf', 'athena_drive.urdf.xacro' ]), + ' ', + 'can_interface:=', + can_interface, ]) robot_state_publisher = Node( @@ -133,6 +137,11 @@ def generate_launch_description(): choices=['true', 'false'], description='Launch the Nav2 config GUI', ), + DeclareLaunchArgument( + 'can_interface', + default_value='can0', + description='CAN interface to use for hardware interfaces.', + ), robot_state_publisher, mag_heading_launch, diff --git a/src/subsystems/science/science_bringup/launch/athena_science.launch.py b/src/subsystems/science/science_bringup/launch/athena_science.launch.py index 66fe1d28..fdf3be13 100644 --- a/src/subsystems/science/science_bringup/launch/athena_science.launch.py +++ b/src/subsystems/science/science_bringup/launch/athena_science.launch.py @@ -100,6 +100,13 @@ def generate_launch_description(): description="Robot controller to start.", ) ) + declared_arguments.append( + DeclareLaunchArgument( + "can_interface", + default_value="can0", + description="CAN interface to use for hardware interfaces.", + ) + ) # Initialize Arguments runtime_config_package = LaunchConfiguration("runtime_config_package") @@ -111,6 +118,7 @@ def generate_launch_description(): mock_sensor_commands = LaunchConfiguration("mock_sensor_commands") robot_controller = LaunchConfiguration("robot_controller") deactivate_talon = LaunchConfiguration("deactivate_talon") + can_interface = LaunchConfiguration("can_interface") # Get URDF via xacro robot_description_content = Command( @@ -132,6 +140,9 @@ def generate_launch_description(): " ", "deactivate_talon:=", deactivate_talon, + " ", + "can_interface:=", + can_interface, ] ) diff --git a/src/tools/scripts/virtual_can_setup.sh b/src/tools/scripts/virtual_can_setup.sh index 8921b0ed..68e37897 100755 --- a/src/tools/scripts/virtual_can_setup.sh +++ b/src/tools/scripts/virtual_can_setup.sh @@ -1,2 +1,2 @@ -sudo ip link add dev can0 type vcan -sudo ip link set up can0 \ No newline at end of file +sudo ip link add dev vcan0 type vcan +sudo ip link set up vcan0 \ No newline at end of file