学习用到Apollo的小车,要给工控机安装Apollo2.5,记录一下安装过程,以便系统崩了之后可以快速返工。
下载Ubuntu14.04系统镜像,下载Ubuntu系统镜像,例如ubuntu-14.04.4-desktop-amd64.iso,用Universal USB Installer制作成系统盘。
先插入系统盘,开机按 F2 进入 BIOS 设置菜单,选择优盘启动,之后按步骤安装系统。
安装完毕,重启系统后,在终端执行以下命令完成更新。
sudo apt-get update;
sudo apt-get upgrade
在终端输入以下命令,安装Linux 4.4 内核:
sudo apt-get install linux-generic-lts-xenial
为方便下载文件及更新,System Settings-Software&Updates-Ubuntu Software-Download from-选择合适的镜像源。清华源比较常用,不过我之后用的是阿里云。
在刚安装好Ubuntu14.04时系统中应该没有安装vim,在终端中输入vim然后按照提示安装vim即可。方便之后修改编辑文件。
【据同学说该步骤可能引起后续问题,所以可先不做】
为了加快从github下载文件速度,按照以下步骤更改hosts文件。
输入以下指令进行编辑修改:
vim /etc/hosts
修改内容如下:(具体ip可能不同)
192.30.253.113 github.com
151.101.185.194 github.global.ssl.fastly.net
140.82.114.10 codeload.github.com
利用https://www.ipaddress.com/ 来获得以上GitHub域名的IP地址。
修改hosts文件后,刷新DNS。具体指令我忘了=-=所以我选择reboot。
Ubuntu14.04自带的输入法有时会遇到自动切换到双拼模式且无法更改的bug,这时可以选择在输入法设置中安装其他输入法,或者尝试以下方法,在终端中输入以下指令然后重启。
sudo apt-get install ibus-libpinyin pinyin-database
Apollo硬件安装
Apollo软件安装
这里需要安装带ESD CAN的内核。
有两种方法,一是安装预编译的Apollo kernel,然后根据ESDCAN-README.md编译ESD CAN驱动器源代码;二是编译带ESD-CAN的Apollo-RT-Kernel。
我之前采用方法一的时候不太顺利,有的步骤找不到相应目录,于是采取了方法二,但之后参考了软件安装指南,可以采用方法一。
ESD-Can安装调试
方法二是将原生的Linux内核(linux-4.4.32)打上esdcan的补丁(esdcan_patch),然后使用apollo提供的build.sh 脚本编译成实时内核。下面具体介绍操作步骤。
git clone https://github.com/ApolloAuto/apollo-kernel.git
Linux Kernel 4.4.32
tar zxvf linux-4.4.32.tar.gz
将解压后目录下的所有文件copy到 apollo-kernel/linux路径下。此时在linux/drivers/路径中没有esdcan的目录。所有的内核驱动都是在其根目录drivers下的,esdcan驱动不是linux支持的,因此没有其源代码。
在 ~/apollo-kernel/linux/patches路径下,将文件esdcan.patch复制到linux目录中。
在linux目录下,执行如下命令进行打补丁操作:
patch -p1 < esdcan.patch
此时查看./linux/drivers/路径 ,发现esdcan目录已经存在。
根据选用的ESD-CAN卡型号,在附赠光盘中选取对应的驱动,我这里的版本是ESD-PCIe 402,解压,将 src/路径下除Makefile之外的所有文件copy到 ~/apollo-kernel/linux/drivers/esdcan/ 路径下。
执行如下命令
cd drivers/esdcan/;ln -s Makefile.esd Makefile;ln -s Kconfig.esd Kconfig
cd ../..
如果链接不成功,删掉 Makefile或 Kconfig重新进行进行即可
成功执行完上述操作,当前的路径应该是
~/apollo-kernel/linux/
在该路径下执行apollo官方提供的脚本进行编译:
sudo ./build.sh rt
rt参数表示只编译实时(RT)内核,其他参数可用"./build help"查看
编译内核时间可能较长,编译完毕后,可以在~/apollo-kernel/linux/install/rt/路径下看到install.tgz文件,这就是内核安装包。tar zxvf install.tgz解压,执行install路径下的脚本进行安装。
在~/apollo-kernel/linux/install/rt/路径有一个装N卡驱动的脚本,可以直接运行安装N卡驱动。
Or
车辆中的Apollo运行需要NVIDIA GPU 驱动,必须安装具有特定选项的NVIDIA GPU驱动程序。
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.39/NVIDIA-Linux-x86_64-375.39.run
sudo bash ./NVIDIA-Linux-x86_64-375.39.run --no-x-check -a -s --no-kernel-module
从产品自带的光盘里得到一个驱动包,esdcan-pcie402-linux-2.6.x-x86_64-3.10.4, 解压后,进入esdcan-pcie402-linux-2.6.x-x86_64-3.10.4目录中,
cd esdcan-pcie402-linux-2.6.x-x86_64-3.10.4
进入到esdcan-pcie402-linux-2.6.x-x86_64-3.10.4目录后,会发现有一个Makefile文件,在该目录下执行命令
make
src文件夹中很多文件被编译了,其中有一个文件esdcan-pcie402.ko,之后会用到。
在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/include"下,有一个叫"ntcan.h"的头文件,后期程序在调用CAN接口时都要包含这个头文件。需要将其复制到/usr/local/include目录下,在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/include"目录下执行命令
sudo cp ntcan.h /usr/local/include
打开/usr/local/include查看,确认"ntcan.h"在该目录下。
在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/lib64"下,有一个叫"libntcan.so.4.0.1"的动态链接库;
需要将其copy到/usr/local/lib目录下,在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/lib"目录下,执行命令
sudo cp libntcan.so.4.0.1 /usr/local/lib
确认"libntcan.so.4.0.1"在/usr/local/lib文件夹中后,接下来进入/usr/local/lib目录,执行以下命令生成"libntcan.so.4"文件。
sudo ldconfig -v -n /usr/local/lib
确认"libntcan.so.4"在/usr/local/lib文件夹中后,接下来进入/usr/local/lib目录,执行以下命令生成"libntcan.so"文件。
sudo ln -sfv libntcan.so.4 libntcan.so
之后进行加载动态链接库,在任意目录下执行
ldconfig -p | grep ntcan
通过后执行
cat /etc/ld.so.conf | grep /usr/local/lib
通过后执行
sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf"
接下来执行
sudo ldconfig
至此,动态链接库加载完成
在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/src"下,能看到一个叫"esdcan-pcie402.ko"的文件,这个文件是由之前所述的make命令生成的,需要将其copy到/lib/modules/$(uname -r)/kernel/drivers/pci目录下。在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/src"目录下执行命令如下
sudo cp esdcan-pcie402.ko /lib/modules/$(uname -r)/kernel/drivers/pci
打开/lib/modules/$(uname -r)/kernel/drivers/pci查看,确认"esdcan-pcie402.ko"在该目录下;
接下来编译"esdcan-pcie402.ko"文件,打开一个新终端,执行
sudo depmod -a
通过后执行
sudo modprobe esdcan-pcie402
方法一(不推荐):打开一个新终端执行“sudo mknod --mode=a+rw /dev/can0 c 52 0”,其中52代表402号CAN卡的major值,不同的CAN卡请根据型号自行更改值,Read me文件中有说明。此时在dev目录下会看到一个节点can0,但是采用这种方法有一个缺点,每次重启can0节点会被消除,这样CAN卡就启动不了,需要重新创建一个can0节点才能启动CAN卡,
原因是dev文件夹的全称其实是device,里面有鼠标、键盘等各种设备的节点,是装系统时自带的,我们后期不能随意添加节点,即使你添加了,开机重启后系统还是会删除。
方法二:创建一个名为"98-esdcanpci.rules"的文件,前面名称可以自己改,后缀为".rules"即可,文件里面的内容如下:
SUBSYSTEM==“pci”, ACTION==“add”, ATTR{subsystem_vendor}==
“0x12fe”, ATTR{subsystem_device}==
“0x0402” , RUN+="/bin/sh -c ‘mknod --mode=a+rw /dev/can0 c 52 0’"
其含义为:ATTR{subsystem_vendor}==
“0x12fe” is the registered ID of esd in PCI(PnP), ATTR{subsystem_device}==“0x0402” is the ID of CAN-PCIe402,52是CAN卡的major值。
注意,每一块CAN卡的subsystem_vendor值和subsystem_device值不一样,可以通过以下命令来查找:
首先在一个新终端,执行:
lspci
可以看到所有的pci设备,其中就会有一个叫CANBUS的,CANBUS前面对应有一个值,例如"02:00.0";
接下来执行:
lspci -n |grep 02:00.0
可以看到设备的subsystem_vendor和subsystem_device,执行后得到例如"02:00.0 0c09: 12fe:0402 (rev 01)",其中12fe为subsystem_vendor,0402为subsystem_device;
接下来98-esdcanpci.rules文件写完后,将其copy至"/etc/udev/rules.d"目录下,在该目录下对98-esdcanpci.rules执行
chmod 777 98-esdcanpci.rules
接下来重启ubantu系统,让rules文件生效。
确保CAN驱动已经加载,运行命令
lsmod |grep can
下一步确认CAN设备可见,并且已具备合适的权限,运行命令
ls -l /dev/can0
若以上两个命令运行均成功,则说明已经驱上了,但并未完全确定成功。
至此,CAN卡驱动操作均已完成,接下来进行编译及测试。
在目录“esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/example”下,能看到一个叫cantest.c的文件,
在目录“esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/example”下执行
gcc -o cantest cantest.c -lntcan
若编译通过则说明CAN驱动已经安装成功,在该目录下,会看到一个"cantest"的可执行文件,运行该文件时候要带上参数
sudo ./cantest 3 0 0x00 0xff 1 10 100 1000 5000 2 -1
各项参数解释如下:
3 – canRead
0 – net0
0x00 – first-id 0x00
0xff – last-id 0xff
1 – count of CMSG-packets
10 – txbuf (useless here)
100 – rxbuf
1000 – tx timeout every 1 second (useless here)
5000 – rx timeout every 5 seconds
2 – baud rate 500k bit/s
-1 – count of ntcan-API-Calls, -1 is forever canRead the bus.
cantest 3 0 0x00 0xff 1 10 100 1000 5000 2 -1 可以接收网内canid 在0和ff之间的数据包,需要接受很大的id的数据包,将0xff改大为0xffff即可;
CAN卡自带120欧电阻,传感器输出端需要接一个120欧电阻(若不接则可能接收不到传感器数据),CAN卡接收端不需要外接120欧电阻。
按官方教程安装即可。
参考安装apollo2.5安装Apollo2.5,其中,百度回复容器内不需要安装显卡驱动,另主机内显卡驱动已在前述步骤中使用脚本安装,故执行其他步骤即可。
注意,在进入容器时,尽量不要进行sudo操作,可能会使Apollo一些文件上锁从而影响传感器等的安装。当提示某个文件权限不足时采取赋权操作。
sudo chmod 777 /var/run/docker.sock
bash docker/scripts/dev_start.sh
bash docker/scripts/dev_into.sh
正在安装摄像头、雷达等,待更新。