一步步搭建 Edison ROS Indigo 环境
最近在琢磨能不能用 CNN 来训练一个模型,用于控制一个模型小车,实现简单的循迹或者所谓的自动驾驶。于是拿出布灰已久的 Edison + 两轮平衡车 + 罗技摄像头,计划将这几样组装起来,上面运行 ROS 作为我的“机器人”平台,然后在笔记本上运行 master 做运算与控制。本笔记记录 ROS 在 Edison 上安装与运行 usb_cam 获取图像传输到主机的过程。
主要还是按照 Installing ROS Indigo on Intel Edison, Installing ROS Indigo on Raspberry Pi 这两个文档进行安装,但过程中会遇到不少问题,并且由于 Edison 用户可能比较少,大多都需要找相关资料来解决。
本笔记假设读者已经拥有基础 Linux 操作技能,某些基础操作不会细说。
安装 ubilinux¶
参考下面文档:
https://learn.sparkfun.com/tutorials/loading-debian-ubilinux-on-the-edison
将 ubilinux 安装到 sd 卡启动¶
因为 Edison 自带的 emmc 只有 4G,安装各种包之后空间只能勉强够用,因此建议使用 8G 以上的 sd 卡安装系统,安装在sd卡上还有一个好处就是可以简单的将系统备份下来。可参考下面文档:
https://github.com/sarweshkumar47/Boot-Intel-Edison-from-SDCard-with-Debian-Ubilinux
系统初始化¶
配置 wifi:
1 |
|
然后修改 /etc/network/interfaces,禁用 usb 网卡,使用 wlan0,将 wpa-ssid 跟 wpa-psk 配置上。
初始化的配置,顺便把 locale 配置一下
1 2 |
|
安装 boost 1.5.3 库¶
Debian Wheezy 自带的 boost 库版本为 1.4.9,如果按此版本编译安装 ROS Indigo 的话会报以下错误:
1 |
|
查看相关文档得知,Indigo 对应的 boost 版本为 1.5.3,可以按 Getting Started on Unix Variants 编译安装,也可以下载我编译好的 deb 包进行安装(编译一次需要 N 个小时)。当然,如果你有兴趣的话也可以尝试编译自己的deb包,参考 https://github.com/ulikoehler/deb-buildscripts/blob/master/deb-boost.sh
下载 deb 包: boost-all_1.53.0-1_i386.deb boost-all-dev_1.53.0-1_i386.deb
安装:
1 2 |
|
安装 opencv 库¶
编译安装:
下载opencv 2.4.9 代码
环境准备
1 2 3 |
|
263 行
1 2 |
|
在 CMakeLists.txt 中 set(OPENCV_VCSVERSION "2.4.9")
1 2 3 4 5 6 7 8 |
|
上面这步可能需要运行 N 个小时
1 |
|
可能会出错
1 |
|
按照这里的 patch 对 cmake 进行修正:https://public.kitware.com/Bug/view.php?id=13488
附预编译的 deb 包: OpenCV-2.4.9-i686-libs.deb OpenCV-2.4.9-i686-dev.deb OpenCV-2.4.9-i686-python.deb
编辑安装 ROS¶
可以参考 Installing ROS Indigo on Intel Edison, Installing ROS Indigo on Raspberry Pi 进行安装,但有两点区别:
1.2 console_bridge:
在运行下面命令后
1 |
|
输入 2 并且将包名改为 'libconsole_bridge' .
3.2.2 Resolving Dependencies with rosdep
运行 rosdep install 的时候去掉 -y 参数,并且跳过 apt-get install libboost-all-dev.
error while loading shared libraries: libconsole_bridge.so.0.3: cannot open shared object file: No such file or directory
如果你遇到这个错误,可以通过下面方式处理
1 2 |
|
编译 usb_cam¶
usb_cam 的编译跟前面 ros_comm 类似:
1 2 3 4 5 6 7 8 9 |
|
你也可以在之前的工作区上操作,因为新工作区会导致某些包又要重新编译,但好处就是以后 make 跑的时间会短一点。
运行 usb_cam 将 Edison 图像传输到电脑¶
开始运行之前请确认主机跟从机都可以相互ping通,并且可以ping通自己。
现在主机运行:
1 |
|
主机上开多一个终端,运行:
1 |
|
Edison上编辑 launch 文件,运行
1 2 3 4 |
|
usb_cam.launch 的内容,假设你主机的名字为 lam
1 2 3 4 5 6 7 8 9 10 11 |
|
在 rviz 窗口上添加一个 Image,topic 为 /usb_cam/image_raw ,使用 compressed 传输。
Done.
Update 2017-04-22:
最终成果,由于加上电池后二轮平衡车难以平衡起来,干脆在万能的淘宝加工了几张有机玻璃板做成三轮车。Edison用串口跟单片机通讯,控制前进后退转弯。
发现 ROS 的确方便,除了跟底层通讯的模块用 C 写之外,其他用 python 写起来会感觉好享受。