小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
ROS2通过launch文件启动realsense d435无法读取配置文件
-
参考官方 https://github.com/IntelRealSense/realsense-ros/blob/ros2/realsense2_camera/launch/rs_launch.py 的启动方式
ros2 launch realsense2_camera rs_launch.py config_file:="'$COLCON_PREFIX_PATH/realsense2_camera/share/realsense2_camera/config/d435i.yaml'"
,是可以正常使用的。然后我试着稍微修改了一些内容,发现了几个小问题,希望得到大家的帮助。下面是我自己调整了一下的代码:
import os from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration import launch_ros.actions configurable_parameters = [{'name': 'camera_name', 'default': 'camera', 'description': 'camera unique name'}, {'name': 'serial_no', 'default': "''", 'description': 'choose device by serial number'}, {'name': 'usb_port_id', 'default': "''", 'description': 'choose device by usb port id'}, {'name': 'device_type', 'default': "''", 'description': 'choose device by type'}, {'name': 'config_file', 'default': "''", 'description': 'yaml config file'}, {'name': 'enable_pointcloud', 'default': 'false', 'description': 'enable pointcloud'}, {'name': 'unite_imu_method', 'default': "''", 'description': '[copy|linear_interpolation]'}, {'name': 'json_file_path', 'default': "''", 'description': 'allows advanced configuration'}, {'name': 'log_level', 'default': 'info', 'description': 'debug log level [DEBUG|INFO|WARN|ERROR|FATAL]'}, {'name': 'output', 'default': 'screen', 'description': 'pipe node output [screen|log]'}, {'name': 'depth_width', 'default': '-1', 'description': 'depth image width'}, {'name': 'depth_height', 'default': '-1', 'description': 'depth image height'}, {'name': 'enable_depth', 'default': 'true', 'description': 'enable depth stream'}, {'name': 'color_width', 'default': '-1', 'description': 'color image width'}, {'name': 'color_height', 'default': '-1', 'description': 'color image height'}, {'name': 'enable_color', 'default': 'true', 'description': 'enable color stream'}, {'name': 'infra_width', 'default': '-1', 'description': 'infra width'}, {'name': 'infra_height', 'default': '-1', 'description': 'infra width'}, {'name': 'enable_infra1', 'default': 'true', 'description': 'enable infra1 stream'}, {'name': 'enable_infra2', 'default': 'true', 'description': 'enable infra2 stream'}, {'name': 'infra_rgb', 'default': 'false', 'description': 'enable infra2 stream'}, {'name': 'fisheye_width', 'default': '-1', 'description': 'fisheye width'}, {'name': 'fisheye_height', 'default': '-1', 'description': 'fisheye width'}, {'name': 'enable_fisheye1', 'default': 'true', 'description': 'enable fisheye1 stream'}, {'name': 'enable_fisheye2', 'default': 'true', 'description': 'enable fisheye2 stream'}, {'name': 'confidence_width', 'default': '-1', 'description': 'depth image width'}, {'name': 'confidence_height', 'default': '-1', 'description': 'depth image height'}, {'name': 'enable_confidence', 'default': 'true', 'description': 'enable depth stream'}, {'name': 'fisheye_fps', 'default': '-1.', 'description': ''}, {'name': 'depth_fps', 'default': '-1.', 'description': ''}, {'name': 'confidence_fps', 'default': '-1.', 'description': ''}, {'name': 'infra_fps', 'default': '-1.', 'description': ''}, {'name': 'color_fps', 'default': '-1.', 'description': ''}, {'name': 'gyro_fps', 'default': '-1.', 'description': ''}, {'name': 'accel_fps', 'default': '-1.', 'description': ''}, {'name': 'color_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'confidence_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'depth_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'fisheye_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'infra_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'pointcloud_qos', 'default': 'SYSTEM_DEFAULT', 'description': 'QoS profile name'}, {'name': 'enable_gyro', 'default': 'false', 'description': ''}, {'name': 'enable_accel', 'default': 'false', 'description': ''}, {'name': 'pointcloud_texture_stream', 'default': 'RS2_STREAM_COLOR', 'description': 'testure stream for pointcloud'}, {'name': 'pointcloud_texture_index', 'default': '0', 'description': 'testure stream index for pointcloud'}, {'name': 'enable_sync', 'default': 'false', 'description': ''}, {'name': 'align_depth', 'default': 'false', 'description': ''}, {'name': 'filters', 'default': "''", 'description': ''}, {'name': 'clip_distance', 'default': '-2.', 'description': ''}, {'name': 'linear_accel_cov', 'default': '0.01', 'description': ''}, {'name': 'initial_reset', 'default': 'false', 'description': ''}, {'name': 'allow_no_texture_points', 'default': 'false', 'description': ''}, {'name': 'ordered_pc', 'default': 'false', 'description': ''}, {'name': 'calib_odom_file', 'default': "''", 'description': "''"}, {'name': 'topic_odom_in', 'default': "''", 'description': 'topic for T265 wheel odometry'}, {'name': 'tf_publish_rate', 'default': '0.0', 'description': 'Rate of publishing static_tf'}, {'name': 'diagnostics_period', 'default': '0.0', 'description': 'Rate of publishing diagnostics. 0=Disabled'}, {'name': 'rosbag_filename', 'default': "''", 'description': 'A realsense bagfile to run from as a device'}, {'name': 'temporal.holes_fill', 'default': '0', 'description': 'Persistency mode'}, {'name': 'stereo_module.exposure.1', 'default': '7500', 'description': 'Initial value for hdr_merge filter'}, {'name': 'stereo_module.gain.1', 'default': '16', 'description': 'Initial value for hdr_merge filter'}, {'name': 'stereo_module.exposure.2', 'default': '1', 'description': 'Initial value for hdr_merge filter'}, {'name': 'stereo_module.gain.2', 'default': '16', 'description': 'Initial value for hdr_merge filter'}, {'name': 'wait_for_device_timeout', 'default': '-1.', 'description': 'Timeout for waiting for device to connect (Seconds)'}, {'name': 'reconnect_timeout', 'default': '6.', 'description': 'Timeout(seconds) between consequtive reconnection attempts'}, ] def declare_configurable_parameters(parameters): return [ DeclareLaunchArgument(param['name'], default_value=param['default'], description=param['description']) for param in parameters ] def set_configurable_parameters(parameters): return dict([(param['name'], LaunchConfiguration(param['name'])) for param in parameters]) def generate_launch_description(): """Launch realsense2_camera node.""" node_configurable_parameters = declare_configurable_parameters( configurable_parameters) node_configurable_parameters_dict = set_configurable_parameters( configurable_parameters) config_file_path = os.path.join( get_package_share_directory('robot_sensors'), 'config', 'handeye_vision_sensors_config.yaml') config_file_path handeye_vision_sensors_node = launch_ros.actions.Node( package='realsense2_camera', namespace=LaunchConfiguration('camera_name'), name=LaunchConfiguration('camera_name'), executable='realsense2_camera_node', parameters=[node_configurable_parameters_dict], output='screen', emulate_tty=True, ) ld = LaunchDescription() # Declare the launch options. for node_configurable_parameter in node_configurable_parameters: ld.add_action(node_configurable_parameter) ld.add_action(handeye_vision_sensors_node) return ld
-
我想尝试以下几点:
(1)把这些变量、node都用ld.add_action()
的方式去实现,原来是return里面然后在[]里面一个一个加的,感觉用add的方式看起来更灵活一点,所以就想尝试一下上面的方法
(2)github代码中的思路应该是声明了一堆变量,然后把这些变量赋了默认值,在parameter里面,传入了这些变量,又传了一个配置文件(这两个地方有些变量是重复的,请问这个值会选哪个?)
(3)然后我就想把GitHub中使用的这个d435i.yaml
放到我自己ros pkg下的config目录下,但是把这个文件所在的路径传给parameter的时候,好像识别不了?
(4)最后一个问题是,可以把上面这一堆声明的变量和那个配置文件,写成一个配置文件吗? -
@renpei 可以放配置文件,但记得已经要install
Python:
(os.path.join('share', package_name, 'config'), glob('config/**')),
C++:
install(DIRECTORY config DESTINATION share/${PROJECT_NAME})
-
@小鱼 多谢鱼总,确实忽略了这个地方,大意了;不过对于上面的第二点和第四点还是比较困惑,鱼总之前有经验吗?
-
@renpei 4->肯定可以,2->具体要看源码了
-