Ros发送网络请求代码和配置问题如何写?

我正在学习ros机器人操作系统。目前我想要使用ros编写c++代码实现对于ros接收到的消息进行网络请求形式的转发,将消息以http请求的形式转发到特定的API接口中。
目前我想使用的是curl这个第三方库实现网络请求。
我目前的进度:
1.完成了部分代码的编写。
2.尝试了修改cmake文件,但是cmake编译报错。

CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "CURL" with any of
  the following names:
    CURLConfig.cmake
    curl-config.cmake

我的CMakeList.txt配置文件如下(heartService是我的相关代码存放的cpp文件):

include_directories(
# include
  ${catkin_INCLUDE_DIRS},
  ${CURL_INCLUDE_DIRS}
)
add_executable("heartService"  src/heartService.cpp)
target_link_libraries("heartService" ${CURL_LIBRARIES})

现在的问题是:

  1. 我该如何编写这个代码文件,让ros中写的c++代码能够成功使用curl这个库文件?
  2. 我的配置文件应该如何编写?
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要确保你正确安装了libcurl库。可以通过以下命令来安装libcurl库:

    sudo apt-get install libcurl4-openssl-dev
    

    接下来,我们来解决你的问题:

    问题1: 如何编写代码文件以使用libcurl库?

    你可以按照以下步骤编写代码文件:

    1. 导入必要的头文件,包括<curl/curl.h>,这将提供libcurl库的功能。

    cpp #include <curl/curl.h>

    1. 在你的代码中定义一个回调函数,用于处理libcurl返回的数据。

      cpp size_t writeCallback(void* contents, size_t size, size_t nmemb, std::string* response) { size_t totalSize = size * nmemb; response->append((char*)contents, totalSize); return totalSize; }

    2. 在你的主函数中准备libcurl的处理。

      ```cpp int main() { // 初始化libcurl curl_global_init(CURL_GLOBAL_ALL);

      // 创建一个CURL对象
      CURL* curl = curl_easy_init();
      if (!curl) {
          std::cout << "Failed to initialize libcurl" << std::endl;
          return 1;
      }
      
      // 设置要发送的HTTP请求的URL
      curl_easy_setopt(curl, CURLOPT_URL, "YOUR_API_URL");
      
      // 设置回调函数
      std::string response;
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
      
      // 执行请求
      CURLcode res = curl_easy_perform(curl);
      if (res != CURLE_OK) {
          std::cout << "Failed to perform curl request: " << curl_easy_strerror(res) << std::endl;
      } else {
          std::cout << "Response: " << response << std::endl;
      }
      
      // 清理资源
      curl_easy_cleanup(curl);
      curl_global_cleanup();
      
      return 0;
      

      } ```

    3. 编译和运行你的代码。

    问题2: 如何改进CMakeLists.txt文件的配置?

    你可以按照以下步骤更改你的CMakeLists.txt文件:

    1. 添加find_package命令来查找CURL包。

    cmake find_package(CURL REQUIRED)

    1. 添加include_directories命令以包含libcurl的头文件。

    cmake include_directories(${catkin_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS})

    1. 添加target_link_libraries命令以链接libcurl库。

    cmake target_link_libraries(heartService ${catkin_LIBRARIES} ${CURL_LIBRARIES})

    重新运行CMake命令,然后重新编译你的工程。

    catkin_make
    

    问题3: 其他问题

    如果你还有其他问题,请提供更具体的细节和错误信息,我将尽力帮助你解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^