Hi @Myzhar ,Yes sorry for the late reply but the drift is large. For the reason for GNSS data not existing is that we took the svo using the ROS2 service of startSVOrecording of ROS wrapper of ZED SDK, I believe it still does not support to include GNSS data. I tried to take a recording of svo2 with the global localization example of the zed_sdk repo but didn’t worked with the same GNSS data error. But I have a ros2bag recording of me trying to calibrate. Consider that I launched ros2 bag record some time later after launching zed_localization: And there is the problem of depth perception it sees ghost obstacles in the air you can see it yourself in the rosbag. And that effect our point cloud and therefore the obstacle map, Do you think it is because of the sun being too shiny?
# map->odom: provided by global EKF (GPS-fused)
# odom->zed_camera_link: provided by local EKF
# rtabmap: costmap/grid generation only (publish_tf disabled)
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import PathJoinSubstitution
from launch_ros.substitutions import FindPackageShare
from launch.actions import GroupAction
from launch_ros.actions import PushRosNamespace, SetRemap
from launch_ros.actions import Node
from launch.substitutions import Command
from launch_ros.parameter_descriptions import ParameterValue
import os
from ament_index_python.packages import get_package_share_directory
# TF chain: map->odom->zed_camera_link (REP 105)
def generate_launch_description() -> LaunchDescription:
juno_bringup_dir = get_package_share_directory('juno_bringup')
config_dir = os.path.join(
juno_bringup_dir,
'launch',
'gps_rl_config'
)
navsat_params_file = os.path.join(config_dir, 'navsat_transform_node.yaml')
rviz_cfg = PathJoinSubstitution(
[
FindPackageShare("juno_bringup"),
"launch",
"rviz_config",
"ekf_check_config.rviz",
]
)
urdf_path = PathJoinSubstitution(
[
FindPackageShare("juno_bringup"), # Change to your actual package
"launch",
"urdf_config", # Change to your urdf folder
"zed_base_link.urdf.xacro", # Change to your actual file name
]
)
robot_state_publisher_node = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
name="robot_state_publisher",
parameters=[{
"robot_description": ParameterValue(
Command(['xacro ', urdf_path, ' use_zed_localization:=true']),
value_type=str
)
}],
)
# Disable VIO’s publication of odom->camera and instead publish nav_msgs/Odometry of the VIO’s pose solution for fusion.
# By default the zed_wrapper publishes this under the odom topic, but it is recommended to remap this to a non-reserved topic name (for example, camera_odom).
# remappings=[('odom', 'camera_odom')]
zed_camera_launch = GroupAction(
actions=[
SetRemap(src='odom', dst='camera_odom'),
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution(
[
FindPackageShare("zed_wrapper"),
"launch",
"zed_camera.launch.py",
]
)
),
launch_arguments={
"camera_model": "zed2i",
"publish_map_tf": "true",
"publish_imu_tf": "true",
"publish_tf": "true",
"enable_gnss": "true",
"gnss_antenna_offset": "[-0.73,0,0]"
}.items(),
)
]
)
gps_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution([
FindPackageShare("ublox_gps"), "launch", "rover-launch.py",
])
)
)
return LaunchDescription(
[
robot_state_publisher_node,
gps_launch,
#imu_mag_fuse,
zed_camera_launch,
]
)
# Disable VIO’s publication of odom->camera and instead publish nav_msgs/Odometry of the VIO’s pose solution for fusion.
# By default the zed_wrapper publishes this under the odom topic, but it is recommended to remap this to a non-reserved topic name (for example, camera_odom).
# remappings=[('odom', 'camera_odom')]
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import PathJoinSubstitution
from launch_ros.substitutions import FindPackageShare
from launch.actions import GroupAction
from launch_ros.actions import PushRosNamespace, SetRemap
from launch_ros.actions import Node
from launch.substitutions import Command
from launch_ros.parameter_descriptions import ParameterValue
import os
from ament_index_python.packages import get_package_share_directory
# TF chain: map->odom->zed_camera_link (REP 105)
def generate_launch_description() -> LaunchDescription:
juno_bringup_dir = get_package_share_directory('juno_bringup')
config_dir = os.path.join(
juno_bringup_dir,
'launch',
'gps_rl_config'
)
navsat_params_file = os.path.join(config_dir, 'navsat_transform_node.yaml')
rviz_cfg = PathJoinSubstitution(
[
FindPackageShare("juno_bringup"),
"launch",
"rviz_config",
"ekf_check_config.rviz",
]
)
urdf_path = PathJoinSubstitution(
[
FindPackageShare("juno_bringup"), # Change to your actual package
"launch",
"urdf_config", # Change to your urdf folder
"zed_base_link.urdf.xacro", # Change to your actual file name
]
)
robot_state_publisher_node = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
name="robot_state_publisher",
parameters=[{
"robot_description": ParameterValue(
Command(['xacro ', urdf_path, ' use_zed_localization:=true']),
value_type=str
)
}],
)
zed_camera_launch = GroupAction(
actions=[
SetRemap(src='odom', dst='camera_odom'),
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution(
[
FindPackageShare("zed_wrapper"),
"launch",
"zed_camera.launch.py",
]
)
),
launch_arguments={
"camera_model": "zed2i",
"publish_map_tf": "true",
"publish_imu_tf": "true",
"publish_tf": "true",
"enable_gnss": "true",
"gnss_antenna_offset": "[-0.73,0,0]"
}.items(),
)
]
)
gps_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution([
FindPackageShare("ublox_gps"), "launch", "rover-launch.py",
])
)
)
return LaunchDescription(
[
robot_state_publisher_node,
gps_launch,
#imu_mag_fuse,
zed_camera_launch,
]
)
The calibration didn’t finished even though we were having 2cm accuracy with gps. The following is the rosbag recording: https://drive.google.com/drive/folders/1zU8ogGQUADjxfhZkSPicwUrfR4xbNQY8?usp=drive_link
Would appreciate if this calibration in progress is just a needing of more time to calibrate issue or something deeper. Best