玩ROS一直是在ubuntu,最近因为各种原因,在windows10上调试ROS2。这一典型的问题是,很多硬件都是没有库文件的支持,国内的很多硬件也大多只支持ROS1。完全不调试源码直接使用各种相关硬件就不太现实了。
先把rplidar a1这个小玩具用起来。
先安装windows下的驱动 ,
https://github.com/Slamtec/rplidar_sdk
找到文件夹下的,
~\rplidar_sdk\tools\cp2102_driver\CP210xVCPInstaller_x64.exe
安装即可。
然后找了一下ROS2的相关库文件,发现有个作者已经做了一些相关工作,源码在这里,
GitHub - allenh1/rplidar_ros
不过我没有调试通过。大约修改了CMakeLists.txt中的两处,然后又把源码中相关的串口位置做了修改,主要修改内容如下,
(1)CMakeLists.txt中
#"${RPLIDAR_SDK_PATH}/src/arch/linux/*.cpp"
"${RPLIDAR_SDK_PATH}/src/arch/win32/*.cpp"
...
# build composition node
add_library(rplidar_composition_node SHARED
src/rplidar_node.cpp
${RPLIDAR_SDK_SRC}
)
target_compile_definitions(rplidar_composition_node PRIVATE RPLIDAR_ROS_DLL=1)
其一是linux修改为win32平台,作者已经有提供windows的代码了;其二是添加预定义: RPLIDAR_ROS_DLL,这个大家只要看一下rplidar_composition_node的源码就知道了,它决定了dll中的输入和输出,
#define RPLIDAR_ROS_EXPORT __declspec(dllexport) #define RPLIDAR_ROS_IMPORT __declspec(dllimport)
(2)rplidar_node.cpp中的ttyUSB0修改为COM3,
如果你要运行这个指令,ros2 run rplidar_ros rplidar_composition,那么就要把
serial_port_ = this->declare_parameter("serial_port", "/dev/ttyUSB0");
修改为
serial_port_ = this->declare_parameter("serial_port", "\\\\.\\COM3");
注意、这里COM3是变化的,我的设备上是COM3。
(3)rplidar.launch.py中的ttyUSB0修改为COM3,
如果你要运行指令:ros2 launch rplidar_ros rplidar.launch.py,那相应的串口也要改,如下,
把
#'serial_port': '/dev/ttyUSB0',
修改为
'serial_port': '\\\\.\\COM3',
//-----------------------//-----------------------//-----------------------
到这里一般colcon build之后就能跑起来了,修改过后的源码在这里,
https://github.com/SpaceView/rplidar_ros
给张测试结果的全图吧,
本文结束。