added tracking conf
This commit is contained in:
104
src/sherpa/launch/calibration.launch.py
Normal file
104
src/sherpa/launch/calibration.launch.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import os.path
|
||||||
|
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from launch.conditions import IfCondition
|
||||||
|
import math
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
# ----- microros -----
|
||||||
|
servo_uros_node = Node(
|
||||||
|
package='micro_ros_agent',
|
||||||
|
executable='micro_ros_agent',
|
||||||
|
arguments=["serial", "--dev", "/dev/ttyACM0", "--baud", "921600"],
|
||||||
|
)
|
||||||
|
|
||||||
|
servo_angle_tf_node = Node(
|
||||||
|
package='sherpa_lidar_utils',
|
||||||
|
executable='servo_angle_tf.py',
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- lidar position -----
|
||||||
|
lidar_position_base_tf_node = Node(
|
||||||
|
package='tf2_ros',
|
||||||
|
executable='static_transform_publisher',
|
||||||
|
arguments=['0', '0', '0', '0', '0', '0', '1', 'velodyne', 'lidar_base'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- lidar topics -----
|
||||||
|
vlp16_driver_node = Node(
|
||||||
|
package='velodyne_driver',
|
||||||
|
executable='velodyne_driver_node',
|
||||||
|
arguments=["--ros-args", "-p", "model:=VLP16", "-p", "rpm:=600.0", "-p", "device_ip:=10.42.200.201"],
|
||||||
|
remappings=[
|
||||||
|
('/velodyne_packets', '/lidar/vlp16/packets'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
vlp16_pointcloud_node = Node(
|
||||||
|
package='velodyne_pointcloud',
|
||||||
|
executable='velodyne_transform_node',
|
||||||
|
arguments=["--ros-args", "-p", f"calibration:={os.path.join(get_package_share_directory('sherpa'), 'config', 'vlp-16-pointcloud.yaml')}", "-p", "model:=VLP16"],
|
||||||
|
remappings=[
|
||||||
|
('/velodyne_packets', '/lidar/vlp16/packets'),
|
||||||
|
('/velodyne_points', '/lidar/vlp16/points'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
mid40_driver_node = Node(
|
||||||
|
package='livox_ros2_driver',
|
||||||
|
executable='livox_ros2_driver_node',
|
||||||
|
arguments=[],
|
||||||
|
remappings=[
|
||||||
|
('/livox/lidar', '/lidar/mid40/points'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- pointcloud downsampling -----
|
||||||
|
downsample_vlp16_node = Node(
|
||||||
|
package='target_tracking',
|
||||||
|
executable='cloud_preprocessing_node',
|
||||||
|
parameters=[
|
||||||
|
{"topic_in": "/lidar/vlp16/points"},
|
||||||
|
{"topic_out": "/lidar/vlp16/downsampled"},
|
||||||
|
{"x_min": 0.0},
|
||||||
|
{"x_max": 100.0},
|
||||||
|
{"z_min": -5.0},
|
||||||
|
{"z_max": 10.0},
|
||||||
|
{"tan_h_fov": math.pi}, # 180°
|
||||||
|
{"tan_v_fov": math.pi / 5}, # ~36°
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
downsample_mid40_node = Node(
|
||||||
|
package='target_tracking',
|
||||||
|
executable='cloud_preprocessing_node',
|
||||||
|
parameters=[
|
||||||
|
{"topic_in": "/lidar/mid40/points"},
|
||||||
|
{"topic_out": "/lidar/mid40/downsampled"},
|
||||||
|
{"x_min": 0.0},
|
||||||
|
{"x_max": 100.0},
|
||||||
|
{"z_min": -5.0},
|
||||||
|
{"z_max": 10.0},
|
||||||
|
{"tan_h_fov": math.pi / 4}, # 45°
|
||||||
|
{"tan_v_fov": math.pi / 4}, # 45°
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- create ld -----
|
||||||
|
ld = LaunchDescription()
|
||||||
|
|
||||||
|
ld.add_action(servo_uros_node)
|
||||||
|
ld.add_action(servo_angle_tf_node)
|
||||||
|
ld.add_action(lidar_position_base_tf_node)
|
||||||
|
ld.add_action(vlp16_driver_node)
|
||||||
|
ld.add_action(vlp16_pointcloud_node)
|
||||||
|
ld.add_action(mid40_driver_node)
|
||||||
|
ld.add_action(downsample_vlp16_node)
|
||||||
|
ld.add_action(downsample_mid40_node)
|
||||||
|
|
||||||
|
return ld
|
||||||
159
src/sherpa/launch/tracking.launch.py
Normal file
159
src/sherpa/launch/tracking.launch.py
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
import os.path
|
||||||
|
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
|
||||||
|
from launch import LaunchDescription
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from launch.conditions import IfCondition
|
||||||
|
import math
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
# ----- microros -----
|
||||||
|
servo_uros_node = Node(
|
||||||
|
package='micro_ros_agent',
|
||||||
|
executable='micro_ros_agent',
|
||||||
|
arguments=["serial", "--dev", "/dev/ttyACM0", "--baud", "921600"],
|
||||||
|
)
|
||||||
|
|
||||||
|
servo_angle_tf_node = Node(
|
||||||
|
package='sherpa_lidar_utils',
|
||||||
|
executable='servo_angle_tf.py',
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- lidar position -----
|
||||||
|
lidar_position_tf_node = Node(
|
||||||
|
package='sherpa_lidar_utils',
|
||||||
|
executable='publish_calibration.py',
|
||||||
|
arguments=["--ros-args", "-p", "calibration:=/home/sherpa/lidar_calibration"],
|
||||||
|
)
|
||||||
|
|
||||||
|
lidar_position_base_tf_node = Node(
|
||||||
|
package='tf2_ros',
|
||||||
|
executable='static_transform_publisher',
|
||||||
|
arguments=['0', '0', '0', '0', '0', '0', '1', 'velodyne', 'lidar_base'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- lidar topics -----
|
||||||
|
vlp16_driver_node = Node(
|
||||||
|
package='velodyne_driver',
|
||||||
|
executable='velodyne_driver_node',
|
||||||
|
arguments=["--ros-args", "-p", "model:=VLP16", "-p", "rpm:=600.0", "-p", "device_ip:=10.42.200.201"],
|
||||||
|
remappings=[
|
||||||
|
('/velodyne_packets', '/lidar/vlp16/packets'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
vlp16_pointcloud_node = Node(
|
||||||
|
package='velodyne_pointcloud',
|
||||||
|
executable='velodyne_transform_node',
|
||||||
|
arguments=["--ros-args", "-p", f"calibration:={os.path.join(get_package_share_directory('sherpa'), 'config', 'vlp-16-pointcloud.yaml')}", "-p", "model:=VLP16"],
|
||||||
|
remappings=[
|
||||||
|
('/velodyne_packets', '/lidar/vlp16/packets'),
|
||||||
|
('/velodyne_points', '/lidar/vlp16/points'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
mid40_driver_node = Node(
|
||||||
|
package='livox_ros2_driver',
|
||||||
|
executable='livox_ros2_driver_node',
|
||||||
|
arguments=[],
|
||||||
|
remappings=[
|
||||||
|
('/livox/lidar', '/lidar/mid40/points'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- pointcloud downsampling -----
|
||||||
|
downsample_vlp16_node = Node(
|
||||||
|
package='target_tracking',
|
||||||
|
executable='cloud_preprocessing_node',
|
||||||
|
parameters=[
|
||||||
|
{"topic_in": "/lidar/vlp16/points"},
|
||||||
|
{"topic_out": "/lidar/vlp16/downsampled"},
|
||||||
|
{"x_min": 0.0},
|
||||||
|
{"x_max": 100.0},
|
||||||
|
{"z_min": -5.0},
|
||||||
|
{"z_max": 10.0},
|
||||||
|
{"tan_h_fov": math.pi}, # 180°
|
||||||
|
{"tan_v_fov": math.pi / 5}, # ~36°
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
downsample_mid40_node = Node(
|
||||||
|
package='target_tracking',
|
||||||
|
executable='cloud_preprocessing_node',
|
||||||
|
parameters=[
|
||||||
|
{"topic_in": "/lidar/mid40/points"},
|
||||||
|
{"topic_out": "/lidar/mid40/downsampled"},
|
||||||
|
{"x_min": 0.0},
|
||||||
|
{"x_max": 100.0},
|
||||||
|
{"z_min": -5.0},
|
||||||
|
{"z_max": 10.0},
|
||||||
|
{"tan_h_fov": math.pi / 4}, # 45°
|
||||||
|
{"tan_v_fov": math.pi / 4}, # 45°
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- pointcloud merging -----
|
||||||
|
pointcloud_merger_node = Node(
|
||||||
|
package='scans_merger',
|
||||||
|
executable='scans_merger',
|
||||||
|
parameters=[
|
||||||
|
{"destination_frame": "lidar_base"},
|
||||||
|
{"input_cloud_1": "/lidar/vlp16/downsampled"},
|
||||||
|
{"input_cloud_2": "/lidar/mid40/downsampled"},
|
||||||
|
{"merged_cloud": "/lidar/merged/points"},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- tracking -----
|
||||||
|
cloud_clustering_node = Node(
|
||||||
|
package='target_tracking',
|
||||||
|
executable='cloud_clustering_node',
|
||||||
|
parameters=[
|
||||||
|
{"topic_in": "/lidar/merged/points"},
|
||||||
|
{"frame_id": 'lidar_base'},
|
||||||
|
{"z_dim_scale": 1.0},
|
||||||
|
#{"cluster_tolerance": 0.065},
|
||||||
|
#{"min_cluster_size": 450},
|
||||||
|
#{"max_cluster_size": 1650},
|
||||||
|
{"min_cluster_size": 125},
|
||||||
|
{"max_cluster_size": 2250},
|
||||||
|
{"cluster_tolerance": 0.15},
|
||||||
|
],
|
||||||
|
remappings=[
|
||||||
|
('/cluster5', '/tracking/cluster0'),
|
||||||
|
('/cluster4', '/tracking/cluster1'),
|
||||||
|
('/cluster3', '/tracking/cluster2'),
|
||||||
|
('/cluster2', '/tracking/cluster3'),
|
||||||
|
('/cluster1', '/tracking/cluster4'),
|
||||||
|
('/cluster0', '/tracking/cluster5'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
servo_tracking_node = Node(
|
||||||
|
package='sherpa_lidar_utils',
|
||||||
|
executable='track_cluster.py',
|
||||||
|
remappings=[
|
||||||
|
('/tracking/target', '/tracking/cluster0'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----- create ld -----
|
||||||
|
ld = LaunchDescription()
|
||||||
|
|
||||||
|
ld.add_action(servo_uros_node)
|
||||||
|
ld.add_action(servo_angle_tf_node)
|
||||||
|
ld.add_action(lidar_position_tf_node)
|
||||||
|
ld.add_action(lidar_position_base_tf_node)
|
||||||
|
ld.add_action(vlp16_driver_node)
|
||||||
|
ld.add_action(vlp16_pointcloud_node)
|
||||||
|
ld.add_action(mid40_driver_node)
|
||||||
|
ld.add_action(downsample_vlp16_node)
|
||||||
|
ld.add_action(downsample_mid40_node)
|
||||||
|
ld.add_action(pointcloud_merger_node)
|
||||||
|
ld.add_action(cloud_clustering_node)
|
||||||
|
ld.add_action(servo_tracking_node)
|
||||||
|
|
||||||
|
return ld
|
||||||
Reference in New Issue
Block a user