鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ROS2通过launch文件启动realsense d435无法读取配置文件

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    ros2 camera
    2
    5
    755
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • R
      五谷鱼粉
      最后由 编辑

      参考官方 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 条回复 最后回复 回复 引用 0
      • R
        五谷鱼粉
        最后由 编辑

        我想尝试以下几点:
        (1)把这些变量、node都用ld.add_action()的方式去实现,原来是return里面然后在[]里面一个一个加的,感觉用add的方式看起来更灵活一点,所以就想尝试一下上面的方法
        (2)github代码中的思路应该是声明了一堆变量,然后把这些变量赋了默认值,在parameter里面,传入了这些变量,又传了一个配置文件(这两个地方有些变量是重复的,请问这个值会选哪个?)
        (3)然后我就想把GitHub中使用的这个d435i.yaml放到我自己ros pkg下的config目录下,但是把这个文件所在的路径传给parameter的时候,好像识别不了?
        (4)最后一个问题是,可以把上面这一堆声明的变量和那个配置文件,写成一个配置文件吗?

        小鱼小 1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @renpei
          最后由 编辑

          @renpei 可以放配置文件,但记得已经要install

          Python:

                  (os.path.join('share', package_name, 'config'), glob('config/**')),
          

          C++:

          install(DIRECTORY config DESTINATION share/${PROJECT_NAME})
          

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          R 1 条回复 最后回复 回复 引用 0
          • R
            五谷鱼粉 @小鱼
            最后由 编辑

            @小鱼 多谢鱼总,确实忽略了这个地方,大意了;不过对于上面的第二点和第四点还是比较困惑,鱼总之前有经验吗?

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @renpei
              最后由 编辑

              @renpei 4->肯定可以,2->具体要看源码了

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              1 条回复 最后回复 回复 引用 0
              • R renpei 将这个主题标记为已解决,在
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS