Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jazzy 2.0 RC #122

Merged
merged 61 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
5700df6
Update CI to use Jazzy instead of Humble
civerachb-cpr Oct 2, 2024
5d33761
Merge pull request #89 from clearpathrobotics/civerachb/jazzy-ci
civerachb-cpr Oct 2, 2024
a753021
Updated dependencies.repos to use jazzy-2.0RC for now.
tonybaltovski Oct 2, 2024
f346afc
Use the distribution provided by the common generators
civerachb-cpr Sep 30, 2024
5ed452c
Change puma messages dependency to the new clearpath_motor_msgs
civerachb-cpr Sep 30, 2024
6b86389
Merge pull request #87 from clearpathrobotics/wip-jazzy
civerachb-cpr Oct 4, 2024
02e308d
Socket CAN Bridges (#93)
luis-camero Oct 10, 2024
a6b43bc
Remove missing jazzy dependencies (for now)
civerachb-cpr Oct 21, 2024
a3fad6a
Catch the new unsupported platform/accessory exceptions in the tests
civerachb-cpr Nov 6, 2024
6847477
Merge pull request #97 from clearpathrobotics/cib/jazzy-fixes
tonybaltovski Nov 8, 2024
a7a7853
Add phidgets spatial (#91)
luis-camero Oct 4, 2024
94ec060
Added simple README. (#83)
tonybaltovski Oct 4, 2024
45451a7
Add OAKD (#92)
luis-camero Oct 4, 2024
d6aa045
[clearpath_robot] Added script to grab diagnostic logs for troublesho…
tonybaltovski Oct 4, 2024
999da89
Changes.
tonybaltovski Oct 4, 2024
dfa3b93
0.3.2
tonybaltovski Oct 4, 2024
4341c7c
Add ffmpeg compression support for Blackfly
hilary-luo Nov 4, 2024
1a11a41
Disable all extra image transports on the encoded Blackfly topic
hilary-luo Nov 4, 2024
d99044d
Restrict image transports on decoded blackfly topics to relevant ones
hilary-luo Nov 4, 2024
b2dc346
Update frame rate to match default in clearpath_config although this …
hilary-luo Nov 5, 2024
79c063d
Set Blackfly binning as 2 for optimal operation
hilary-luo Nov 5, 2024
5d22653
Added pointcloud support to OakD
luis-camero Oct 15, 2024
8ee54fd
Switch remove RGB from pointcloud
luis-camero Nov 5, 2024
4e5b64a
Ffmpeg manual launch (#105)
hilary-luo Nov 21, 2024
fbab258
Remappings to for Phidget Spatial
luis-camero Nov 11, 2024
8fd759a
Change vcan service to use generated script
luis-camero Nov 7, 2024
7835f63
Add clearpath_motor_drivers, puma_motor_driver
luis-camero Nov 21, 2024
05f5401
Add clearpath_ros2_socketcan_interface to repos
luis-camero Nov 21, 2024
ba3ff8e
Move imu_filter.yaml to clearpath_sensors
luis-camero Nov 21, 2024
280159e
Add clearpath_hardware_interfaces
luis-camero Nov 21, 2024
c8fdf79
Renamed header directory
luis-camero Nov 21, 2024
ad57c77
Removed config install
luis-camero Nov 21, 2024
f41b319
Add support for Axis cameras (#101)
civerachb-cpr Nov 20, 2024
9b89f5a
Add vcan to robot service wants
luis-camero Nov 21, 2024
17329e8
Add ur_robot_driver dependency
luis-camero Nov 21, 2024
1f3495a
Make robot service always restart vcan
luis-camero Nov 21, 2024
fc9393b
Use clearpath_ros2_socketcan_interface launch files
luis-camero Nov 21, 2024
54bcc33
Move battery_state to clearpath_hardware_interfaces
luis-camero Nov 21, 2024
70f698c
Remove battery_state from CMakeLists
luis-camero Nov 22, 2024
eeaf4f6
Fixed spelling
roni-kreinin Nov 22, 2024
3b39a8d
Remove platform.launch.py
luis-camero Nov 22, 2024
c9f86bf
Update package paths in generator
luis-camero Nov 22, 2024
88a6259
Apply twist stamped changes
luis-camero Nov 25, 2024
a862383
A300 (#106)
roni-kreinin Nov 27, 2024
fcfad78
Add dependency on inventus_bmu (#109)
civerachb-cpr Dec 5, 2024
4f7e28e
A300 VCAN (#111)
roni-kreinin Dec 16, 2024
7f96d47
Add the package initializations that used to be in clearpath_common_g…
civerachb-cpr Dec 16, 2024
c5cdbe4
CAN bootloader fixes (#112)
roni-kreinin Dec 17, 2024
ae66731
A300 lighting fixes (#114)
roni-kreinin Dec 20, 2024
d240de9
Remove udev rules for joy controllers (#113)
civerachb-cpr Jan 6, 2025
1cbbadb
Add visibility_control.h to clearpath_hardware_interfaces, update inc…
civerachb-cpr Jan 8, 2025
49db219
Fix the path for the pointcloud calibration path for Jazzy
civerachb-cpr Jan 9, 2025
0e7d3f9
Fix hard-coded humble packages (#117)
civerachb-cpr Jan 13, 2025
ef8bdab
Add zenoh service files & generators (#116)
civerachb-cpr Jan 13, 2025
7b83aa6
Remove the image-conversion launch files; they're being relocated to …
civerachb-cpr Jan 13, 2025
0a985b6
Add HE2410 & HE2411 battery support (#119) (#121)
civerachb-cpr Jan 14, 2025
0a439c5
Merge branch 'jazzy' into jazzy-2.0RC
luis-camero Jan 16, 2025
e680bdc
Update dependencies with 'jazzy'
luis-camero Jan 16, 2025
04492f0
Fixed motor error lighting sequence (#120)
roni-kreinin Jan 16, 2025
789bae7
[clearpath_robot] Added check for binary install path and fallback to…
tonybaltovski Jan 16, 2025
1672db4
Remap `navsatfix` to `fix` (#128)
civerachb-cpr Jan 16, 2025
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
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ assignees: clearpathrobotics/clearpath-platform-team
---

**Please provide the following information:**
- OS: (e.g. Ubuntu 22.04)
- ROS 2 Distro: (e.g. Humble)
- OS: (e.g. Ubuntu 24.04)
- ROS 2 Distro: (e.g. Jazzy)
- Built from source or installed:
- Package version: (if from repository, give version from `sudo dpkg -s ros-$ROS_VERSION-clearpath-robot`, if from source, give commit hash)
- Real hardware or simulation:
Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,26 @@ on:

jobs:
clearpath_robot_osrf_industrial_ci:
name: Humble OSRF Industrial
name: Jazzy OSRF Industrial
strategy:
matrix:
env:
- {ROS_REPO: testing, ROS_DISTRO: humble, ROSDEP_SKIP_KEYS: "micro_ros_agent sevcon_traction umx_driver valence_bms_driver"}
- {ROS_REPO: main, ROS_DISTRO: humble, ROSDEP_SKIP_KEYS: "micro_ros_agent sevcon_traction umx_driver valence_bms_driver"}
- {ROS_REPO: testing, ROS_DISTRO: jazzy, ROSDEP_SKIP_KEYS: "micro_ros_agent sevcon_traction umx_driver valence_bms_driver"}
- {ROS_REPO: main, ROS_DISTRO: jazzy, ROSDEP_SKIP_KEYS: "micro_ros_agent sevcon_traction umx_driver valence_bms_driver"}
fail-fast: false
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: 'ros-industrial/industrial_ci@master'
env: ${{matrix.env}}
clearpath_robot_cpr_ci:
name: Humble Clearpath Release
runs-on: ubuntu-22.04
name: Jazzy Clearpath Release
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: ros-tooling/[email protected]
with:
required-ros-distributions: humble
required-ros-distributions: jazzy
- name: clearpath-package-server
run: |
sudo apt install wget
Expand All @@ -37,24 +37,24 @@ jobs:
- uses: ros-tooling/[email protected]
id: action_ros_ci_step
with:
target-ros2-distro: humble
target-ros2-distro: jazzy
package-name: |
clearpath_diagnostics
clearpath_generator_robot
clearpath_robot
clearpath_sensors
clearpath_robot_src_ci:
name: Humble Clearpath Source
runs-on: ubuntu-22.04
name: Jazzy Clearpath Source
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: ros-tooling/[email protected]
with:
required-ros-distributions: humble
required-ros-distributions: jazzy
- uses: ros-tooling/[email protected]
id: action_ros_ci_step
with:
target-ros2-distro: humble
target-ros2-distro: jazzy
package-name: |
clearpath_diagnostics
clearpath_generator_robot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ from rclpy.qos import qos_profile_sensor_data
from sensor_msgs.msg import BatteryState, Image, Imu, LaserScan, MagneticField, NavSatFix, PointCloud2

from clearpath_generator_common.common import BaseGenerator
from clearpath_generator_common.ros import ROS_DISTRO
from clearpath_config.common.utils.yaml import read_yaml
from clearpath_config.clearpath_config import ClearpathConfig
from clearpath_config.sensors.types.sensor import BaseSensor
Expand Down Expand Up @@ -100,12 +101,12 @@ class ClearpathDiagnosticUpdater(Node):
# Check current firmware version
cache = Cache()
try:
pkg = cache['ros-humble-clearpath-firmware']
pkg = cache[f'ros-{ROS_DISTRO}-clearpath-firmware']
versions = pkg.versions
newest: Version = versions[0]
self.newest_firmware_version = newest.version.split('-')[0]
except KeyError:
self.get_logger().warn('ros-humble-clearpath-firmware package not found')
self.get_logger().warn(f'ros-{ROS_DISTRO}-clearpath-firmware package not found')
self.newest_firmware_version = 'Not found'

self.firmware_version = '0.0.0'
Expand All @@ -124,13 +125,13 @@ class ClearpathDiagnosticUpdater(Node):

def check_firmware_version(self, stat: DiagnosticStatusWrapper):
if self.newest_firmware_version == 'Not found':
stat.summary(DiagnosticStatus.ERROR, 'ros-humble-clearpath-firmware package not found')
stat.summary(DiagnosticStatus.ERROR, f'ros-{ROS_DISTRO}-clearpath-firmware package not found')
elif self.firmware_version == self.newest_firmware_version:
stat.summary(DiagnosticStatus.OK, f'Firmware is up to date (v{self.firmware_version})')
elif self.firmware_version < self.newest_firmware_version:
stat.summary(DiagnosticStatus.WARN, f'New firmware available. (v{self.firmware_version}) -> (v{self.newest_firmware_version})')
else:
stat.summary(DiagnosticStatus.WARN, 'ros-humble-clearpath-firmware package is outdated.')
stat.summary(DiagnosticStatus.WARN, f'ros-{ROS_DISTRO}-clearpath-firmware package is outdated.')
return stat

def get_headerless_topic_diagnostic(self,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

from clearpath_config.common.types.platform import Platform
from clearpath_config.platform.battery import BatteryConfig
from clearpath_generator_common.common import LaunchFile, Package
from clearpath_generator_common.common import LaunchFile, Package, ParamFile
from clearpath_generator_common.launch.generator import LaunchGenerator
from clearpath_generator_common.launch.writer import LaunchWriter
from clearpath_generator_robot.launch.sensors import SensorLaunch
Expand All @@ -46,6 +46,10 @@ class RobotLaunchGenerator(LaunchGenerator):
def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
super().__init__(setup_path)

# Additional packages specific to physical robots
self.pkg_clearpath_sensors = Package('clearpath_sensors')
self.pkg_clearpath_hardware_interfaces = Package('clearpath_hardware_interfaces')

# Filter for MCU IMU
self.imu_0_filter_node = LaunchFile.Node(
package='imu_filter_madgwick',
Expand Down Expand Up @@ -149,8 +153,11 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
arguments=['-s', setup_path]
)

# Valence BMS
# BMS
self.bms_launch_file = None
self.bms_node = None

# Valence BMS
if (self.clearpath_config.platform.battery.model in
[BatteryConfig.VALENCE_U24_12XP, BatteryConfig.VALENCE_U27_12XP]):

Expand All @@ -176,6 +183,54 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
package=Package('valence_bms_driver'),
args=bms_launch_args
)
# Inventus BMS
elif (self.clearpath_config.platform.battery.model in
[BatteryConfig.S_24V20_U1]):

pkg_inventus_bmu = Package('inventus_bmu')
launch_args = self.clearpath_config.platform.battery.launch_args

inventus_bmu_params_file = ParamFile('default', package=pkg_inventus_bmu)
inventus_bmu_params = inventus_bmu_params_file.full_path

module_ids = []

match(self.clearpath_config.platform.battery.configuration):
case BatteryConfig.S1P2:
module_ids = [49, 50]
case BatteryConfig.S1P4:
module_ids = [49, 50, 51, 52]
case BatteryConfig.S1P6:
module_ids = [49, 50, 51, 52, 53, 54]

module_series = str([module_ids])

can_dev = 'vcan1'

if launch_args:
if 'params' in launch_args:
inventus_bmu_params = launch_args['params']
if 'can_device' in launch_args:
can_dev = launch_args['can_device']

self.bms_node = LaunchFile.Node(
'inventus_bmu',
'inventus_bmu',
'inventus_bmu_driver',
self.namespace,
parameters=[
inventus_bmu_params,
{'can_device': can_dev},
{'module_ids': module_ids},
{'module_series': module_series}
],
remappings=[
('bms/battery_state', 'platform/bms/state'),
('modules', 'platform/bms/modules'),
('bms/low_soc_alarm', 'platform/bms/low_soc_alarm'),
('bms/soc_difference_alarm', 'platform/bms/soc_difference_alarm')
]
)

# Lighting
self.lighting_node = LaunchFile.Node(
Expand Down Expand Up @@ -203,12 +258,22 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
namespace=self.namespace,
)

# BLDC Multi-Drive Node
self.lynx_node = LaunchFile.Node(
package='lynx_motor_driver',
executable='lynx_motor_driver',
parameters=[os.path.join(self.platform_params_path, 'control.yaml')],
name='lynx_control',
namespace=self.namespace,
)

# ROS2 socketcan bridges
ros2_socketcan_package = Package('clearpath_ros2_socketcan_interface')
self.can_bridges = []
for can_bridge in self.clearpath_config.platform.can_bridges.get_all():
self.can_bridges.append(LaunchFile(
'receiver',
f'{can_bridge.interface}_receiver',
filename='receiver',
package=ros2_socketcan_package,
args=[
('namespace', self.namespace),
Expand All @@ -218,7 +283,8 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
))

self.can_bridges.append(LaunchFile(
'sender',
f'{can_bridge.interface}_sender',
filename='sender',
package=ros2_socketcan_package,
args=[
('namespace', self.namespace),
Expand All @@ -231,10 +297,13 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
common_platform_components = [
self.wireless_watcher_node,
self.diagnostics_launch,
self.battery_state_estimator,
self.battery_state_control
self.battery_state_control,
]

# Only add estimator when no BMS is present
if self.bms_launch_file is None and self.bms_node is None:
common_platform_components.append(self.battery_state_estimator)

if len(self.can_bridges) > 0:
common_platform_components.extend(self.can_bridges)

Expand All @@ -247,6 +316,12 @@ def __init__(self, setup_path: str = '/etc/clearpath/') -> None:
self.nmea_driver_node
],
Platform.A200: common_platform_components,
Platform.A300: common_platform_components + [
self.eth_uros_node,
self.configure_mcu,
self.lighting_node,
self.lynx_node,
],
Platform.W200: common_platform_components + [
self.imu_0_filter_node,
self.imu_0_filter_config,
Expand Down Expand Up @@ -336,6 +411,9 @@ def generate_platform(self) -> None:
if self.bms_launch_file:
platform_service_launch_writer.add(self.bms_launch_file)

if self.bms_node:
platform_service_launch_writer.add(self.bms_node)

platform_service_launch_writer.generate_file()

def generate_manipulators(self) -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,20 @@
# modification, is not permitted without the express permission
# of Clearpath Robotics.

from clearpath_generator_common.common import Package
from clearpath_generator_common.param.generator import ParamGenerator
from clearpath_generator_robot.param.sensors import SensorParam


class RobotParamGenerator(ParamGenerator):

def __init__(self, setup_path: str = '/etc/clearpath') -> None:
super().__init__(setup_path=setup_path)

# Additional packages specific to physical robots
self.pkg_clearpath_sensors = Package('clearpath_sensors')
self.pkg_clearpath_hardware_interfaces = Package('clearpath_hardware_interfaces')

def generate_sensors(self) -> None:
sensors = self.clearpath_config.sensors.get_all_sensors()
for sensor in sensors:
Expand Down
8 changes: 6 additions & 2 deletions clearpath_generator_robot/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@
<exec_depend version_gte="1.0.0">clearpath_config</exec_depend>
<exec_depend version_gte="1.0.0">clearpath_diagnostics</exec_depend>
<exec_depend version_gte="1.0.0">clearpath_generator_common</exec_depend>
<exec_depend version_gte="1.0.0">clearpath_hardware_interfaces</exec_depend>
<exec_depend version_gte="1.0.0">clearpath_motor_msgs</exec_depend>
<exec_depend version_gte="1.0.0">clearpath_sensors</exec_depend>

<exec_depend>imu_filter_madgwick</exec_depend>
<exec_depend>inventus_bmu</exec_depend>
<exec_depend>micro_ros_agent</exec_depend>
<exec_depend version_gte="1.0.0">puma_motor_driver</exec_depend>
<exec_depend>sevcon_traction</exec_depend>
<!--<exec_depend>sevcon_traction</exec_depend>-->
<exec_depend>valence_bms_driver</exec_depend>
<exec_depend>wireless_msgs</exec_depend>
<exec_depend>wireless_watcher</exec_depend>

<test_depend>ament_lint_auto</test_depend>
Expand Down
8 changes: 8 additions & 0 deletions clearpath_generator_robot/test/test_generator_launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
import shutil

from ament_index_python.packages import get_package_share_directory
from clearpath_config.common.types.exception import (
UnsupportedAccessoryException,
UnsupportedPlatformException,
)
from clearpath_generator_robot.launch.generator import RobotLaunchGenerator


Expand All @@ -49,6 +53,10 @@ def test_samples(self):
try:
rlg = RobotLaunchGenerator(os.path.dirname(dst))
rlg.generate()
except UnsupportedAccessoryException as e:
print(f'Unsupported accessory: {e}')
except UnsupportedPlatformException as e:
print(f'Unsupported platform: {e}')
except Exception as e:
errors.append("Sample '%s' failed to load: '%s'" % (
sample,
Expand Down
12 changes: 11 additions & 1 deletion clearpath_generator_robot/test/test_generator_param.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,15 @@
import shutil

from ament_index_python.packages import get_package_share_directory
from clearpath_config.common.types.exception import (
UnsupportedAccessoryException,
UnsupportedPlatformException,
)
from clearpath_generator_common.ros import ROS_DISTRO
from clearpath_generator_robot.param.generator import RobotParamGenerator

SAMPLE_DIR = '/opt/ros/humble/share/clearpath_config/sample/'

SAMPLE_DIR = f'/opt/ros/{ROS_DISTRO}/share/clearpath_config/sample/'


class TestRobotLaunchGenerator:
Expand All @@ -51,6 +57,10 @@ def test_samples(self):
try:
rpg = RobotParamGenerator(os.path.dirname(dst))
rpg.generate()
except UnsupportedAccessoryException as e:
print(f'Unsupported accessory: {e}')
except UnsupportedPlatformException as e:
print(f'Unsupported platform: {e}')
except Exception as e:
errors.append("Sample '%s' failed to load: '%s'" % (
sample,
Expand Down
12 changes: 6 additions & 6 deletions clearpath_hardware_interfaces/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@
Changelog for package clearpath_platform
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0.3.4 (2024-10-08)
------------------

0.3.3 (2024-10-04)
------------------

1.1.0 (2025-01-15)
------------------
* Add HE2411 battery support (`#119 <https://github.com/clearpathrobotics/clearpath_robot/issues/119>`_)
Expand All @@ -28,6 +22,12 @@ Changelog for package clearpath_platform
* Add clearpath_hardware_interfaces
* Contributors: Luis Camero, Tony Baltovski

0.3.4 (2024-10-08)
------------------

0.3.3 (2024-10-04)
------------------

0.3.2 (2024-09-29)
------------------

Expand Down
Loading
Loading