Nano Hash - криптовалюты, майнинг, программирование

Настройка VScode с ROS и автозаполнением

Я изо всех сил пытаюсь настроить VSCode с ROS, чтобы иметь функцию автозаполнения. Я привык использовать VSCode с Qt и OpenCV, и все работало нормально. Например, для OpenCV я просто отредактировал c_cpp_propreties.json следующим образом:

{
"configurations": [
    {
        "name": "Linux",
        "includePath": [
            "${workspaceFolder}/**",
            "/usr/local/include/opencv4/opencv2"
        ],
        "defines": [],
        "compilerPath": "/usr/bin/gcc",
        "cStandard": "gnu11",
        "cppStandard": "gnu++14",
        "intelliSenseMode": "clang-x64"
    }
],
"version": 4

}

Тогда автозаполнение для OpenCV работает нормально (у меня есть расширение C++ IntelliSense). Но потом, как только я пытаюсь указать папку include из ROS в c_cpp_propreties.json, уже ничего не работает, даже автодополнение OpenCV:

{
"configurations": [
    {
        "name": "Linux",
        "includePath": [
            "${workspaceFolder}/**",
            "/usr/local/include/opencv4/opencv2",
            "/opt/ros/melodic/include"
        ],
        "defines": [],
        "compilerPath": "/usr/bin/gcc",
        "cStandard": "gnu11",
        "cppStandard": "gnu++14",
        "intelliSenseMode": "clang-x64"
    }
],
"version": 4

}

Как будто ROS все блокирует. Что я делаю не так? Я указываю, что я нажимаю «Открыть папку» в VSCode и ищу пакет ROS, чтобы загрузить его. Я работаю над Ubuntu 18.04 LTS.


  • У вас есть новости по этому поводу? Я также пытаюсь заставить это работать? Расширение ROS не совсем подходит. 15.07.2020

Ответы:


1

У меня возникла проблема при использовании IntelliSense с ROS. Он просто не будет искать пространство имен ros, что бы я ни делал. Поэтому я подумал об изменении cppStandard (в файле c_cpp_properties.json) на gnu++11 (в любом случае это только для IntelliSense). Он сразу начал работать.

Вот результаты с cppStandard, установленным на gnu++14 введите здесь описание изображения

Вот результаты с cppStandard, установленным на gnu++11 введите здесь описание изображения

Я даже пробовал gnu++17, но это тоже дало ограниченный успех. Похоже, gnu++11 сработало лучше всего.

Я также попробовал то, что Ричард сказал в своем ответе. Он работает без необходимости что-либо менять.

26.10.2020
  • ты волшебник, чувак, честно, это черная магия :P 20.11.2020

  • 2

    Вам нужно сгенерировать compile_commands.json и поместить его в рабочий каталог vscode. Этот файл подскажет vscode linter, где искать. Это необходимо перегенерировать, если вы создаете новые файлы или ваша инструкция компиляции в CMakeLists.txt изменяется (т.е. новые библиотеки)

    Я снял видео на YouTube, чтобы продемонстрировать это.

    Я также ответил на этот вопрос в аналогичном сообщении на Reddit: У кого-нибудь есть Visual Studio? правильно работать с ROS?. Я добавил ответ, который я написал для этого ниже;

    Если вы используете catkin_make, при компиляции

    cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

    После компиляции в папке сборки появится compile_commands.json.

    Если вы используете инструменты catkin, поскольку система сборки отличается, вам нужно будет запустить скрипт после сборки, чтобы объединить отдельные compile_commands.json в один.

    Сценарий см. здесь.

    Затем вы можете перезапустить VScode, и он предложит вам и спросит, хотите ли вы использовать его при запуске. Если он не предложил вам по какой-либо причине,

    В разделе "Дополнительно" пользовательского интерфейса конфигурации вы можете указать путь к файлу compile_commands.json, и расширение будет использовать информацию о компиляции, указанную в этом файле, для настройки IntelliSense.

    В основном шаги таковы:

    1. cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
    2. переместите compile_commands из catkin_ws/build в рабочий каталог vscode, у меня обычно он находится в catkin_ws/src, личное предпочтение
    3. Укажите vscode на ваши команды компиляции.

    Отсюда ROS должен работать правильно.

    Изменить: добавлены шаги из ответа, сделанного в другом сообщении

    15.07.2020
  • Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее. Ответы, которые представляют собой не более чем ссылку, могут быть удалены. 15.07.2020
  • Привет. Если у меня есть, скажем, ros::NodeHandle n;, а затем я хочу, чтобы автозаполнение n. нашло мои n связанные методы, атрибуты и т. д., что мне делать? Я упоминаю, что я использую VScode в Ubuntu, и я установил плагин автозаполнения, а также я установил плагин ROS. На данный момент я получаю только n. -› предложений нет. 28.07.2020
  • Кроме того, что это Point vscode to your compile commands. ? 28.07.2020
  • если вы выполнили шаги, показанные в видео, у вас должно быть автозаполнение до n. 30.07.2020
  • Point vscode to your compile command относится к выполнению you can then restart VScode, and it will prompt you... 30.07.2020

  • 3

    В файле .vscode/c_cpp_properties.json (созданном с помощью расширения VSCode ROS), попробуйте изменить "cppStandard": "gnu++14" на "cppStandard": "c++14".

    ROS использует стандарт C++14, поэтому указание gnu++14 кажется ломать вещи. Это было выведено из этот вопрос.

    По этому поводу существует проблема.

    08.12.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..