在wsl2下安装ros以实现kinova gen3机械臂驱动以及调用gen3摄像头跑darknet_ros踩坑经历(含cuda cudnn安装)

本文详细记录了在Windows11的WSL环境下,使用Ubuntu18.04搭建ROSMelodic和Yolo环境的过程,包括WSL的基础设置、更换源、安装编辑器、设置中文环境、安装ROS、Kinova的ros_kortex及其vision模块,以及CUDA和darknet_ros的安装和编译。过程中遇到了驱动不匹配、符号链接错误等问题,并给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跑在ros下的yolo过程记录

设备(r9000p2021款):win11 3070ti 

基础环境

wsl (windows下的linux子系统)

优点:开销小、可以同时使用windows和linux减小开发难度

  1. 在Windows 10上启用WSL(Windows Subsystem for Linux)的步骤如下:

    1. 打开“控制面板”并选择“程序和功能”选项。
    2. 单击左侧的“启用或关闭Windows功能”链接。
    3. 滚动到底部并选中“适用于Linux的Windows子系统”复选框。
    4. 单击“确定”按钮并等待Windows完成安装。
    5. 重新启动计算机以完成安装。

    (同时启动的虚拟机平台、hype-v)

  2. 设置默认版号和wsl内核更新(这个版号很重要,v2的wsl可以做到与win丝滑交互)

    wsl --set-default-version 2
    
    wsl --update
    
  3. 安装wsl

    在 Windows 应用商店搜索 ubuntu ,选择自己喜欢的版本,安装即可。这里我选择的是 Ubuntu 18.04 LTS,之后的所有内容也是基于 WSL Ubuntu 编写。

  4. 初始化wsl 设置用户名和密码

  5. 用户权限 permission deny 的问题

在/etc/wsl.conf文件中添加

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
mountFsTab = false

然后在~/.bashrc文件中加入umask解决deny问题

#Fix mkdir command has wrong permissions
if grep -q Microsoft /proc/version; then
  if [ "$(umask)" == '0000' ]; then
  umask 0022
  fi
fi

  1. 更换源 使用小鱼脚本 更换系统源

    wget <http://fishros.com/install> -O fishros && . fishros
    
  2. 安装可以在win下显示的linux工具(特别是gedit 很好用,不用使用vim简直就是半吊子程序员的福音)

    sudo apt install gedit -y
    sudo apt install gimp -y
    sudo apt install nautilus -y
    sudo apt install vlc -y
    sudo apt install x11-apps -y
    
  3. 汉化

    # 安装中文基础语言包
    sudo apt install language-pack-zh-hans
    # 安装中文桌面语言包
    sudo apt install language-pack-gnome-zh-hans
    sudo apt install language-pack-kde-zh-hans
    # 安装中文手册页(man命令)
    sudo apt install manpages-zh
    
    sudo gedit /etc/locale.gen
    

    找到 zh_CN.UTF-8 UTF-8 并取消注释,然后保存并退出

    locale.gen...
    # zh_CN.GBK GBK
    zh_CN.UTF-8 UTF-8
    # zh_HK BIG5-HKSCS
    ...
    

    编译语言

    sudo locale-gen
    

    设置默认中文

    sudo gedit /etc/default/locale
    

    替换原来的内容如下

    localeLANG=zh_CN.UTF-8
    
  4. ros一键安装

    主页 | 鱼香ROS (fishros.org.cn)

    小鱼的一键安装系列 | 鱼香ROS (fishros.org.cn)

    wget <http://fishros.com/install> -O fishros && . fishros
    
    1. 配置rosdepc(为之后安装kortex做准备)

    2. 安装ros-melodic桌面版

    3. 装完测试一下ok不ok(三个终端三个小乌龟)

      roscore
      rosrun turtlesim turtlesim_node
      rosrun turtlesim turtle_teleop_key
      

wsl下ros_kortex安装

Kinovarobotics/ros_kortex at melodic-devel (github.com)

由于我wsl安装的是ubuntu18.04 就是这个分支 如果是更古老的16.04 wsl安装过程就太繁琐了 这里就不写了

sudo apt install python3 python3-pip
sudo python3 -m pip install conan==1.59
conan config set general.revisions_enabled=1
conan profile new default --detect > /dev/null
conan profile update settings.compiler.libcxx=libstdc++11 default
mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone -b melodic-devel <https://github.com/Kinovarobotics/ros_kortex.git>
cd ../
rosdepc install --from-paths src --ignore-src -y

注意最后一步是rosdepc 和 官方github主页上面不一样,因为墙的关系 rosdep 是 使用不了的 rosdepc yyds!

编译kortex

catkin_make
source devel/setup.bash

