热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows上使用roscpp

原链接:https:community.bwbot.orgtopic674开发测试平台:小强机器人原理说明基本想法就是把roscpp库编译成dll或

原链接:https://community.bwbot.org/topic/674
开发测试平台:小强机器人

原理说明

基本想法就是把roscpp库编译成dll或者lib的形式,然后项目通过引用对应的链接库文件使用roscpp的功能。
roscpp的代码本身是支持在Windows平台编译的。但是这个库依赖于其他很多ros库。有些库不支持在Windows平台上编译,有些库在Windows平台上编译非常麻烦。所以我们要对相关文件进行修改,删除不必要的依赖就可以编译了。下面是具体的编译方法。

如果你不想自己编译相关的库,想要直接使用,那么可以跳到最后,看创建项目使用roscpp的内容。

安装boost

下载boost库源代码 下载链接
注意版本,版本应该是越新越好。我使用的是1.66版本。

解压后以管理员身份开启一个powershell窗口,cd到boost源代码目录。然后执行下面指令

.\bootstrap.bat
.\b2.exe variant=release threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8
.\b2.exe variant=debug threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8

这样程序会在C:/boost文件夹内安装boost库

安装CMake

下载相关安装包 下载地址

安装完成即可,注意cmake的路径也要添加到系统环境变量里面。

安装catkin_pkg

如果系统没有安装Python2.7需要先安装Python2.7。并且设置好环境变量把python添加到Path里面去

以管理员权限打开一个powershell窗口,然后执行下面的指令

pip install catkin_pkg

准备ros工作空间

创建一个文件夹名称随意,这里取为catkin_ws,作为caktin的工作空间。
执行下面指令下载相关源代码

cd [到你的工作空间]
mkdir src
cd src
git clone https://github.com/ros/catkin
git clone https://github.com/ros/gencpp
git clone https://github.com/jsk-ros-pkg/geneus
git clone https://github.com/ros/genlisp
git clone https://github.com/ros/genmsg
git clone https://github.com/RethinkRobotics-opensource/gennodejs
git clone https://github.com/ros/genpy
git clone https://github.com/ros/message_generation
git clone https://github.com/ros/message_runtime
git clone https://github.com/BluewhaleRobot/rosconsole
git clone https://github.com/BluewhaleRobot/roscpp_core
git clone https://github.com/BluewhaleRobot/ros_comm
git clone https://github.com/ros/ros_comm_msgs
git clone https://github.com/ros/std_msgs

编译安装

cd [到你的工作空间]
python .\src\catkin\bin\catkin_make
# 此时会提示错误,但是没有关系。这个程序会帮我们创建很多相关文件
cd build
# 把build文件夹内容删除后执行下面的指令
cmake E:\workspace\catkin_ws\src -DCATKIN_DEVEL_PREFIX=E:\workspace\catkin_ws\devel -DCMAKE_INSTALL_PREFIX=E:\workspace\catkin_ws\install -G "Visual Studio 15 2017 Win64" -DCATKIN_ENABLE_TESTING=OFF -DBoost_USE_STATIC_LIBS=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=OFF
# 其中的E:\workspace\catkin_ws\src是我的工作空间相关路径,你要换成自己的对应路径。Visual Studio 15 2017 Win64 为Visual Studio的版本信息,根据自己的Visual Studio版本进行设置。这个指令可以没有错误正常执行。

正常应该会有下面这样的输出

...
-- ==> add_subdirectory(ros_comm/clients/roscpp)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Boost version: 1.66.0
-- Found the following Boost libraries:
-- chrono
-- filesystem
-- signals
-- system
-- roscpp: 1 messages, 3 services
-- Configuring done
-- Generating done
-- Build files have been written to: E:/workspace/catkin_ws/build

然后我们就可以开始编译了。还是在build文件夹内,执行下面的指令。等待编译完成就可以了。

cmake --build . --config Debug --target INSTALL

编译完成后,我们可以在工作空间的install 文件夹内找到我们需要的文件。

e1bfef77-4000-45d0-ac05-51af1c956da1-image.png

其中我们要用到的是include文件夹内的内容和lib文件夹的内容。上面的编译方式是生成静态链接库,在windows上对应.lib文件。我们把生成的头文件和静态链接库文件添加到自己的项目依赖里面就可以使用roscpp了。

创建项目使用roscpp库

c552797d-6c00-4bc3-8121-a5cd20b4d511-image.png

在Visual Studio中创建一个新的Windows控制台程序,命名为roscppExample

进入到项目目录然后创建一个include文件夹和lib文件夹

