39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
from getpass import getpass
|
|
from launch import LaunchDescription
|
|
from launch_ros.actions import Node
|
|
from ament_index_python.packages import get_package_share_directory
|
|
|
|
def install_cyclone_dds():
|
|
# Check if Cyclone DDS is already installed
|
|
result = subprocess.run(['dpkg', '-s', 'ros-humble-rmw-cyclonedds-cpp'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
if result.returncode == 0:
|
|
print("DDS is already installed.")
|
|
else:
|
|
print("DDS not installed. Installing now...")
|
|
password = getpass('Enter your sudo password to install DDS: ')
|
|
try:
|
|
subprocess.run(['sudo', '-S', 'apt-get', 'update'], input=password.encode(), check=True)
|
|
subprocess.run(['sudo', '-S', 'apt-get', 'install', '-y', 'ros-humble-rmw-cyclonedds-cpp'], input=password.encode(), check=True)
|
|
print("DDS installed successfully.")
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Failed to install DDS: {str(e)}")
|
|
sys.exit(1)
|
|
|
|
def generate_launch_description():
|
|
if os.getenv('ROS_DISTRO') == 'humble':
|
|
print("Detected ROS 2 Humble. Checking DDS...")
|
|
install_cyclone_dds()
|
|
os.environ['RMW_IMPLEMENTATION'] = 'rmw_cyclonedds_cpp'
|
|
print(f"Environment Variable Set: RMW_IMPLEMENTATION={os.environ.get('RMW_IMPLEMENTATION')}")
|
|
|
|
rviz_config = get_package_share_directory('rslidar_sdk') + '/rviz/rviz2.rviz'
|
|
|
|
return LaunchDescription([
|
|
Node(namespace='rslidar_sdk', package='rslidar_sdk', executable='rslidar_sdk_node', output='screen'),
|
|
Node(namespace='rviz2', package='rviz2', executable='rviz2', arguments=['-d', rviz_config])
|
|
])
|
|
|