大二的时候捣鼓过一阵子这个3D鼠标,获取它的信息通过Arduino Mega2560 + USB Host Shield来控制一个桌面级的机械臂(淘宝)。那个时候是在Win8环境下弄的,最近想试试能不能在Ubuntu16.04LTS上搞点事情,就去官网下了Linux版的驱动和SDK。我只想说一句,是真的难装:(
所以分享一下在Ubuntu16.04LTS安装的心路历程,避免有人走我的老路,一开始去官方群里问,没人理我,尴尬。去论坛看了一下,整个LinuxSDK板块只有57个帖子,再次尴尬。资料太少,没办法,倒腾了两天才搞定,也是自己水平太低,应该早想到Makefile的问题。好了,闲话不扯了,进入正题:
参考资料:
我采用的是第二个链接里的方法,第一个和第三个链接说的都是用的第三方驱动,在我这里不太好用,因为所需要的libndofdev库,对Linux的支持并不太好,可以作为一个后备选项使用。
OK,先去下载官网的驱动,下好之后进入下载目录里:
$ cd 下载
$ tar -xf 3dxware-linux-v1-8-0.x86_64.tar.gz
$ sudo ./install-3dxunix.sh
$ sudo chmod go+rx /etc/3DxWare
$ sudo chmod go+r /etc/3DxWare/*.scg
现在插上鼠标或者鼠标无线接收模块,启动驱动demo:
sudo /etc/3DxWare/daemon/3dxsrv -d usb
这样就成功运行了,可以找到文件夹下的xcube和xvalue两个demo试试:
$ cd 下载/Drive_3D/
$ ./xcube
xvalue一样的,这里就不演示了。接下来安装SDK,这个是真的难装,而且是上个世纪末做的。你敢信?想想也是可怕,国外上个世纪末就做出了这个鼠标的原型,但是国内现在一直还没人做,可能是没有市场吧,有同学拆过这玩意儿,据说不难。
参考资料:http://www.jellythink.com/archives/1056
先去官网注册个账号登录,否则是无法下载SDK的。注册好就可以下载了,下载之后同样的解压出来:
$ tar -xf xdevelop.tgz
接下来就不用跟着上述第二个链接的做法了,完全不管用,当然如果是大牛当我没说,上述链接用的方法实在是太有历史了,所以现在版本的ubuntu很难再用了,反正我捣鼓了好久都不行。只能自己捣鼓了,想当然的我把三个文件拖进了CodeBlocks进行编译,发现不行,想了一下,没有Makefile啊!他给的几个Makefile简直绝版了,太有历史感了,完全没法用。对于我这种Linux菜鸟,没有学过写Makefile,遂直接用autoconf和automake工具来自动生成Makefile,先看看你有没有autoconf:
$ which autoconf
有就无所谓了,没有的话自己apt-get一下。接下来说正式步骤:
$ cd 下载/3Dconnexion_SDK
$ autoscan
将configure.scan文件重命名为configure.ac,并按照需要修改configure.ac文件,这里我就直接贴上我的configure.ac文件内容:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([3dSDK], [0.1], [[email protected]])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_CONFIG_SRCDIR([xapp.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lX11':
AC_CHECK_LIB([X11], [main])
# Checks for header files.
AC_PATH_X
AC_CHECK_HEADERS([stdlib.h string.h math.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
修改好之后依次执行下面命令:
$ aclocal
$ autoheader
$ autoconf
运行完这三步,在文件夹新建一个Makefile.am文件,这是一个比Makefile还要高级的rule,具体可以参见上面的链接。这里我就直接贴我的文件内容了:
AUTOMARK_OPTIONS=foreign
bin_PROGRAMS=xapp
xapp_SOURCES=xapp.c xdrvlib.c
include_HEADERS=xdrvlib.h
然后直接automake:
$ automake
如果报错,说缺少NEWS,README啊这些的,先用–add-missing,如果还不够,直接touch就可以了:
$ automake --add-missing
$ touch NEWS README AHTHORS ChangeLog
OK了之后,运行configure就好了:
$ ./configure
这样就生成了xapp的SDK demo,运行看看,其实就和驱动的xvalue一样:
$ ./xapp
至此,我们的SDK就安装完成了。以下部分是我在安装时候遇到的一些小问题,求大牛指导一下,我在automake过程中一直显示“未定义’sin/cos’”,我明明link了math.h,查了一下,gcc下要加-lm链接math库,但是我这个make就不知道了,没搞懂怎么弄,所以最后自己写了两个sin/cos函数进去,再编译就完成了。
希望有大牛说下。
/—————————————————————————/
更新一下,今天给另外一台笔记本安装驱动的时候出现了问题,在这备注一下,希望能够帮到别人。
在安装之后输入sudo /etc/3DxWare/daemon/3dxsrv -d usb提示大概意思是缺少libXm.so.3文件,我看了一下/usr/lib,确实没有该文件,看来是系统的问题了。
在网上找了一通,发现很多人找不到该文件的下载地址,其实rpm上就有,比如我是64位ubuntu16.04,我就去rpm下载openmotif22-libs-32bit-2.2.4-192.1.3.x86_64.rpm,下载之后解压就行,取出libXm.so.3放到/usr/lib中就OK了,希望可以帮到大家。