起因:我想用linux系统来使用ROS2开发机器人,但是嫌双系统麻烦,于是一开始在win10上使用WSL2,但是win10上没有网络镜像模式,不能使用ROS2通信,但值得说的是,我在WSL2上使用安装realsense-ros时,用usbipd连接时,并没有发现什么兼容问题,即当我运行realsense-ros节点时,能够识别到D435相机,于是我写下了下面这篇博客,并想着升级到win11,在能够使用网络镜像的WSL2上复刻。ubunut22.04 使用Intel RealSense D435进行视觉SLAM(附Intel RealSense Viewer下载)-CSDN博客
但是,当我满怀激情地运行我一天前,记录下的命令时,realsense-ros并没有识别到设备,我确保usbipd是正确运行的,即我用lsusb能看到D435。之后我上网去查,还去弄了什么乱七八糟的内核,还以为是USB和WLS的问题,但是在WLS能够lsusb看到,那应该没问题。于是我矛头一转,转到Intel RealSense的问题上,发现和我有同样问题的人还有很多,还看到外网有个两年前的帖子,问题和我一模一样,但是我没有查到相关的解答。我在issues中,尝试他们的解决办法。按照下面的这个网址中的命令执行。最终我成功安装了
librealsense/doc/libuvc_installation.md 在 master ·IntelRealSense/librealsense ·GitHub的
Realsense-viewer,并且可以使用rs-enumerate-devices命令检查设备,但是还是检测不到。不过,当我执行sudo rs-enumerate-devices时,能够检测到,但是这样无法使用ROS。于是我又去查找这个问题的答案,发现也有许多人和我一样,但是解答并不明确。当我熬夜熬到凌晨一点左右的时候,我找到了一篇issues,是关于
我在其中找到了答案。希望我解答问题的过程也可以对大家有所启发。
总的说,我认为问题的原因是使用sudo apt install ros-humble-librealsense2*和sudo apt install ros-humble-realsense2-*安装的librealsense中udev 规则有问题(这个问题在win10中的wsl2可以忽略,而在win11不行),与源码编译的librealsense的udev规则冲突,但是在sudo命令下的udev规则是源码编译的,所以能够检测出设备。在源码编译realsence-ros后,这个问题可以解决。
更新 2025/4/2 15:04————————————————————
当你看到这里时,这篇博客有了新的进展。
在我写完这篇博客的几个小时后,我发现。问题又出现了,只有sudo 情况下才能识别到设备。
但是当我source .\bashrc之后又可以在普通模式下识别到了。
在此之后我分别建立了两个终端:
(1)
wali@wali:/etc/udev/rules.d$ rs-enumerate-devices
No device detected. Is it plugged in?
wali@wali:/etc/udev/rules.d$ echo $LD_LIBRARY_PATH
/home/wali/ros2_ws/install/yolo_msgs/lib:/home/wali/ros2_ws/install/realsense2_camera/lib:/home/wali/ros2_ws/install/realsense2_camera_msgs/lib:/opt/ros/humble/opt/rviz_ogre_vendor/lib:/opt/ros/humble/lib/x86_64-linux-gnu:/opt/ros/humble/lib:/usr/local/cuda-12.0/lib64:/usr/local/lib
(2)
wali@wali:~$ rs-enumerate-devices
No device detected. Is it plugged in?
wali@wali:~$ source .\bashrc
wali@wali:~$ rs-enumerate-devices
Device info:
Name : Intel RealSense D435
Serial Number : 313522070248
............................................................................
wali@wali:~$ echo $LD_LIBRARY_PATH
/usr/local/cuda-12.0/lib64:/usr/local/lib:/home/wali/ros2_ws/install/yolo_msgs/lib:/home/wali/ros2_ws/install/realsense2_camera/lib:/home/wali/ros2_ws/install/realsense2_camera_msgs/lib:/opt/ros/humble/opt/rviz_ogre_vendor/lib:/opt/ros/humble/lib/x86_64-linux-gnu:/opt/ros/humble/lib:/usr/local/cuda-12.0/lib64:/usr/local/lib
通过对比两种环境变量配置,关键区别在于:
在失败的情况下,LD_LIBRARY_PATH
缺少了 /usr/local/lib
在路径中的优先位置。
尽管路径中仍然包含 /usr/local/lib
,但由于路径顺序或隐式覆盖问题,动态链接器 (ld.so
) 未能正确加载 RealSense 的驱动库 (librealsense2.so)
当执行export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH后,成功了。
通过echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc 这样就永久生效了。
当我想把答案回答给那些issues,我发现两周前,已经有人提出了用export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 好吧,我当时确实看到了,但是我没有在意。有可能一个不起眼的回答,其实就是你解决问题的关键。
更新 2025/4/2 15:04————————————————————
接下来我将说明我是如何从安装WSL至运行realsense-ros,请注意要按照顺序!在这过程中我关闭了防火墙。
一.清除WSL2数据
如果你目前安装好了WSL2,想要卸载掉按照我的步骤走,也不能说卸载,就是清除了数据。
#1、查看当前环境安装的wsl
wsl --list
#2、注销(卸载)当前安装的Linux的Windows子系统(名称要与list获取的一致)
wsl --unregister Ubuntu-20.04
打开win11的设置》应用》安装的应用》系统组件》Microsoft Store点击终止,修复和重置,同理:
设置》应用》安装的应用》系统组件》适用于 Linux 的Windows 子系统,点击终止,修复和重置
二.安装WSL2
当我在win10安装WSL2时,我参考了这篇文章安装全网最详细搭建Win10+WSL2+Ubuntu-22.04LTS+CUDA+Xfce4+noVNC个人工作站_win0 wsl2 ubuntu22.04-CSDN博客
在win11安装WSL2时,我参考了这篇文章:windows11 安装WSL2全流程_wsl2安装-CSDN博客
在搜索栏中搜索启用或关闭windows功能,确保
我是在微软商店中安装的ubuntu22.04,当我后台打开着clash时,微软商店不能正常初始化,关掉就行,下载完ubuntu22.04启动的时候有报错。解决办法:用命令行安装
在有管理员的Windows PowerShell,下执行
wsl --install -d Ubuntu-22.04
wsl --set-default-version 2
wsl -l -v
#输出类似语句即为成功
NAME STATE VERSION
Ubuntu-22.04 Stopped 2
#启动:
wsl
建议安装windows终端 win+R 输入wt即可启动
我的启动命令如下,可以参考,不一定是这样。
三.ubuntu环境
因为安装好了ubuntu,一般要换源。我使用小鱼的命令一键换源
wget http://fishros.com/install -O fishros && . fishros
输入5执行,替换并删除第三方源(如果小鱼命令的字符输出卡住了,ctrl+c 按一次可以解决。)
四.安装Intel RealSense驱动
进入到WLS2中。执行以下命令
1. 确保摄像头已断开连接:另外,确保卸载所有 ROS 的 RealSense 驱动程序(使用命令 apt list --installed | grep realsense 查看已安装的驱动程序),
如果你是用如下命令安装
sudo apt install ros-humble-librealsense2*
sudo apt install ros-humble-realsense2-*
可以尝试用如下命令卸载
sudo apt remove ros-humble-librealsense2*
sudo apt purge ros-humble-librealsense2*
最后再检查apt list --installed | grep realsense。
2. git clone https://github.com/IntelRealSense/librealsense.git
3. cd librealsense
4. mkdir build && cd build
5.编译前需要安装的东西,可能不全,请看报错补充。如果安装出错,也可以直接编译,看看缺啥再单独安装。
sudo apt update && sudo apt install -y build-essential libusb-1.0-0-dev libglfw3-dev libgtk-3-dev autoconf automake libtool pkg-config python3-dev python3-pip
6.
cmake ../ -DFORCE_RSUSB_BACKEND=ON -DBUILD_PYTHON_BINDINGS=true -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true -DBUILD_WITH_CUDA=true -DCMAKE_CUDA_ARCHITECTURES=75
#编译命令中带有cuda,请你安装cuda(在博客前面 二.安装WSL2中,win10安装参考博客中有讲cuda的安装)或者取消该参数(没试过)。参数DCMAKE_CUDA_ARCHITECTURES=75,是因为这里的 75 代表 NVIDIA Turing 架构(如 GTX 1660、RTX 20 系列等)。你需要依据自己的 GPU 架构来选择合适的数值,常见的架构编号如下:
60: Pascal (e.g., GTX 10 series)
61: Pascal (e.g., GTX 10 series)
70: Volta (e.g., V100)
75: Turing (e.g., GTX 16 series, RTX 20 series)
80: Ampere (e.g., RTX 30 series)
7. make -j6
8. sudo make install (编译完成后,使用 sudo 以管理员权限执行 make install 命令,将编译好的库文件、可执行文件和头文件安装到 /usr/local/ 目录下。如果之后你想卸载这些安装的内容,只需要在 build 目录下执行 sudo make uninstall 命令即可)
9. sudo cp ../config/99-realsense-libusb.rules /etc/udev/rules.d/
10. sudo udevadm control --reload-rules && sudo udevadm trigger
11. 将 /usr/local/lib 添加到 $LD_LIBRARY_PATH 环境变量的开头,即sudo vim .\bashrc 在末尾添加export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH。这样系统在查找库文件时会优先使用刚刚安装的新库,避免使用可能存在问题的 ROS2 库文件。可以使用以下命令临时更新环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
12. rs-sensor-control
#输出相机信息即为成功
五.安装ROS2
还是使用小鱼一键安装命令安装
wget http://fishros.com/install -O fishros && . fishros
六.源码安装RealSense-ros
1.mkdir -p ~/ros2_ws/src
2.cd ~/ros2_ws/src/
3.git clone https://github.com/IntelRealSense/realsense-ros.git -b ros2-master
4.cd ~/ros2_ws
5.sudo apt-get install python3-rosdep -y
#使用小鱼命令安装rosdep,输入3 回车
6.wget http://fishros.com/install -O fishros && . fishros
7.sudo rosdepc init
8.sudo rosdepc update
9.rosdepc install -i --from-path src --rosdistro $ROS_DISTRO --skip-keys=librealsense2 -y
Build
10.colcon build
11.source /opt/ros/humble/setup.bash
12.cd ~/ros2_ws
13.source install/local_setup.bash
接下来就能启动啦
ros2 run realsense2_camera realsense2_camera_node
或
ros2 launch realsense2_camera rs_launch.py