ulapi和gomotion成功安装之后就会以界面的形式出现控制六个关节运动的各种功能参数。如下图
首先安装ulapi:
ulapi的README.Linux中的说明和实际操作不一样,需要变一下。
重头戏来喽
下载ulapi,此博客是在TQIMX6Q_BASEC_V1.4嵌入式板卡,Ubuntu16.04系统上安装。Ubuntu系统已经安好,但是应该之前没对下载源和各种依赖进行更新,导致开始安装ulapi一直遇到问题,所以在这里首先希望大家安装的时候先更新!
具体方式如下(这里也有我遇到的各种问题,走了一些弯路,然后回过头也不知是不是中间有些步骤可以省略,所以都记录下来了):
换源,这里采用清华源
cd /etc/apt
sudo cp sources.list sources.list.bak
sudo gedit sources.list
> 删除原来的,将下面的粘贴到sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://ftp.cn.debian.org/debian stretch main
> 重要的操作,不可跳过
sudo apt-get update
sudo apt-get upgrade
说明:这个可以看到我换源的部分最后一行不是清华源,是另外加上的,这是因为我换上清华源之后安装东西,提示我“Package is not available”,因此 参考链接,进行了修改。
另外还需要说明的一点就是我换源之后进行更新,出现了很多404 not found的问题,我没有针对它解决问题,不知道为什么会出现这个问题,如果你知道的话,欢迎给予指教。
安装ulapi
因为我是在ubuntu16.04上面进行操作,所以就参考README.Linux进行安装。
这里的文件夹名字与所给的不同,不用管他,你自己下载然后提取就好了。重点是下面的三行。
对于之前没编译过c文件的我来说,这还是很陌生的,加之所给的文件夹里没有configure,这可咋整呢?阅读了一些资料才知道应该怎么编译,需要使用Autotools,这里有对这个自动编译工具的介绍,感兴趣的可以看看。接下来我就开始编译喽~
## 在ulapi-master文件夹中打开终端,开始输入
sudo apt install autoconf
# 这里可能会出现类似下面的错误
The following packages have unmet dependencies:
console-setup-linux : Depends: keyboard-configuration (= 1.108ubuntu15.2) but 1.156 is to be installed
#此时你只需要按照提示输入
sudo apt-get -f install # 就可以强制运行,然后再按下面的安装
sudo apt install autoconf
autoconf # 这里提示有错误,但这句必须得在终端运行,不能跳过
autoheader
autoconf # 看看是不是生成configure了
automake --add-missing # 这里会报错
autoreconf # 出错,但是提醒你使用automake --add-missing, 有点神奇
automake --add-missing # 没问题了吧
## 这里才开始使用上面那三行语句
./configure # 在这里会运行出来很多条语句,对应not found或者none of的项查找怎么安装对应的包
make
sudo make install prefix=/usr/local/ulapi
## 这里就是测试了
bin/ultest # 和上图最后结果一样pass就可以了,在嵌入式板卡上成功pass,但是在我自己的电脑上出现了core dumped,不清楚原因
然后安装gomotion
下面是编译步骤:
编译过程与ulapi的相同,这里就到make结束,不用make install, 这里有个坑,导致我在板卡上一直没出现界面。且听我细细道来。
#提示
./configure # 与ulapi一样,在这里会运行出来很多条语句,对应not found或者none of的项查找怎么安装对应的包
我首先在板卡上编译了gomotion,然后运行了
bin/gorun -i etc/genhex.ini
但是始终出不来界面,一直出现这句话
gorun: GUI process returned with result 1
在代码里面找到了这句话的出处(gomotion-master/src/gorun.c的倒数第四句),但是自己能力有限,一直没找到问题所在。纠结了两天多,终于昨天在实验室大神老师的帮助下解决啦。中间找的过程就不赘述了,我学到了很多,这里就讲讲到底是为什么没出现界面。原因是板卡上编译之后在gomotion的bin文件中缺少了编译好的gotk, gotcl!(这是怎么找到的呢?我先在自己的笔记本电脑上编译了gomotion,前面说到我测试ulapi的时候出现了core dumped ,但这里没影响到gomotion出现界面,对比了笔记本电脑与板卡的gomotion的bin文件,找到了根)到这里如果你有经验的话应该能猜出来其实是少了两个库——tcl库与tk库,事实上正是这样,我按照这个链接安装了tcl8.6和tk8.6,然后就成功出来界面了。
注:后来又在工控机上安装的时候,在安装完tcl和tk之后出现了一个问题,安装的是8.6.10,但是运行gomotion的demo的时候提示我“have tk8.6.5,need exactly tk8.6.10”,在查询一番之后使用“sudo apt-get upgrade”更新之后,成功!
总结
- 如果板卡上出现了问题,一定首先检查./configure运行出来的结果,重点查看“none of…”,比如我的板卡运行出来的就有none of tcl / none of tk,但是没有经验,没想着去好好看一看;也有一些命令后面带“no”的,我没有管他们,但不知道接下来会不会对我有影响。
- 在你自己的电脑上运行一下,因为笔记本电脑系统比较完善,有什么问题都会报错,比如我自己的电脑上编译Gomotion的时候其实就报了tcl和tk的错误,然后安装了,就自然的出现了界面。但是没想到要看看板卡上是不是也缺少这两个库,所以出现问题的时候一定要先想想自己的电脑是否和板卡安装了一样的库,有时候会非常有用。
后记:
这个链接你可以知道怎么将一个c文件编译得到Makefile,然后你之后安装东西都可以按照autotools的方式进行安装。
再送你们一个问题的解决方案:
- E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
解决方法:找到并且杀掉所有的apt-get 和apt进程
ps -A | grep apt
sudo kill -9 processnumber