50450419-632b-4354-bbee-fdb84f21f0bf-image.png

把boost的头文件内容和caktin工作空间install里面的头文件内容复制进去
复制完成后的include文件夹内容如下所示

1a3edd10-2b33-40d2-9f1b-4cc54b0ca993-image.png

然后从boost/lib文件夹内复制一下的几个文件到刚才创建的lib文件夹

libboost_filesystem-vc141-mt-gd-x64-1_66.lib
libboost_filesystem-vc141-mt-x64-1_66.lib
libboost_chrono-vc141-mt-gd-x64-1_66.lib
libboost_chrono-vc141-mt-x64-1_66.lib
libboost_date_time-vc141-mt-gd-x64-1_66.lib
libboost_date_time-vc141-mt-x64-1_66.lib
libboost_system-vc141-mt-gd-x64-1_66.lib
libboost_system-vc141-mt-x64-1_66.lib
libboost_thread-vc141-mt-gd-x64-1_66.lib
libboost_thread-vc141-mt-x64-1_66.lib
libboost_regex-vc141-mt-gd-x64-1_66.lib
libboost_regex-vc141-mt-x64-1_66.lib

然后把caktin工作空间install/lib文件夹内的几个.lib文件复制到之前创建的lib文件夹中
现在的lib文件夹如下图所示

86f781f1-a356-4217-9f46-0d8da2ac28e7-image.png

注意上面的库编译的是64位Debug版本。如果需要Release版本对上面cmake的参数进行调整。
设置Visual Studio项目位64 Debug版。

打开项目属性,设置VC++目录

d47a550a-c94b-4228-8aad-1acaa0bd5351-image.png

在包含目录里面添加刚才创建的include目录

5d25965a-d0af-4b2a-b062-4348513a91b0-image.png

同理在库目录里面添加刚才创建的lib文件夹。现在的项目路径如下图所示

c6e03adb-f98a-48d2-9576-2a106820cf91-image.png

打开链接器输入,附加依赖项。添加上lib中文件的文件名

libboost_filesystem-vc141-mt-x64-1_66.lib
libboost_chrono-vc141-mt-x64-1_66.lib
libboost_date_time-vc141-mt-x64-1_66.lib
libboost_system-vc141-mt-x64-1_66.lib
libboost_thread-vc141-mt-x64-1_66.lib
libboost_regex-vc141-mt-x64-1_66.lib
roscpp.lib
roscpp_serialization.lib
cpp_common.lib
rosconsole.lib
rosconsole_backend_interface.lib
rosconsole_print.lib
rostime.lib
xmlrpcpp.lib

aabffcc7-8a94-4ae6-8b88-96f1c1373811-image.png

现在就可以在程序中使用roscpp了。下面是一个简单的发消息的cpp程序。

#include "stdafx.h"
#define WIN32
#include "ros/ros.h"
#include "std_msgs/String.h"
#pragma comment(lib, "Ws2_32.lib")int main(int argc, char **argv)
{std::map<std::string, std::string> params;params.insert(std::pair<std::string, std::string>("__master", "http://192.168.0.32:11311"));params.insert(std::pair<std::string, std::string>("__ip", "192.168.0.8"));ros::init(params, "talker");ros::NodeHandle n;ros::Publisher chatter_pub &#61; n.advertise<std_msgs::String>("chatter", 1000);ros::Rate loop_rate(10);int count &#61; 0;while (ros::ok()){std_msgs::String msg;std::stringstream ss;ss << "hello world " << count;msg.data &#61; ss.str();std::cout << "send message: hello world" << std::endl;chatter_pub.publish(msg);ros::spinOnce();loop_rate.sleep();&#43;&#43;count;}return 0;
}

编译完成就可以执行了。

按F5看一下运行效果

82a084bd-4d61-4d9c-8409-d749d0b66e92-image.png

此时订阅/chatter可以看到输入

b19ff302-44a2-4e9c-b6ec-b4ac1ad02f97-image.png

这个roscppExample项目已经上传至Github。下载完成后用Visual Studio 2017可以直接打开编译运行&#xff0c;不需要安装其他依赖。如果想要在自己的其他项目里面使用roscpp可以把这个项目include和lib对应的添加到自己项目里。


推荐阅读
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了连接库的定义和使用方法。连接库是通过编译生成的dll文件,例如php_mysql.dll。在使用扩展时,需要去掉配置文件中的分号,并通过phpinfo查看是否正确加载了mysql连接库。详细内容请参考链接:https://www.cnblogs.com/xiaobiaomei/p/7654750.html。摘要字数:180字。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
笑看天下
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有