## **1. PC端软件**
配备的u盘系统已经完成了系统安装和编译环境设置的步骤。
**对于刚完成lilinux系统安装的PC机**,第一次进入系统后,主目录为空,需要进行以下设置:
### **1.1 编译lili_robot软件**
* 在PC机建立工作空间catkin_ws
~~~
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
$ echo
~~~
* 下载代码到PC机
~~~
$ cd ~/catkin_ws/src
#安装键盘控制ROS包
$ git clone https://github.com/Forrest-Z/teleop_twist_keyboard.git
#拷贝ROS源码到src目录
#安装navigation包和slam-gmapping包
sudo apt-get install ros-kinetic-navigation
sudo apt-get install ros-kinetic-slam-gmapping
#修改~/.bashrc文件,增加下面一行
source /home/lili/catkin_ws/devel/setup.bash
#使能.bashrc
$source ~/.bashrc
~~~
### **1.2 免密码ssh方式登录树莓派系统**
在PC端远程登录树莓派系统,远程调试和部署lili_robot软件。
PC系统通过ssh服务与树莓派系统连接。若机器人树莓派系统的局域网IP是 192.168.1.101,则连接方式如下:
* 配置SSH公钥——在PC端运行
~~~
$ ssh-keygen
~~~
* 一直回车选择默认选项,会在~/.ssh 目录下生成id_rsa 和 id_rsa.pub 两个文件。将id_rsa.pub文件远程拷贝到车载系统中。
~~~
$scp ~/.ssh/id_rsa.pub lilibot@192.168.1.101:/home/lilibot
~~~
* 配置车载端——远程登录车载系统
~~~
$ ssh lilibot@192.168.1.101
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
~~~
将 id_rsa.pub 的文件内容追加写入到远程计算机的~/.ssh/authorized_keys 文件,并修改文件权限。
这样配置完成后,远程ssh登录车载系统,无需密码。
### **1.3 Roboware studio 远程开发配置**
* 修改树莓派系统/etc/profile
ssh远程登录以后,执行下面操作
~~~
$ sudo su
$ echo "source /opt/ros/kinetic/setup.bash" >> /etc/profile
~~~
将ros环境变量信息写入/etc/profile文件
* 远程参数配置
首先在树莓派系统中建立工作空间,用于从PC上远程部署树莓派系统的ros代码
~~~
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
wstool init src
~~~
启动 RoboWare Studio 后,点击“远程参数配置”按钮,依次配置远程计算机 IP 地址、
远程计算机用户名、本地计算机密钥文件、远程计算机部署路径参数,如下所示。
![Roboware远程参数配置](images/roboware_remote.png)
* 远程部署
在资源管理器视图下,选择“Remote Deploy”远程部署选项,点击列表左侧的按钮
进行远程部署。RoboWare Studio 会将当前整个工作区的源代码部署到远程计算机的指定路
径下(请参照上一节的“远程参数配置”进行远程部署路径的设置)。
![远程部署](images/remote_deploy.png)
* 远程构建
在资源管理器视图下,选择“Debug (remote)”构建选项,点击列表左侧的按钮进行远程构建。RoboWare Studio 会将构建指令发送到远程计算机,并在“输出”窗口显示构建信息。
![远程构建](images/remote_debug.png)
本地修改代码文件后,切记执行远程部署和远程构建这两步。
## **1.4 PC端的遥控手柄配置**
joy包是支持所有的Linux的操作手柄的一个包。这个包有一个用来作为操作手柄到ROS的接口的节点:joy_node.里面包含有操作手柄的按键和轴的信息。
这个驱动会论询可以读的端口,这个端口里会发布操作手柄的状态信息。如果这个端口关闭或者读取失败,它会重新打开该端口。操作手柄的轴的信息范围在[-1,1],按钮的为0是关闭,1是开。
安装joy包(提供的lilinux镜像文件里已经设置过了),
~~~
sudo apt-get install ros-kinetic-joy
~~~
使用方法,
* PC机器连接手柄(蓝牙或者有线)
* 查看joy端口,确定端口的rw权限。如果没有,用chmod命令添加rw权限。
~~~
ls /dev/input
~~~
使用北通神鹰手柄时,只能看到js0
~~~
ls -l /dev/input/jsX // X为数字,0或者1
chmod a+rw /dev/input/jsX
~~~
在PC端,指定使用的端口,打开joy_node节点
~~~
rosparam set joy_node/dev "/dev/input/jsX"
rosrun joy joy_node
~~~
## **1.5 树莓派的USB端口设置**
激光雷达通过usb端口连接到树莓派板子上;树莓派经过导航计算后,发送转速控制指令到usb连接的omnibase控制板。
树莓派运行的ubuntu系统,是按照插入的usb设备的先后顺序来定义端口名称的,例如ttyUSB0,ttyUSB1。插入设备的先后顺序不同,端口号也会随着发生变化。这时候可以用到udev规则,实现给在特定的USB端口上的特定设备一个自定义的设备文件链接。lili_robot软件包中已经写好了usb端口设置的脚本,指定了RPlidar A1雷达的端口(/dev/rplidarA1),以及omnibase控制板的usb端口(/dev/omnibase)。脚本udevinstall.sh内容如下:
~~~
#!/bin/bash
# YDLidar
echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="lidar"' >/etc/udev/rules.d/rplidar-a1.rules
# STM32 Base
echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="666", SYMLINK+="base"' >/etc/udev/rules.d/stm32base.rules
service udev reload
sleep 2
service udev restart
~~~
连接好雷达和omnibase控制板,ssh远程登录树莓派系统后,运行以上脚本;
`$ sudo ./udevinstall.sh`
并重启udev服务,重启树莓派板子
~~~
$ sudo /etc/init.d/udev restart
$ sudo reboot
~~~
在树莓派上运行以下命令,查看是否建立端口映射:
~~~
$ ls -l /dev |grep ttyUSB
正常会显示
lrwxrwxrwx 1 root root 7 2月 12 2016 base -> ttyUSB0
lrwxrwxrwx 1 root root 7 7月 4 12:21 lidar -> ttyUSB1
crw-rw-rw- 1 root dialout 188, 0 2月 12 2016 ttyUSB0
crw-rw-rw- 1 root dialout 188, 1 7月 4 12:21 ttyUSB1
已经建立起端口映射关系
~~~