[Clearpath Jackal J100] OS1-32-U ROS2 Humble Gazebo Integration

@alphabravo Can you see the point cloud when running the ouster driver alone?

Please check that in the URDF the link name is called os_sensor then rebuild → source → and then check. Also make sure to manual stop the service via

sudo service ros2 stop

and launch

ros2 launch jackal_startup bringup.launch.py

@Sohail

Yes, if I do:

ROS2 launch ouster_ros driver.launch.py

I can see point cloud.

The URDF link is os_sensor.

Do u have some time to support me and fix the error?

Sure I will email you the link.

Issue resolved by changing the ouster parameter to:

timestamp_mode: 'TIME_FROM_ROS_TIME'
1 Like

@Sohail
Thanks for ur help!
I‘m nearly done with pointcloud to laserscan implementation. And I‘ll start with mapping and navigation soon.

Next topic: Does the GPS works out of the Box?
And are u able to send me the mesh files for ZED2?

Which GPS are you referring to? Typically the GPS has to be configured. The ZED2 meshes can be found here. You just have to rename them according to the file name in the URDF.

PointCloud to laserscan is not working properly or I can’t get it configured for the ouster. Do you also use PointCloud to laserscan? Do you have a launch file for the ouster?

Normally /ouster/Scan should work, unfortunately I didn’t find any configurations for it…

GPS I would like to use the integrated, but it takes a while until I can configure that.

You can get help on running the point_cloud_to_laserscan via the issues on the repository. The launch file for Ouster is:

# Copyright 2023 Ouster, Inc.
#

"""Launch a sensor node along with os_cloud and os_"""

from pathlib import Path
import launch
import lifecycle_msgs.msg
from ament_index_python.packages import get_package_share_directory
from launch_ros.actions import Node, LifecycleNode
from launch.actions import (DeclareLaunchArgument, IncludeLaunchDescription,
                            RegisterEventHandler, EmitEvent, LogInfo)
from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch.events import matches_action
from launch_ros.events.lifecycle import ChangeState
from launch_ros.event_handlers import OnStateTransition


def generate_launch_description():
    """
    Generate launch description for running hxg_lidars components separately each
    component will run in a separate process).
    """
    hxg_lidars_pkg_dir = get_package_share_directory('hxg_lidars')
    default_params_file = \
        Path(hxg_lidars_pkg_dir) / 'config' / 'ouster_params.yaml'
    params_file = LaunchConfiguration('params_file')
    params_file_arg = DeclareLaunchArgument('params_file',
                                            default_value=str(
                                            default_params_file),
                                            description='name or path to the parameters file to use.')

    ouster_ns = LaunchConfiguration('ouster_ns')
    ouster_ns_arg = DeclareLaunchArgument(
        'ouster_ns', default_value='ouster')

    os_driver_name = LaunchConfiguration('os_driver_name')
    os_driver_name_arg = DeclareLaunchArgument('os_driver_name', default_value='os_driver')

    os_driver = LifecycleNode(
        package='ouster_ros',
        executable='os_driver',
        name=os_driver_name,
        namespace=ouster_ns,
        parameters=[params_file],
        output='screen',
    )

    sensor_configure_event = EmitEvent(
        event=ChangeState(
            lifecycle_node_matcher=matches_action(os_driver),
            transition_id=lifecycle_msgs.msg.Transition.TRANSITION_CONFIGURE,
        )
    )

    sensor_activate_event = RegisterEventHandler(
        OnStateTransition(
            target_lifecycle_node=os_driver, goal_state='inactive',
            entities=[
                LogInfo(msg="os_driver activating..."),
                EmitEvent(event=ChangeState(
                    lifecycle_node_matcher=matches_action(os_driver),
                    transition_id=lifecycle_msgs.msg.Transition.TRANSITION_ACTIVATE,
                )),
            ],
            handle_once=True
        )
    )

    return launch.LaunchDescription([
        params_file_arg,
        ouster_ns_arg,
        os_driver_name_arg,
        os_driver,
        sensor_configure_event,
        sensor_activate_event,
    ])

