一、操作环境
操作系统:Windows 11
ROS2版本:Humble(如果是Windows10请安装foxy版本)
Qt版本:Qt5.14.2
编译工具:colcon
二、配置过程
根据ROS2官网以及其他教程总结,所需的资料包如下,也可以自己去官网下载,资料包链接:
ROS2资料包https://pan.baidu.com/s/1zjaVdMhAloOv3OtHLoMajg 提取码:KZR4
2.1 安装vs2019
如果不安装Visual studio很可能会编译失败,安装时选择如下即可:
2.2 安装Chocolatey
以管理员身份运行CMD,复制以下命令运行:
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
安装完成后,输入choco,会显示:
2.3在线安装python
choco install -y python --version 3.8.3
安装成功后,输入python,会显示:
按Ctrl+z回车会退出python状态,将python添加到系统环境变量的最上方。
2.4 安装Visual C++ Redistributables
输入命令:
choco install -y vcredist2013 vcredist140
Windows操作系统上运行使用C++编写的应用程序所需的运行时组件。这些组件包含了在运行C++应用程序时所需的库文件和依赖项,如果没有安装,在运行C++程序时可能会出现缺少某些DLL库。
2.5 离线安装OpenSSL
安装 OpenSSL 是因为 ROS 2 依赖于 OpenSSL 来支持安全通信的功能。
双击压缩包中的OpenSSL安装,或者从官网下载安装,不要下载安装带Light或者Win32的版本。装完后将openSSl添加环境变量:
setx /m OPENSSL_CONF "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg"
2.6 安装其他依赖
choco install -y cmake
离线安装 asio、cunit、eigen、tinyxml-usestl tinyxml2、bullet。可从Github下载,或者从以上网盘内提取,输入以下命令:
choco install -y -s F:\roswininstall asio cunit eigen tinyxml-usestl tinyxml2 bullet
其中F:\roswininstall 为自己电脑放置文件的路径。
将xmllint文件夹解压后放置在C盘,可从网盘中提取,或者从ROS2官网推荐的地址区下载ROS2官网推荐的地址https://docs.ros.org/en/rolling/Installation/Windows-Install-Binary.html#id10
将C:\xmllint\bin
添加到环境变量中
升级pip和setuptools:
python -m pip install -U pip setuptools==59.6.0
安装python其他依赖:
python -m pip install -U catkin_pkg cryptography empy importlib-metadata lark==1.1.1 lxml matplotlib netifaces numpy opencv-python PyQt5 pillow psutil pycairo pydot pyparsing==2.4.7 pyyaml rosdistro
安装成功后会出现如下:
如果输入指令后没反应,请关掉CMD并重启,确保python正常运行。
2.7 离线安装ROS2
可从网盘中提取ROS2安装包,或者从其他地方下载,win10安装foxy版本,win11安装humble版本。离线包下载地址https://ros-win.visualstudio.com/ros-win/_artifacts/feed/public
输入以下命令,其中F:\ROS2是离线包存放的地址。
choco source add -n=ros-win -s=“F:\ROS2” #离线包本地存放地址
choco source remove -n=chocolatey
choco source add -n=chocolatey -s"https://chocolatey.org/api/v2/" --priority=1
choco upgrade chocolatey-windowsupdate.extension
更新成功后,输入以下命令开始安装humble版本:
choco upgrade ros-humble-desktop --pre -y --execution-timeout=0
安装完后测试ROS2,设置环境变量:
call C:\opt\ros\humble\x64\local_setup.bat
输入指令运行小海龟:
ros2 run turtlesim turtlesim_node
出现如下界面说明ROS2安装成功。
三、PyCharm配置
①、将工程项目的python解释器改为ros2下的python解释器。
②、选定Python解释器
③、点击添加路径按钮
④、将添加对应的路径
配置好后运行python发布话题的程序,在CMD终端可接收到消息:
打印helloworld的python例程:
import rclpy
from std_msgs.msg import String
def main(args=None):
rclpy.init(args=args)
node = rclpy.create_node('minimal_publisher')
publisher = node.create_publisher(String, 'topic', 10)
msg = String()
i = 0
def timer_callback():
nonlocal i
msg.data = 'Hello World: %d' % i
i += 1
node.get_logger().info('Publishing: "%s"' % msg.data)
publisher.publish(msg)
timer_period = 0.5 # seconds
timer = node.create_timer(timer_period, timer_callback)
rclpy.spin(node)
# Destroy the timer attached to the node explicitly
# (optional - otherwise it will be done automatically
# when the garbage collector destroys the node object)
node.destroy_timer(timer)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
四、编译运行C++
4.1 编译C++运行过程
确保已经安装以上的ROS2环境以及Qt5.14.2,并写好CMakeLists.txt文件,该文件的编写可参考另一篇博客:
打开x64 Native Tools Command Prompt for VS 2019
使用以下call命令设置环境变量,类似于Ubuntu中的source命令:
call C:\opt\ros\humble\x64\local_setup.bat
将环境切换到C++程序的工程目录下:
使用以下命令对工程进行编译:
colcon build
编译成功后切换到生成的install目录下,并重新call环境:
使用ros2的命令即可运行编译后的程序:
五、问题记录
1、编译c++时Could not find a package configuration file provided by "Qt5SerialPort"
如果使用到Qt的串口,编译报错时需要设置Qt5SerialPort的目录,在CmakeList.txt中修改如下:
2、运行时提示:无法定位程序输入点,Qt动态链接库问题
解决方法:修改电脑中的环境变量:
注意msvc2017_64要放在mingw73_64的上面,才能保证使用的是msvc2017_64;
只需添加如上Qt的环境变量,多余的都要删除:
3、如果用到Qt中的SQL数据库,运行时提示SqlDatabase:QSQLITE driver not loaded
SqlDatabase:available drivers:QSQLITE QODBC QODBC3 QPSQL QPSQL7 open test.db fail等问题:
出现以上问题报错的原因可能是windows10下foxy版本的ROS2并不兼容Qt的SQL数据库,将电脑升级到windows11并安装对应的humble版本的ROS2即可运行。
4、如果程序运行不起来,或者运行小乌龟ros2 run turtlesim turtlesim_node时提示“无法定位程序输入点 inflateValidate于动态链接库 call C:\opt\ros\humble\x64\bin\libpng16.dll上”:
解决方式:在电脑的系统环境变量上C:\opt\ros\humble\x64\bin后面加一个\,改成如下后,重启终端即可运行。