项目场景:
用TX2作为主控板,电机和驱动均采用步科,驱动器型号为FD122,制作的两轮差速移动机器人
问题
底盘通信不想,两驱动器IP地址和驱动文件均无误的情况下,仍不能通信。
原因分析:
在其他的板子上确认了驱动文件是对的,与师兄交流,通过问题发现可能是can总线的问题,因地盘通信采用CAN总线,初步查了手册,TX2自身就带了两路CAN外设,我们采用的是can0,未用到can1
解决方案:
网上搜了一下,发现有两种解决方法,一是打开外设,编译到内核,二是写脚本文件,添加到自启动。这里采用的是第二种方案。
终端输入ifconfig查看有无can0-00
若无就是这个问题了,
打开终端输入
1. modprobe can // 插入 can 总线子系统
2. modprobe can-raw //插入can 协议模块
3. modprobe can-bcm
4. modprobe can-gw
5. modprobe can_dev
6. modprobe mttcan
上述的步骤只是给内核增加了内设,但外设还是没有打开,igconfig查看是否打开了外设还是查不到。
这个时候我们就需要借助第三方开发包can-utils,安装方式如下:
1. git clone https://github.com/linux-can/can-utils.git
2. cd can-utils
3. make
4. sudo make install
接下来打开外设:
1. sudo ip link set can0 type can bitrate 500000 loopback on
2. sudo ip link set up can0
接下来添加自启动脚本
在ubuntu16.04的文件夹/etc/init.d/目录创建自启动脚本,can0_add.sh,输入内容如下
#!/bin/sh
### BEGIN INIT INFO
# Provides: land.sh
# Required-start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the svnd.sh daemon
# Description: starts svnd.sh using start-stop-daemon
### END INIT INFO
#任务脚本
modprobe can
modprobe can-raw
modprobe can-bcm
modprobe can-gw
modprobe can_dev
modprobe mttcan
sudo ip link set can0 type can bitrate 500000 loopback on
sudo ip link set up can0
exit 0
最后修改文件权限:
sudo chmod 755 can_add_server.sh
然后执行:
sudo update-rc.d can_add_server.sh defaults 95
将脚本添加到启动项(95表示启动时间,越大表示启动越晚)
重启系统就可以与底盘通信上了。
参考:https://blog.csdn.net/qq_33635623/article/details/89944852