@Sohail
thanks a lot for all these information. I’ll test the code in a few hours.
Next an hopefully last question, before I have a working system. How do I integrate and configure the GPS? I give u two pictures of my onboard GPS, I don’t know which GPS was shipped by my robot… Can u help me with this?


The GPS, if already included in the launch file, should run and would be coming in the topic of /navsat/fix. However, I just checked the Jackal Github (lines 162-181) and it seems that they are waiting for the nmea_navsat_driver to be ported to Humble due to which now it is disabled.

I tried to use the launch file u posted earlier and I do get some laserscan points. But I think laserscan does not work correctly because there are much less points compared to pointcloud.

I also tried to modify the launch file for pointcloud to laserscan but I didn’t work either.

If u have any idea to get this thing work I would love to hear.

I also opened an issue on the official ouster driver page

@Sohail
Do u have a running jackal with ros2 and ouster? Maybe u can send me an iso file?
I’m not able to get this thing work

Or may be it is possible to do a guided installation to make sure everything works correctly.
Or to do an upgrade from ros1 to ros2

Auftrag Nr. M/HSB 2/PK 081
Purchased package:
Clearpath Jackal J100 3D SLAM

Dear @alphabravo,

Do u have a running jackal with ros2 and ouster? Maybe u can send me an iso file?

Currently, we do not have a iso file ROS2 Humble port for Jackal.

Or may be it is possible to do a guided installation to make sure everything works correctly.
Or to do an upgrade from ros1 to ros2

For now Clearpath has not yet (probably within the future) ported completely to ROS2 Humble, so I would advise in terms of safety, reliability, and dependability is to stick to their main distribution. A ROS1 Noetic to ROS2 Foxy guide is already available for Jackal with complete instructions in the Clearpath Manual.

As for Ouster, the ouster repository has to be built as mentioned in their Github. Additionally, once its built you can use one of our tested ROS2 package to launch the driver (including the additions done last time).

I would suggest using the port that you have already done and posting the error/launch/config files of the point_cloud_to_laserscan, so that I can suggest the changes to resolve the issue.

@Sohail
I mean a iso for ros2 foxy jackal with ouster.
It is really important for me, that I have a running jackal with ros2 foxy or humble. But as u said that humble is currently not available, foxy is fine.

I don’t have any other idea, why laserscan is not working and there is. It error message

Do u sell the jackal with ros2 and 3d Slam preinstalled or just ros1?

I mean a iso for ros2 foxy jackal with ouster.

Currently, we don’t.

I don’t have any other idea, why laserscan is not working and there is. It error message

Please post the error.

Do u sell the jackal with ros2 and 3d Slam preinstalled or just ros1?

Most of the Jackals that have been sold are usually ROS1. For ROS2, as mentioned we are waiting for a stable fully functional release.

It is really important for me, that I have a running jackal with ros2 foxy or humble. But as u said that humble is currently not available, foxy is fine.

I believe your current setup is working, so we can aid in resolving the remaining issues as the iso files that are available would work only for the Jackal and not the combined Ouster + 3D SLAM packages. We would have to build and test that setup to ensure it works correctly.

@Sohail

Good morning, system is still working!

Can u recommend a GPU for using ZED2 camera?
And can u recommend a package for §D mapping on ros2 foxy?

Dear Alphabravo,

we have used the GTX 1650TI in the past with GDDR6 - This is fitting very well and is not producing so much heat. Please just take note, you have to add a different PSU & Wiring harness in your Jackal.

With a different customer we are still trying to implement PNY A2000 Low Profile GPU - But not sure about the performance and heat inside the robot yet.

Please feel free to check the following post: JACKAL-OUSTER-ZED Quick Guide

Thanks a lot for the information about the GPU.
Why do i need a different PSU & Wiring harness?

Do u sell those in your shop?

because the GPU is taking so much power which can’t be delivered with the present components. If you would insert the GPU in your present setup, the PC will restart and restart, once the GPU is used, because the needed power can’t be provided.

We don’t have these components in our shop for selling because some of them are hand-made and made on order.

If you wanna upgrade your robot, I would recommend shipping to us.