M300 onboard sdk-ros运行roslaunch dji_vehicle_node.launch提示f...

Completed

Comments

3 comments

  • DJI Developer Support
    M300与OSDK通信通过串口和USB通信,其中USB通信设备将会识别成ACM设备,需要先连接双A USB连接线,再检查机载计算机上是否成功识别到ACM设备。识别到的设备名填入launch配置文件即可。
    1
    Comment actions Permalink
  • Hurd

    我刚刚遇到这个问题,已经解决,可能的原因:

    1)硬件连接问题。如果你使用的是大疆妙算,很大可能是这个问题,应该尽量使用大疆配置的各种原装线来进行连接,并且重复拔插并按紧各种接口。

    2)没有ACM驱动。如果你使用的不是妙算,而是第三方平台,例如我使用的是jeston NX,一般都是没有打开ACM驱动的,需要通过NX内核编译来打开ACM驱动。参考如下教程:

    安装ACM驱动

    (如果使用的大疆妙算,这一步不需要进行,只有在使用第三方计算平台,例如NX,当检测不到ttyACM0串口时才需要,检查是否有ttyACM0的命令:ls -l /dev | grep ttyACM*)

    安装ACM驱动时,需要通过编译内核才能打开ACM驱动,中途会进行源代码编译。一定要注意与jetpack的版本对应。

    有两种内核编译方式(第一种可以成功编译内核,能够打开ACM驱动,但是NX开发板的接口有问题,需要多次拔插可能才能检测到ttyACM口,目前未找到原因;第二种编译方式本质上和第一种一样,但是具备更多自主权,可以自己设置路径等,但是第二种没有编译成功,仅作参考),详情如下:

    • 内核编译方式一:

    参考教程:

    1)NVIDIA Jetson Xavier NX从板砖到边缘计算机——4适配大疆 OSDK4.0.1:

    https://blog.csdn.net/collin_d/article/details/109455154

    2)NX入门教程软件篇-编译内核:

    https://www.ncnynl.com/archives/202107/4493.html

    3)Tx2 通过内核编译来获取ttyUSB* 以及ttyACM*的设备名:

    https://blog.csdn.net/weixin_38419133/article/details/88012940

     

    具体安装步骤:

    (1)到如下链接下载与jetpack版本对应的源码并解压,放到/home/目录下(如果实在不知道是那个版本,就先随便下一个,按后面步骤操作下,如果不匹配,系统会提示你源码的版本和系统版本号):

    https://www.github.com/jetsonhacks/buildJetsonXavierNXKernel/tags

    (2)进入子文件夹(/home下解压得到的buildJetsonXavierNXKernel文件夹):

    cd buildJetsonXavierNXKernel

    此处最好是将源码压缩包拷贝到/home下再解压,不然各个文件会没有权限,比较麻烦;

    (3)在buildJetsonXavierNXKernel/scripts文件夹中找到sh,将:LOCAL_VERSION=${KERNEL_VERSION#$"4.9.201"}

    修改为:LOCAL_VERSION=${KERNEL_VERSION#$"-tegra"}

    (这一步不进行也没关系,不影响)

    (4)运行脚本:

    sudo ./getKernelSources.sh

    中间要是出现Hit不上链接的问题,找个网络信号稳定的时候多试几次就可以了

    (5)设置版本信息,以便内核编译后系统可以找到,否则编译完成并重启后系统会报错;

    cd /usr/src/linux-headers-4.9.201-tegra-ubuntu18.04_aarch64/kernel-4.9/

    cat .config | grep -E “CONFIG_LOCALVERSION” 查看当前值

    sudo gedit .config

    弹出文本文件,利用Ctrl+F搜索CONFIG_LOCALVERSION,并修改其值为:

    CONFIG_LOCALVERSION = “-tegra”,再保存并退出。再次输入cat .config | grep -E “CONFIG_LOCALVERSION”,发现值已经发生变化。

    操作过程如下图所示:

    (6)安装Qt:

    sudo apt-get install qttools5-dev

    (7)打开配置:

    cd /usr/src/kernel/kernel-4.9

    sudo make xconfig

    操作完成后会弹出界面,如果界面没有你想要看到的,切换一下菜单栏的显示按钮,就可以看到了。

    (8)在弹出的界面中进行设置,设置时参考如下链接:

    https://blog.csdn.net/gzj2013/article/details/77069803

    (9)根据上述教程按下Ctrl+F弹出搜索框:

    首先搜索ACM,点击搜索出的条目时,直到前面的选项点变成对勾即可。然后再搜索出CH341,点击搜索出的条目时,直到前面的选项点变成点即可。有的时候只能搜出CH341,搜不出ACM,该处无解,我是重新安装jetpack,重新来一遍就有了。

    最后一定记得保存并退出。

    对于 Genral Setup | Local version - append to kernel release的值要谨慎设置,此处应该不需要设置,但是如果其值显示的版本不是当前编译的内核版本号就需要重新设置新值。其实此处和步骤3)、步骤5)目的都是为了正确设置版本信息并告诉系统,这样在最后一步系统重启后可以顺利找到内核,正常进入系统,否则启动时会出现如下错误:

    (10)进入到源码文件夹根目录下(makeKernel.sh所在的目录下),例如:home/xxx/buildJestonXavierNXKernel-L4T32.4.3,编译内核:

    sudo ./makeKernel.sh(编译时间要很久)..

    sudo ./makeModules.sh(编译安装也要很久,但是这一步不一定要)

    sudo ./copyImage.sh

    (11)检查是否可以顺利读取到ttyACM*串口

    ls -l /dev | grep ttyACM*

    如果正常读取就会有相应串口信息输出。正常都是可以检测到的,但是也可能检测不到,先考虑是不是硬件接口的问题,拔插一下各种线。

    dmesg | grep ttyACM0

    检测是否有这个设备

    (12)重新启动

    Reboot

    要是内核编译好后,使用命令可以读取到ACM口,但是重启后又读取不到ACM口,多半是因为硬件问题,建议将M300与转换板、转换板与NX之间的各种线都拔插一下并按紧,尤其是转换板与M300的OSDK接口相连的线要拔插一下。这些操作建议在M300和NX都已经上电启动完毕后再进行。

     

    • 内核编译方式二:

    到如下链接下载相关软件包:

    https://developer.nvidia.com/zh-cn/embedded/downloads#?search=kernel

     

     

    再点击进入页面,下载好相关包。

     

    参考教程:

    (以下教程仅供参考,因为本人也没编译出来)

    [NVIDIA]-2 从零入手 Jetson Xavier NX 内核编译、源码编译流程:

    https://blog.csdn.net/darnell888/article/details/105980318?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.base

     

    1
    Comment actions Permalink
  • 商行

    谢谢大家,非常感谢!!

    0
    Comment actions Permalink

Please sign in to leave a comment.