如何配置环境
本安装教程以ubuntu16系统环境为例,请根据个人需要自行修改安装
若开发者购买的是包含工控机的平台套件,出厂就已经安装好ubuntu操作系统并配置了开发需要的环境,可以直接开始初级教程的学习。 若开发者购买的是HandsFree不含工控机的平台套件,那么需要自己准备一台笔记本(也可以是树莓派、TX2等单板机),安装好ubuntu操作系统并配置好ROS和HandsFree的开发环境。 HandsFree的程序支持ROS的indigo版本和Kinetic,ubuntu14.04上只支持indigo,ubuntu16.04上只支持kinetic,可以参考ROS 官方安装教程。
本节介绍如何在Ubuntu 16.04上安装ROS Kinetic并配置HandsFree程序,HandsFree团队提供了适用于X86 CPU架构的ubuntu操作系统下的,开发环境一键配置脚本和一步步安装教程。
1 安装ubuntu16操作系统
第一步,开发者需要先准备一个安装好ubuntu操作系统的电脑。HandsFree提供了安装ubuntu操作系统的教程。
安装好操作系统后,开发者可以根据需求选择,一键安装脚本或者一步步安装的方式配置开发环境。如果一键安装脚本不能正常安装,也可以选择一步步安装方式。
1.1 解决中国大陆由于hosts问题导致的github文件无法下载的问题
首先我们先尝试打开这个链接 https://raw.githubusercontent.com/HANDS-FREE/handsfree/master/Documentation/auto_install_all_ubuntu16.04.sh
如果出现下面图片的显示
我们需要用文本编辑器打开 hosts 文件 ,(ctrl+alt+t )打开终端,输入下面的命令:
sudo gedit /etc/hosts
将下面的内容拷入,保存后,关闭文本编辑器
151.101.76.133 raw.githubusercontent.com
2 一键安装脚本(适用于ubuntu16)
如果你是HandsFree平台的用户,你安装完ubuntu系统后,可以通过运行我们提供的一键安装脚本来配置系统开发环境、安装ROS、和安装HandsFree的ROS程序。Tips:请注意系统的版本和脚本要对应。
查看系统版本命令 : cat /etc/os-release
如果你的系统版本是ubuntu16.04,安装HandsFree kinetic:(推荐安装ubuntu16.04)
cd ~
wget https://raw.githubusercontent.com/HANDS-FREE/handsfree/master/Documentation/auto_install_all_ubuntu16.04.sh
bash auto_install_all_ubuntu16.04.sh
Tips: 如果文件无法下载,请按照上一步解决中国大陆由于hosts问题导致的github文件无法下载的问题
一键安装脚本执行后成功后,请跳过下一步的"一步步安装",直接进入开发环境测试,测试成功后开发者就可以开始初级教程的学习了。 如果安装过程中失败或者测试失败,则按照"一步步安装"教程重新安装。
3 一步步安装(适用于ubuntu16)
3.1 下载Handsfree的代码
更新软件列表
sudo apt-get update
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。 这每一条网址就是一个源,这个地址指向的数据标识着这台源服务器上有哪些软件可以安装使用。 而这个源列表就是 sources.list 这个文件,在哪个目录下,之后会提及到。
安装git
sudo apt-get install -y git
git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,而我们的 HandsFree 代码就放在了git的远程仓库中。通过安装的 git ,我们可以用其相关的命令来将远程仓库中的代码下载到本地。
下载Handsfree的代码
mkdir -p ~/handsfree/handsfree_ros_ws/ cd ~/handsfree/handsfree_ros_ws/ git clone https://github.com/HANDS-FREE/handsfree.git src/handsfree/
我们需要创建一个文件来存储你从git远程仓库中下载下来的文件,这样便于方便管理和查看。
我们需要进入创建好的handsfree_ros_ws目录下,来执行相关的命令,这样才能准确的将文件下载到这个 目录下。
通过 git 命令将 https://github.com/HANDS-FREE/handsfree.git下的所有文件下载到 src 目录下,当下载完成后,handsfree_ros_ws 目录下会多出一个 src 目录,该目录下将存放你下载下来的文件。
你可以通过打开该文件查看是否已经下载完成
对源列表 sources.list 文件进行备份,你可以通过在对应为文件夹下查看是否多出该文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
这里通过命令将最初的 sources.list 文件复制了一份,并命名为 sources.list.backup。你可以通过
gedit /etc/apt/sources.list
命令查看其中的内容,如果直接双击打开,你将看不到里面的内容。进入 script 目录下,将该目录下的 sourcesubuntu_16_04.list 复制一份,将 sources.list 源列表替换,你可以通过
gedit /etc/apt/sources.list
查看内容是否被替换了cd ~/handsfree/handsfree_ros_ws/src/handsfree/Documentation/script sudo cp sources_ubuntu_16_04.list /etc/apt/sources.list
因为最初 sources.list 中的网址都是国外的网址,我们可以访问,但是会很慢。所以就需要通过国内的网址来替代这些国外的网址。
更新软件列表
sudo apt-get update
由于我们将之前的源列表替换成了国内的,所以需要再次更新一次。
3.2 安装ROS
进入 script 文件中,在终端运行写好的 ros_kinentic_base.sh 脚本,bash 的作用就是读取 ros_kinentic_base.sh 中的命令
cd ~/handsfree/handsfree_ros_ws/src/handsfree/Documentation/script bash ros_kinetic_base.sh
ros_kinetic_base.sh 这个文件中是写好的命令,这些命令都是为了安装ROS。为了方便用户的安装,我们将其这些命令变成一个脚本文件,只需要运行该脚本文件就能将这些命令执行,不需要用户一步一步的来输入这些命令。就相当于我们之前的一键安装脚本。(可能需要输入管理员密码)
经过漫长的等待,我们算是完成了安装,关闭这个终端,重新打开一个终端运行:
roscore
不要关掉上一个终端,再次打开一个终端运行:
rosrun turtlesim turtlesim_node
如果出现下图左边的小乌龟界面,则表示ROS安装成功了
3.3 安装ROS常用第三方包
和安装 ROS 相似,需要在终端运行写好的 ros_kinetic_ext.sh 脚本文件来安装常用的ROS功能包
cd ~/handsfree/handsfree_ros_ws/src/handsfree/Documentation/script bash ros_kinetic_ext.sh
你会遇到 File to patch:
我们只需要点击回车,然后键入 y,再次回车(一共需要重复 4 次)
3.4 安装HandsFree ROS包
source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
source ~/.bashrc
进入src目录,将该目录作为catkin工作空间 ,并初始化
cd ~/handsfree/handsfree_ros_ws/src catkin_init_workspace
catkin_init_workspace
命令把当前目录初始化为一个ROS工作空间。进入handsfree_ros_ws,编译该工作空间
cd ~/handsfree/handsfree_ros_ws/ catkin_make
catkin_make
命令就是编译该工作空间,执行成功后,如图所示
将 source ~/handsfree/handsfree_ros_ws/devel/setup.sh 写入到 bashrc 文件中
echo "source ~/handsfree/handsfree_ros_ws/devel/setup.sh" >> ~/.bashrc
此命令就是向当前用户添加ROS的环境变量
重新执行刚修改的 .bashrc 文件使之立即生效,而不必注销并重新登录。
source ~/.bashrc
3.5 设置HandsFree环境变量
打开用户的 .bashrc文件
gedit ~/.bashrc
shell是一个命令行解释器,是linux内核的一个外壳,负责外界与linux内核的交互。存在很多不同的 shell ,bash 就是其中之一。而 Ubuntu16.04 的 shell 就是 bash。
当你打开一个 terminal(终端)时,操作系统会将 terminal 和 shell 关联起来,当我们在 terminal 中输入命令后,shell 就负责解释命令。
不管哪种 shell 都会有一个 .bashrc 的隐藏文件,它就相当于 shell 的配置文件,用来存储并加载你的终端配置和环境变量。
找到环境变量HANDSFREE_ROBOT_MODEL,
stone_v3
是机器人的型号,需要将这个值改为你机器人的型号,可以在[mimi,stone_v2,stone_v3,giraffe]
这四种型号中选择。### MODEL type [mini, stone_v2, stone_v3, giraffe] export HANDSFREE_ROBOT_MODEL=stone_v3
3.6 设置usb规则
进入 Documentation 文件夹下,在终端运行写好的 ros_kinetic_ext.sh 脚本文件
cd ~/handsfree/handsfree_ros_ws/src/handsfree/Documentation/ bash set_usb_env.sh
这个文件用于修改给系统的 usb 规则,因为机器人上有许多的设备。如果没有任何关于权限上和映射关系上的处理就会导致无法正常启动这些设备。
4 开发环境测试
安装成功后,可以使用USB连接到机器人,打开新的终端,然后执行:
roslaunch handsfree_hw handsfree_hw.launch
如果一切正常,会显示:
auto-starting new master
process[master]: started with pid [9562]
ROS_MASTER_URI=http://Robot:11311
setting /run_id to ffa41cce-05bd-11e8-8df0-001e64f02337
process[rosout-1]: started with pid [9575]
started core service [/rosout]
process[handsfree_hw_node-2]: started with pid [9585]
process[mobile_base/controller_spawner-3]: started with pid [9589]
process[robot_state_publisher-4]: started with pid [9591]
[ERROR] [1517317423.863958024]: hf link initialized failed, please check the hardware
[INFO] [WallTime: 1517317424.295263] Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] [WallTime: 1517317424.298319] Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] [WallTime: 1517317424.301498] Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] [WallTime: 1517317424.304670] Loading controller: joint_state_controller
[INFO] [WallTime: 1517317424.351596] Loading controller: servo1_position_controller
[INFO] [WallTime: 1517317424.399306] Loading controller: servo2_position_controller
[INFO] [WallTime: 1517317424.419282] Loading controller: mobile_base_controller
[INFO] [WallTime: 1517317424.469234] Controller Spawner: Loaded controllers: joint_state_controller, servo1_position_controller, servo2_position_controller, mobile_base_controller
[INFO] [WallTime: 1517317424.479183] Started controllers: joint_state_controller, servo1_position_controller, servo2_position_controller, mobile_base_controller
打开新的终端,继续执行:
roslaunch handsfree_hw keyboard_teleop.launch
现在你可以遥控机器人行走。如果机器人能正常遥控,则说明环境配置成功。