wsl下kinova_version安装

具体操作如下

Kinovarobotics/ros_kortex_vision: ROS package for KINOVA® KORTEX™ arms vision module (github.com)

安装依赖

sudo apt install gstreamer1.0-tools gstreamer1.0-libav libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-base

安装rgbd(注意这里原来是16.04的命令,18.04 需要改为melodic)

sudo apt-get install ros-melodic-rgbd-launch

然后进ws下的src目录克隆包

git clone <https://github.com/Kinovarobotics/ros_kortex_vision.git>

然后编译

cd ~/catkin_workspace/src/
catkin_init_workspace 
cd ..
catkin_make clean
catkin_make
catkin_make install
echo "source ~/catkin_workspace/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

然后测试一下

# ros核心
roscore
# 启动version驱动
roslaunch kinova_vision kinova_vision.launch

# 颜色和深度摄像机回传
 
rosrun image_view image_view image:=/camera/depth/image_raw

darknet_ros

为了实现cv识别物体给机械臂控制提供信息 有两种方案

  1. find_object_2d 可以用图形化的界面,以模板匹配的算法去识别物体。但是这个包首先是没办法调用GPU,其次模板匹配方法准确率很低,如下图

在这里插入图片描述
在这里插入图片描述

  1. darknet_ros 实现 帧率高 识别准 只需要进行权重替换就可以实现多分类
    在这里插入图片描述

nvidia driver cuda cudnn

由于wsl2的关系 只需要在windows端安装nvidia driver 就可以了,这里出现第一个bug 。

bug1
如果driver自带的cuda驱动和你之后所安装的cuda不匹配在使用一段时间后会出现输入nvidia-smi命令后的不到正确的cuda版本,也就是说电脑会找不到正确的cuda路径

这里根据设备GPU 3070ti算力 选择带有cuda11.7的driver版本 516.94 [GeForce Game Ready 驱动程序 | 516.94 | Windows 10 64-bit, Windows 11 | NVIDIA](https://www.nvidia.cn/Download/driverResults.aspx/192991/cn/)

然后进行wsl内的cuda安装,这里出现第二个bug

bug2
在安装过程中会报错
	/usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

这个错误是wsl和nvidia wsl驱动安装之间的问题 要在安装完widows端nvidia驱动之后就要解决

解决方法,参见这个issue/usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link · Issue #5663 · microsoft/WSL · GitHub,在windows端找到出问题的libcuda.so.1文件删了,然后在Linux端重新生成短链接,这样这个libcuda.so.1文件就确实存在于linux了就不会报错了

继续cuda toolkit安装

下载地址CUDA Toolkit 11.7 Downloads | NVIDIA 开发者

选择如下选项,这样选wsl-ubuntu 所下载的安装包就没有linux nvidia driver ,之前已经在windows端安装了driver 这样可以避免linux端安装的driver覆盖windows端的设置,以避免出现问题(干脆不下载)。

在这里插入图片描述

darknet_ros安装编译

安装完这个cuda toolkit就可以下载darknet_ros的元包进行编译了,这里出现第三个bug

bug3

在下载编译之前需要将自己的github账号和自己的Linux的电脑进行ssh密钥链接,不然这个库会因为权限问题不让git

ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车,在~/.ssh文件夹下生成id_rsa.pub文件,查看它将码复制出来贴近github账号setting下的new ssh gpg内

继续下载,将包下载近工作空间下的src目录下

cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git   
cd ../

下载完成后 进行编译

catkin_make -DCMAKE_BUILD_TYPE=Release
bug4

这里会出现无法编译的bug ,具体报错是 cannot find -lcuda

这里是因为darknet_ros的元包的cmkefile 没有加入cuda toolkit 的lcuda路径,见issue cannot find -lcuda · Issue #340 · leggedrobotics/darknet_ros · GitHub

其次还有另外一个bug,nvcc fatal … compute_30

bug5

这是因为设备用的3070ti规格高,但是darknet_ros元包编写时用的显卡设备没有这么高 他设置的compute_30太低,修改元包根目录下的Makefile文件 将设备号修改成对应标号,删除其他标号,就可以解决这个bug,对应关系参见 显卡对应的算力表(来自yolov3—darknet) - 小丑_jk - 博客园 (cnblogs.com)

3070ti对应的设备标号如下

ARCH= -gencode arch=compute_86,code=[sm_86,compute_86]

对应修改Makefile文件以及cmakefile.txt就可以解决问题

如果cuda版本不是11.7 也有可能出现某一句的bug只要将原来出现错误的被弃用函数替换掉就可以解决问题

继续没有问题编译完成后,还需要修改对应的配置文件和权重文件参数 然后进行roslaunch就可以了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值