尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Webots 控制器开发:在 Visual Studio、CMake、Qt Creator 与 PyCharm 中配置与调试

Webots 控制器开发:在 Visual Studio、CMake、Qt Creator 与 PyCharm 中配置与调试 科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载本文将系统讲解如何在 Webots 机器人仿真器中使用自己熟悉的 IDEVisual Studio、CMake、Qt Creator、PyCharm 等完成机器人控制器的编写、编译、运行与调试。通过遵循 Webots 统一的控制器构建规则并完成对应的头文件、链接库与环境变量配置读者将掌握把任意 Webots 示例控制器迁移到目标 IDE并接入断点调试与外部控制器启动的完整实战方案。为什么可以用 IDE 开发 Webots 控制器Webots 控制器的本质是一个独立的可执行程序或解释型脚本它与 Webots 仿真进程通过控制器库libController / libCppController进行通信。因此原则上 Webots 可以与任何 IDE 配合来创建、构建和调试机器人控制器关键只在于把 IDE 正确配置为遵循 Webots 控制器的构建规则。需要逐一为每个操作系统上的每种 IDE 编写文档难以长期维护所以官方只详细记录了其中的一部分Visual Studio、CMake、Qt Creator、PyCharm它们足以作为其他 IDE 配置的参考模板。必须遵守的两条构建规则目标可执行文件的命名与位置可执行文件必须与控制器目录同名且严格位于以下路径$WEBOTS_PROJECT/controllers/$(CONTROLLER_NAME)/$(CONTROLLER_NAME)$(EXE_EXTENSION)链接 Webots 控制器库可执行文件必须使用 Webots 控制器库进行编译、链接和运行因此需要相应地设置一系列路径和/或环境变量。各语言所需库与头文件按语言区分需要加入 IDE 项目的库文件与包含目录如下语言库libraries包含目录includesC$(WEBOTS_HOME)/lib/controller/$(SL_PREFIX)Controller$(SL_SUFFIX)$(WEBOTS_HOME)/include/controller/cC$(WEBOTS_HOME)/lib/controller/$(SL_PREFIX)Controller$(SL_SUFFIX)、$(WEBOTS_HOME)/lib/controller/$(SL_PREFIX)CppController$(SL_SUFFIX)$(WEBOTS_HOME)/include/controller/cppJava$(WEBOTS_HOME)/lib/controller/java/Controller.jar—Python不适用Python 为解释型语言无需链接库—变量图例WEBOTS_HOMEWebots 的安装路径。WEBOTS_PROJECT你的 Webots 项目路径。CONTROLLER_NAME你的控制器名称。EXE_EXTENSION可执行文件后缀。C/CWindows 上为.exe其他操作系统上为空字符串。Python.py。Java.class或.jar。SL_PREFIX共享库前缀Linux 或 macOS 上为libWindows 上为空字符串。SL_SUFFIX共享库后缀Linux 上为.somacOS 上为.dylibWindows 上为.dll。PYTHON_VERSION你的 Python 版本号去点拼接如310、39、38等。编译器工具链兼容性警告部分 IDE 自带解释器或编译工具链可能与 Webots 预编译的控制器库不兼容此时 IDE 集成会复杂得多。典型例子是Visual Studio C 编译器与 Webots 预编译 C 库所用的 MinGW gcc 编译器不兼容因此 Visual Studio 需要专门的配置步骤见下文。在仓库中验证控制器库的真实结构在动手配置 IDE 之前可以从本仓库源码出发确认上述路径的真实结构避免配置时找不到头文件或库C API 头文件位于 include/controller/c/webots包含accelerometer.h、camera.h、motor.h、supervisor.h等扁平的 C 函数声明可同时供 C 与 C 控制器使用。C API 头文件位于 include/controller/cpp/webots包含Accelerometer.hpp、Camera.hpp、Compass.hpp、Motor.hpp等类与方法的封装。C API 的接口实现wrapper即 C API 与 C API 之间的桥接层位于 src/controller/cpp如Accelerometer.cpp、Camera.cpp、Compass.cpp等。这一点在 Visual Studio 手动配置 C API 时非常关键见下文。Python API 位于 lib/controller/python/controller包含robot.py、supervisor.py、motor.py等模块以及wb.py底层绑定另有vehicle/子目录提供车辆库扩展。MATLAB API 位于 lib/controller/matlab。Visual StudioWindowsMicrosoft Visual Studio 是 Windows 平台上 C/C 的集成开发环境可作为 Webots 内置 Makefile 与 gccMinGW编译器的替代方案用于使用 Webots C API 或 C API 开发控制器。重要开发者必须在 C API 与 C API 之间二选一两者不能在同一个控制器代码中混用。C API 由包含扁平 C 函数的.h文件组成可用于 C 或 C 控制器C API 由包含 C 类与方法的.hpp文件组成仅可用于 C 控制器。原则上Webots 发行版中的任何 C/C 控制器都可以改造成 Visual Studio 项目。通过「新建机器人控制器」自动生成项目在 Windows 上选择 C 或 C 语言后File / New / New Robot Controller...菜单会提供 Visual Studio 选项Webots 会自动为你创建 Visual Studio 项目免去下述手动配置。此功能要求你在系统设置中定义环境变量WEBOTS_HOME指向 Webots 安装目录典型值为C:\Program Files\Webots或C:\Users\MyUsername\AppData\Local\Programs\Webots。手动创建并配置 Visual Studio 项目以下流程以 Visual Studio 2008 Express 为例最终生成的.exe文件由 Webots 启动。如果你希望由 Visual Studio 直接启动外部控制器可参考 外部机器人控制器运行指南 中的「单仿真 单本地外部控制器」章节。将 Webots 发行版中的一个项目复制到你的「Documents」文件夹或使用File / New / New Project Directory...创建空项目目录。无论哪种方式项目目录都必须包含controllers与worlds两个子目录。启动 Visual Studio选择File / New / Project...并按如下设置Project typeGeneralTemplateEmpty ProjectNameMyController示例LocationC:\Users\MyName\Documents\MyProject\controllers示例其中MyController是新建或已存在的控制器目录名Location必须指向项目目录的controllers子目录。务必勾选Place solution and project in the same directory复选框。向项目添加 C 或 C 源文件选择Project / Add Existing Item或Project / Add New Item / C File (.cpp)。后者可以直接粘贴 Webots 发行版中某个 C/C 示例的内容。如果从 Webots 示例复制了 C 代码强烈建议把源文件扩展名从.c改为.cpp。原因是 Webots 示例面向 gcc 编译器编写其 C 语言版本比 Visual Studio 更现代改成.cpp会让 Visual Studio 以 C 模式/TP编译对 gcc 风格代码更宽容。否则可能遇到类似报错MyController.c(24): error C2275: WbDeviceTag : illegal use of this type as an expression MyController.c(24): error C2146: syntax error : missing ; before identifier ir0 ...现在配置项目属性选择Project / Properties在Property Pages的Configuration Properties中填写C/C General Additional Include DirectoriesC:\Program Files\Webots\include\controller\c告诉 Visual Studio 到哪里找 C API 的.h文件。Visual Studio 默认把.exe放在Debug或Release子目录但 Webots 要求.exe直接位于MyController目录根部即MyProject\controllers\MyController\MyController.exe。因此需要配置链接器输出Linker General Output File$(ProjectName).exe然后让 Visual Studio 使用Controller.lib导入库Linker Input Additional DependenciesController.libLinker General Additional Library DirectoriesC:\Program Files\Webots\lib\controller这里的Controller.lib用于链接到Controller.dll控制器必须通过该 DLL 与 Webots 通信。若使用 C API直接跳到步骤 6若使用 C API继续以下配置在Property Pages的Configuration Properties中同时加入.hpp路径C/C General Additional Include DirectoriesC:\Program Files\Webots\include\controller\c C:\Program Files\Webots\include\controller\cpp然后把 Webots C 包装wrapper源文件加入项目。这些.cpp文件实现了 C API 与 C API 之间的接口。操作方式在Solution Explorer中对Sources Files文件夹右键选择Add / New Filter创建NewFilter子文件夹再右键NewFilter选择Add / Existing Item...在文件对话框中进入C:\Program Files\Webots\src\controller\cpp目录选中该目录下**所有.cpp文件不要选其他文件**并点击Add即可把Accelerometer.cpp、Camera.cpp、Compass.cpp等源文件加入项目。这些文件与仓库中的 src/controller/cpp 目录一一对应。使用Build / Build MyController菜单或F7键构建控制器应生成MyProject\controllers\MyController\MyController.exe。切换到 Webots 测试该.exe控制器启动 Webots在Scene tree中展开机器人节点检查controller字段是否为controller MyController。若不是点击...省略号按钮打开选择对话框选中MyController然后点击 Webots 主窗口的Save保存最后点击Run启动仿真此时仿真即使用你的 Visual Studio 控制器。若要在 Visual Studio 中调试控制器可以将调试器附加到正在运行的控制器进程先在 Webots 中点击Pause暂停、再点击Reload重新加载然后在 Visual Studio 中使用Debug / Attach to Process...菜单在对话框中选择MyController.exe_webots进程。此时即可在控制器代码中设置断点和监视watch。回到 Webots 点击Run恢复仿真控制器会在命中断点处暂停。链接 Webots 的其他 C/C 库Webots 还包含多个基于libController或libCppController的 C/C 库例如车辆库vehicle libraries、DARwIn-OP 库、youBot 库等。预编译的 C 库随附对应的 Visual Studio.lib文件即.dll的链接文件方便直接集成到 Visual Studio 项目。它们位于生成.dll文件的库源码同目录下。注意所选架构32 位或 64 位应与 Visual Studio 解决方案平台以及Controller.lib的路径保持一致。C 库没有 Visual Studio 预编译版本因为 Webots 内嵌的 gcc 工具链与 Visual Studio 不兼容。要在项目中使用 C 库必须直接编译其源文件方式与上面编译libCppController完全一致。例如添加C 车辆库在Linker Input Additional Dependencies中加入预编译 C 库car.libdriver.lib通过Add / New Filter与Add / Existing Item...将以下 C 源文件加入项目$(WEBOTS_HOME)/projects/default/libraries/vehicle/cpp/car/src/*.cpp$(WEBOTS_HOME)/projects/default/libraries/vehicle/cpp/driver/src/*.cpp如果头文件不在$(WEBOTS_HOME)/include/controller/c或$(WEBOTS_HOME)/include/controller/cpp中车辆库正是这种情况则需在C/C General Additional Include Directories中补充相应包含目录。仓库中的对应源码位于 projects/default/libraries/vehicle/cpp/car/src含Car.cpp与 projects/default/libraries/vehicle/cpp/driver/src含Driver.cpp可作为核对路径的参考。CMakeCMake 是一个跨平台、免费开源的构建流程管理工具它通过生成器generator产出原生构建环境如 Xcode、CodeBlocks、Sublime Text 2 或 Eclipse 项目实际构建仍在这些环境中进行。对于 Visual Studio 目标优先采用上文所述的 Visual Studio 原生方案。你可以把以下CMakeLists.txt模板复制到控制器目录模板仅作参考可根据你的 CMake 目标调整cmake_minimum_required(VERSION 3.0) # Setup the project. # Its name is defined to be the controller directory name. get_filename_component(PROJECT ${CMAKE_SOURCE_DIR} NAME) project(${PROJECT}) # Get C or C sources in the current directory (only). file(GLOB C_SOURCES *.c) file(GLOB CPP_SOURCES *.cpp) set(SOURCES ${C_SOURCES} ${CPP_SOURCES}) # Set the Webots home path (change it according to your installation method) set(WEBOTS_HOME /usr/local/webots) #set(WEBOTS_HOME /snap/webots/current/usr/share/webots) # Link with the Webots controller library. link_directories($ENV{WEBOTS_HOME}/lib/controller) set (LIBRARIES m ${CMAKE_SHARED_LIBRARY_PREFIX}Controller${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_SHARED_LIBRARY_PREFIX}CppController${CMAKE_SHARED_LIBRARY_SUFFIX}) include_directories($ENV{WEBOTS_HOME}/include/controller/c $ENV{WEBOTS_HOME}/include/controller/cpp) # Setup the target executable. add_executable(${PROJECT} ${SOURCES}) target_link_libraries(${PROJECT} ${LIBRARIES}) # Copy the target executable at the right location. add_custom_command(TARGET ${PROJECT} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${PROJECT} ${CMAKE_SOURCE_DIR} )随后创建build目录、生成原生项目并在目标 IDE 中构建。命令行示例# export WEBOTS_HOME... cd $WEBOTS_PROJECT/controllers/$CONTROLLER_NAME # edit CMakeLists.txt mkdir build cd build cmake .. -G Unix Makefiles make该模板的关键点项目名取自控制器目录名通过CMAKE_SHARED_LIBRARY_PREFIX/SUFFIX自动适配各平台共享库前缀/后缀对应前文图例中的SL_PREFIX/SL_SUFFIXPOST_BUILD自定义命令把可执行文件复制回控制器源码目录正好满足「可执行文件必须位于控制器目录根部」的构建规则。Qt CreatorQt Creator 是跨平台 IDE主要支持 C 语言。将下面的qmake.pro模板复制到控制器目录并在 Qt Creator 中打开即可# Setup global paths. The WEBOTS_HOME environment variable should be setup. WEBOTS_HOME_PATH $$(WEBOTS_HOME) CONTROLLER_PATH $$PWD CONTROLLER_NAME $$basename(CONTROLLER_PATH) # Get C or C sources in the current directory (only). SOURCES $$files(*.c, true) SOURCES $$files(*.cpp, true) HEADERS $$files(*.h, true) # Setup the project. # Its name is defined to be the controller directory name. TARGET $$CONTROLLER_NAME DESTDIR $$CONTROLLER_PATH QMAKE_TARGET $$CONTROLLER_NAME # Do not link with the Qt libraries :-) CONFIG - qt # Link with the Webots controller library. INCLUDEPATH $$WEBOTS_HOME_PATH/include/controller/c $$WEBOTS_HOME_PATH/include/controller/cpp LIBS -L$$WEBOTS_HOME_PATH/lib/controller -lController -lCppController win32 { CONFIG console } macx { CONFIG - app_bundle CONFIG sdk_no_version_check }要点解析DESTDIR $$CONTROLLER_PATH使生成的可执行文件直接落在控制器目录根部满足构建规则一CONFIG - qt明确不链接 Qt 库因为 Webots 控制器是独立于 Qt 的普通可执行程序LIBS通过-lController -lCppController链接两个控制器库INCLUDEPATH同时覆盖 C 与 C 头文件。PyCharmPyCharm 是专门面向 Python 的跨平台 IDE提供代码分析、图形化调试器、内置单元测试工具以及版本控制系统集成。它可作为 Webots 内置 Python 编辑器的替代方案。虽然本章以 PyCharm 为例其他 Python IDE 也可按类似方式配置。创建 PyCharm 项目启动 PyCharm 后点击Open选择要修改的 Webots 控制器目录。这里以driver示例控制器为例。要使用 Webots Python API需要将其加入项目通过File / Settings菜单打开Settings窗口选择Project / Project Structure标签使用Add Content Root按钮把WEBOTS_HOME/lib/controller/python38文件夹或对应你 Python 版本的目录加入路径。仓库内的 Python API 实际位于 lib/controller/python/controller其顶层为controller与vehicle两个包IDE 中通常直接引用WEBOTS_HOME/lib/controller下的具体版本目录如python38。Webots Python API 依赖 Webots C API因此还需要把 Webots 的lib目录加入运行路径。通过Run / Edit Configurations菜单打开Run Configurations窗口点击按钮选择Python将Script path指向你的 Python 文件并在Environment variables中按操作系统定义路径变量按实际安装目录调整LinuxLD_LIBRARY_PATH/usr/local/webots/lib/controllerWindowsPathC:\Program Files\Webots\lib\controller\;C:\Program Files\Webots\msys64\mingw64\bin\;C:\Program Files\Webots\msys64\mingw64\bin\cpp注意controller\和bin\结尾的反斜杠至关重要缺失会导致配置无效。macOSDYLD_LIBRARY_PATH/Applications/Webots.app/lib/controller如果使用其他库如车辆库、DARwIn-OP 库等还应把对应共享库的路径一并加入。运行控制器配置好 PyCharm 项目后启动 Webots 并打开目标世界。为了让 PyCharm 代替 Webots 启动控制器需要把机器人的控制器设置为extern并按 外部机器人控制器运行指南 中的「环境变量」章节设置环境变量。之后即可在 PyCharm 的Run菜单中启动控制器如果尚未运行请先在 Webots 中启动仿真。需要说明的是设置为extern后Webots 本身不会自动启动该控制器机器人表现为未受控状态一旦你在 PyCharm 中手动启动控制器进程它会主动连接并控制该机器人。若robot.synchronization字段为TRUEWebots 会等待外部控制器启动后再推进仿真。这一机制同样适用于 Visual Studio 以外部进程方式调试 C/C 控制器以及 gdb、命令行等任意启动方式详细用法可参阅 外部机器人控制器运行指南。配置要点速查配置项说明WEBOTS_HOMEWebots 安装根目录Visual Studio、CMake、Qt Creator 与 PyCharm 配置均依赖该环境变量。头文件路径C API$(WEBOTS_HOME)/include/controller/cC API$(WEBOTS_HOME)/include/controller/cpp。链接库路径$(WEBOTS_HOME)/lib/controllerC 与 C 分别链接Controller与CppController平台前缀/后缀见前文图例。可执行文件位置必须位于$WEBOTS_PROJECT/controllers/$(CONTROLLER_NAME)/$(CONTROLLER_NAME)$(EXE_EXTENSION)注意 Visual Studio 默认输出到 Debug/Release 子目录需要显式改回项目根目录。架构匹配Visual Studio 的解决方案平台32/64 位必须与Controller.lib的架构一致。编译器兼容性Webots 预编译 C 库基于 MinGW gcc与 MSVC 不兼容Visual Studio 需直接编译src/controller/cpp下的 wrapper 源码。调试方式C/C 控制器可在 IDE 中Attach to Process附加到xxx.exe_webots进程Python 控制器通过extern PyCharm 的 Run/Debug 直接调试。延伸阅读控制器编程控制器生命周期与controller字段的完整说明。外部机器人控制器运行指南extern控制器的启动器、命令行选项与多种连接场景。使用 C 语言 与 使用 C两种本地语言的 API 使用入门。使用 PythonPython 控制器的安装与运行环境要求。调试 C/C 控制器命令行调试工具与 IDE 调试器的更多细节。赞分享科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载相关推荐openage 引擎开发环境配置实战在 Qt Creator 与 Visual Studio Code 中构建、运行与调试openage 引擎开发环境配置实战在 Qt Creator 与 Visual Studio Code 中构建、运行与调试 导读 openage 是一个以 C游戏开发图形学架构解析基于RAG技术的多数据库智能查询引擎技术实现架构解析基于RAG技术的多数据库智能查询引擎技术实现 在当今数据驱动的企业环境中业务用户与数据分析师之间存在着显著的技术鸿沟。业务人员需要快速获取数据洞察人工智能AI AgentRAG数据库后端数据可视化Mumble 构建指南在 IDE 中集成 CMake 项目Visual Studio / Qt Creator / VS CodeMumble 构建指南在 IDE 中集成 CMake 项目Visual Studio / Qt Creator / VS Code 本文面向希望在 Vis音视频即时通讯上一篇Reinforcement-Learning部署指南如何将训练好的模型应用到实际项目中下一篇Godot AnimationNodeStateMachineTransition 状态机过渡详解从属性配置到源码级实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表