HUSKY导航——从无到有

  • HUSKY A200介绍
    • 硬件层面
    • 软件层面
      • 重装系统
        • 备份主机:
        • 重装主机
      • 导航配置
        • husky远程控制
        • ROS多机通讯
        • 导航功能的配置

HUSKY A200介绍

赫斯基(Husky)是一款坚固耐用,可在户外使用的无人机(UGV),适用于研究和快速成型应用。本文主要介绍从硬件到软件怎么构造husky a200机器人的导航功能。
说明:本文适合有Linux和ROS一定基础的读者阅读,主要为了阐述整个导航过程的配置都需要做什么,如果读者实际做的过程中遇到了问题,就针对问题百度、google或者CSDN去查一下具体的问题出在哪儿,毕竟不可能把每一步遇到的问题都在写在文中。

硬件层面

要实现机器人的导航功能,就需要一系列的硬件,包括机器人的主机、传感器、无线网卡等,整个车搭建完之后如下图所示。


机器人主机有两个选择,一个是husky机器人自带的MINI-ITX主机,另一个选择是NVIDAI公司的jetson tx2;本文使用MINI-ITX主机,改主机的缺点是没有GUI界面,只有一个终端,因此需要利用多机通讯来配置机器人的导航功能;如果你想使用jetson tx2,你可以参照husky官网了教程来进行配置。

链接: husky官方.

要实现导航功能,就必须使用传感器的数据,本次导航的实现使用的传感器有:日本北洋的hokuyo激光雷达、imu_um7、Load MicroStrain 3DM-GX3陀螺仪、机器人的轮式编码器(封装在车中)。

主机:

激光雷达:

注意hokuyo的供电电压是12V,机器人里有12V的供电口,如果没有单独的电源,可以去店订制相应的线给激光雷达供电。

惯性传感器:

无线网卡就使用买机器人时提供的无线网卡,不要用自己的无线网卡,husky可能无法驱动。整个硬件系统组装起来后上文所示。

软件层面

注:该部分的讲解需要读者有一定的Linux命令行以及ROS的基础,关于Linux命令行的基础主要掌握一些对于文件的操作,ROS主要是了解节点、话题、服务等名词的含义以及ROS的通讯机制。ROS的安装以及基本的教程本文不加赘述,可参照ROS官方的教程。

链接: ROS官方教程.

重装系统

首先第一步就是重装MINI-ITX系统,具体的方法在上文husky 的官网连接里都有说明,建议装Ubuntu16或者Ubuntu18这两个版本。这里主要强调几个需要注意的地方:

备份主机:

官方教程有很多备份当前系统的方法,比如做成ISO镜像,里面的方法有的也比较复杂,所以不建议备份整个系统,这里主要需要备份两个文件夹,interfaces文件里面配置了机器人的无线网卡与WIFI的连接(配置完成之后就不用每次都在终端重新输入命令行来配置网络),第二个文件夹里面包含了机器人开机之后会自动启动的ROS节点这两个文件如果不备份的话重装系统之后系统开机将不会有任何的ROS信息(通讯指示灯为红色)。如果需要自定义自己的启动文件这里就必须注意没多一个launch文件,就要在.installed_files文件中加入对应的文件名(顺序也必须对应),不然机器人就无法通讯(通讯指示灯为红色)。网络环境的配置就按照备份文件的配置即可。

文件:

位置 描述
/etc/network/interfaces 机器人的网络环境配置
/etc/ros/kinetic/ros.d/*.launch 机器人开机自启动文件

开机自启动文件夹:


配置自启动的launch文件:

网格配置(interfaces文件):

// 文件配置,启动了一个无线网卡,输入需要连接的wifi名字以及wifi密码
auto wlan0
iface wlan0 inet dhcp
wpa-ssid HIT_E304_2.4G
wpa-psk zhinengjiqiren

重装主机

下面的链接里有Ubuntu16的ISO镜像文件,重装的过程主要分成以下几个步骤:
链接: ISO镜像文件.

  1. 下载镜像文件;

  2. 使用刻录镜像文件的软件刻录镜像到自己的U盘当中(这个过程和装双系统Ubuntu的过程很相似),楼主使用的是UltraISO,刻录的方法与刻录Ubuntu系统的方法一样,这里不加赘述;

  3. 开始重装系统,插入U盘,MINI-ITX进行BIOS界面的方法是按F5,进入BIOS界面之后选择自己的U盘,然后一直跟着提示走就行,重装的过程中保证机器人一直在有网的状态下进行(使用网线连接),持续的时间可能会比较久,建议将机器人充满电之后重装;

  4. 测试机器人的通讯,确保所有的外设都连接在机器人上。给机器人装一个显示器和一个键盘,开机,机器人的用户名是administrator,密码是clearpath。在终端进行下列操作:

连接外围设备:

rosrun husky_bringup install

要测试您的配置,请使用以下命令启动后台服务:

sudo systemctl start ros

沙哑的COMM指示灯应从红色变为绿色;
矫正磁力计,husky将在校准过程中自动旋转。确保拔下所有外部电缆,并且哈士奇在1米半径范围内有无障碍的移动空间。这里必须通过ssh在Husky计算机上远程执行校准脚本(在下文有具体介绍):

rosrun husky_bringup calibrate_compass

至此,机器人硬件部分介绍完毕。

导航配置

机器人软件层面主要介绍,husky多机通讯、远程控制的配置以及机器人导航功能的配置。

husky远程控制

使用ssh工具实现远程控制,使用自己的电脑作为客户端;把机器人当作服务器,打开客户端的Ubuntu终端下载ssh客户端:

sudo apt-get install openssh-client

启动客户端和服务器ssh:

sudo /etc/init.d/ssh start

在客户端终端输入以下命令行进行远程控制:

//ssh 客户端用户名@服务器ip地址
ssh administrator@192.168.1.196

输入服务器密码即可远程控制服务器。

ROS多机通讯

要更改客户端(以下称主机)和服务器(以下称机器人)的网络配置文件。
1.配置主机:
首先你要知道主机的名字和ip地址,查询的方法如下:

//lm-QiTianM5900-D134就是你的主机名字——主机名字
lm@lm-QiTianM5900-D134:~$ hostname
lm-QiTianM5900-D134//inet 地址:192.168.1.153就是你的ip地址——主机ip
lm@lm-QiTianM5900-D134:~$ ifconfig
enp4s0    Link encap:以太网  硬件地址 f4:4d:30:7a:75:99  UP BROADCAST MULTICAST  MTU:1500  跃点数:1接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0发送数据包:0 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:1000 接收字节:0 (0.0 B)  发送字节:0 (0.0 B)lo        Link encap:本地环回  inet 地址:127.0.0.1  掩码:255.0.0.0inet6 地址: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  跃点数:1接收数据包:2279 错误:0 丢弃:0 过载:0 帧数:0发送数据包:2279 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:1000 接收字节:277296 (277.2 KB)  发送字节:277296 (277.2 KB)wlx08beac06a35d Link encap:以太网  硬件地址 08:be:ac:06:a3:5d  inet 地址:192.168.1.153  广播:192.168.1.255  掩码:255.255.255.0inet6 地址: fe80::2ac0:ba1f:487f:a7d0/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1接收数据包:100240 错误:0 丢弃:0 过载:0 帧数:0发送数据包:56889 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:1000 接收字节:49196840 (49.1 MB)  发送字节:8705596 (8.7 MB)

当然机器人的名字、机器人ip查询方法一致。接下来配置你的主机,打开主机的两个文件并在两个文件分别加入以下语句:

// 打开文件
lm@lm-QiTianM5900-D134:~$ sudo vim ~/.bashrc//文件末端加入下列行
export ROS_HOSTNAME=主机名字
export ROS_MASTER_URI=http://机器人ip:11311//打开hosts文件
lm@lm-QiTianM5900-D134:~$ sudo vim /etc/hosts//文件相应位置添加以下语句
27.0.0.1        localhost
127.0.1.1       lm-QiTianM5900-D134主机ip  主机名字
机器人ip  机器人名字//这两行是添加进来的
//例如
//192.168.1.153 lm-QiTianM5900-D134
//192.168.1.196 lm.lm lm# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

接下来配置机器人文件:

//打开hosts文件
administrator@lm:~$ sudo vim /etc/hosts//文件相应位置添加以下语句
127.0.0.1 localhost
127.0.1.1 lm.lm lm机器人ip 机器人名字
主机ip 主机ip//这两句是添加进来的
//例如
//192.168.1.196 lm.lm lm
//192.168.1.153 lm-QiTianM5900-D134# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

到这里为止,你已经可以用自己的主机控制机器人,还能在自己的主机上查看到机器人运行的一些ROS话题等内容。

导航功能的配置

这里解释一下多机通讯和远程控制的区别,远程控制(ssh)目前只是让你可以在自己的主机上去控制机器人,多机通讯是指主机和机器人之间进行ROS通讯,为什么要进行通讯呢?回到文中开头提到的MINI-ITX主机没有GUI界面只有一个终端,当我们配置好导航功能包之后运行整个程序,这时候能看到机器人终端会有一些代码提示,这不方便我们配置导航的一些参数,所以我们需要使用ROS中一个强大的可视化工具——RVIZ,让机器人的数据包括地图信息等内容显示在可视化的界面中。但是机器人主机的ROS没有RVIZ这个功能,因为它只有终端,所以要让机器人和主机进行通讯,在主机上能得到机器人的ROS信息并使用主机的RVIZ去显示机器人的数据,方便我们配置导航功能。
希望读者在实际操作之前去wiki认真学习以下move_base导航的配置功能,楼主这里贴一个古月居的教程,大概知道整个流程就行:

链接: move_base教程.

为了更好的去实现实物导航功能,可以先去跑一下导航仿真,最好是用源码安装的方法去跑而不是apt install功能包跑。仿真的方法在husky官网中也有介绍,当然官网是用功能包去运行的仿真,读者可以下载源码来运行,这里不加赘述,官网链接在上文:

  1. 在机器人系统中创建工作空间:
//创建工作环境
mkdir -p ~/husky_kinetic_ws/src
cd ~/husky_kinetic_ws/
//编译工作环境
catkin_make
  1. 源码安装本次导航所需要使用的算法放在工作空间下:
//注:以下源码都需要切换分支到适合ubuntu16.04 + ROS kinetic的版本,git切换分支的方法不加赘述。//关于husky机器人一些基本功能的配置,里面包含了仿真的实物需要的一些配置
git clone https://github.com/husky/husky.git
//导航的关键,这个包里面有关于机器人(amcl)定位、规划所需要的源码
git clone https://github.com/ros-planning/navigation.git
//hokuyo的驱动包
git clone https://github.com/ros-drivers/urg_node//回到工作空间进行编译,相信编译大概率会报错,读者根据报错的信息去下载所需要的软件包即可。
cd ~/husky_kinetic_ws/
catkin_make
  1. 首先是创建地图(在这个部分读者顺便学习一些雷达驱动的方法),以下链接介绍了从驱动雷达到使用hector_slam算法建图的方法,建图过程中建议使用自己的笔记本手拿着激光建图,不用机器人。当然这篇文章使用的是hokuyo_node来驱动的雷达,上文提到的使用urg_node包来驱动,二者均可。驱动雷达只是为了让计算机能得到雷达的扫描数据也不用对雷达数据进行处理。建图的过程如果你对ROS不是很熟悉,那还是别用slam_gmapping建图,因为这种建图方法需要里程计数据,而hector_slam不用里程计数据。
    链接: hector_slam.
    建图完之后保存地图即可:
rosrun map_server map_saver -f mymap
  1. 配置机器人的导航功能,简单来说就是把这些包都串起来即可。
// 写导航配置的功能包
cd ~/husky_kinetic_ws/src/husky_navigation/launch
sudo vim test.launch//把以下代码放入到该文件中
<launch><!--  --><arg name="model" /><arg name="gui" default="False" /><!-- 启动机器人的urdf描述,机器人本身的静态tf变换都写在这里面 --><arg name="robot_namespace" default="/"/><arg name="laser_enabled" default="$(optenv HUSKY_LMS1XX_ENABLED false)"/><arg name="realsense_enabled" default="$(optenv HUSKY_REALSENSE_ENABLED false)"/><arg name="urdf_extras" default="$(optenv HUSKY_URDF_EXTRAS)"/><param name="robot_description" command="$(find xacro)/xacro '$(find husky_description)/urdf/husky.urdf.xacro'--inorderrobot_namespace:=$(arg robot_namespace)laser_enabled:=$(arg laser_enabled)realsense_enabled:=$(arg realsense_enabled)urdf_extras:=$(arg urdf_extras)" /><!-- 启动激光雷达,注意一般计算机上的串口是/dev/ttyACM0,但是husky的串口名字有可能是/dev/ttyACM1,如果驱动不上就换一个串口试试 --><node name="urg_node" pkg="urg_node" type="urg_node" output="screen"><param name="serial_port" type="string" value="/dev/ttyACM1" /><param name="frame_id" type="string" value="base_laser" /></node><!-- 启动激光雷达到机器人自身坐标系的坐标变换 --><node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" args="0.3 0.0 0.35 0.0 0.0 0.0 /base_link /base_laser 50" /><!-- 启动机器人的静态tf变换,这些变换在机器人的urdf文件中已经写过 --><node name = "robot_state_publisher" pkg = "robot_state_publisher" type = "state_publisher"><param name = "publisher_frequency" value = "20.0"/></node><node name = "joint_state_publisher" pkg = "joint_state_publisher" type = "joint_state_publisher"><param name = "use_gui" value = "False"/><param name = "rate" value = "20.0"/></node><!-- 该包可能融合传感器数据生成一个新的里程计数据,可用可不用 --><!--node pkg = "robot_pose_ekf" type = "robot_pose_ekf" name = "robot_pose_ekf"><remap from = "robot_pose_ekf/odom_combined" to = "odom_combined"/><param name = "freq" value = "10.0"/><param name = "sensor_timeout" value = "1.0"/><param name = "publish_tf" value = "true"/><param name = "odom_used" value = "true"/><param name = "imu_used" value = "true"/><param name = "vo_used" value = "false"/><param name = "output_frame" value = "odom"/><param name="use_sim_time" value="false" /></node--><!-- 加载地图,在上面建图完成保存之后会有两个文件 --><arg name="map" default="sys_mapping.yaml" /><node name="map_server" pkg="map_server" type="map_server" args="$(find cbh)/maps/$(arg map)" /><!-- 注意这里的地图位置自己决定放在哪儿 --><!-- 加载一个定位工作,该包通过融合机器人的传感器数据得到机器人odom坐标系到机器人base_link坐标系的坐标变换 --><node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization"><rosparam command="load" file="$(find cbh)/configs/localization.yaml" /></node><!-- 启动move_base包,该包主要完成机器人导航的路径规划部分 --><include file="$(find husky_navigation)/launch/move_base.launch" /><!-- 启动amcl定位功能包 --><include file="$(find husky_navigation)/launch/amcl.launch" /></launch>

到此为止,机器人的导航功能配置就结束了,接下来测试一下你的导航功能包吧。

cd ~/husky_kinetic_ws/
source devel/setup.bash
roslaunch husky_navigation test.launch

如果运行结果没报错,那恭喜你,你的导航功能配置成功了,当然这里说一句,这些都是通过ssh远程控制机器人的终端下实现的,接下来使用主机运行RVIZ。

rosrun rviz rviz

怎么在你的主机配置你的rviz功能呢?下面这个wiki链接教你怎么配置rviz中所需要显示的数据。
链接: RVIZ配置.

HUSKY导航——从无到有相关推荐

  1. 最近爆火的高德AR导航!别告诉我你是最后一个知道的

    近日在短视频上有关[高德AR导航]的相关视频成为爆款,得到了广大用户的欢迎和点赞,下面就和大家一起分享,高德AR导航从无到有的体验设计原则和背后思考. 高德AR导航效果 各大公司入局AR现实增强领域, ...

  2. ROS示例----导航功能包Husky_exploration

    ROS导航功能包示例husky amcl gmapping slam exploration 此功能包包含如下文件: 结构如下: $ tree -L 2 . ├── CMakeLists.txt -& ...

  3. husky的仿真建图和导航

    建图 step1:请确保husky的导航功能包已安装好 $ sudo apt-get install ros-indigo-husky-navigation step2:分别在3个终端运行如下命令 & ...

  4. 如何从无到有搭建to B平台?

    咳咳,做一个产品首先要说的是需求.呃呃呃,需求太抽象了,不太像人话,还是说点人话吧,做一个产品或者功能的前提是回答一个问题"为了谁解决什么问题,解决到什么程度,花多少资源,达到什么效果?&q ...

  5. 北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略

    原标题:[导航论坛]北斗三号卫星导航信号及接收策略 编者按 以"5G/GNSS高精度定位与空间数据深度应用"为主题的高峰论坛上,来自清华大学的陆明泉教授为与会代表带来了题为< ...

  6. SkyEye卫星篇:从无到有的国之“芯”

    ​01.卫星意味着什么? 卫星通常指发射到太空中并围绕地球或太空中的其他天体运动的机器.卫星所具备的鸟瞰图能让使用者同时看到地球的大片区域.目前,有超过2787颗活跃的人造卫星正在绕地球运行. ▲图源 ...

  7. 从无到有axure原型设计_Axure|微信原型制作

    本篇文章,是作者想要了解下产品常用工具Axure.Axure看似简单 ,实则也非常考察逻辑能力.我计划做一个微信原型,但无从下手,开始只找到一篇三年前的文章: 虽然过去了很长时间,但作者在里面表达的原 ...

  8. (干货)一文了解导航电子地图领域有哪些前沿热点技术

    在整个导航电子地图产业链上,主要有地图测绘.POI 信息采集商.导航电子地图制作商.导航电子地图软件和系统方案解决商.GPS芯片等零件生产商.终端设备制造商和最终消费者.在整个产业链上,导航电子地图是 ...

  9. 酷狗音乐的爬取,基于python,从无到有完整教程-上:搭建环境及爬取原理讲解

    酷狗音乐的爬取,基于python,从无到有完整教程,使用微软新edge作为虚拟浏览器 搭建环境及爬取原理讲解 ⬇⬇⬇ 编码环境及工具准备: 编码工具:PyCharm 所需的库: import requ ...

最新文章

  1. Caffe源码中各种依赖库的作用及简单使用
  2. java.io包和杯子测楼
  3. python 帮助文档、自我解释
  4. 重庆python就业工资待遇-重庆达内毕业的Python学员都在做什么?能拿多少工资?...
  5. 一图秒懂P2P、P2C 、O2O 、B2C、B2B、C2C
  6. linux快速复制大量小文件方法
  7. Mac Hadoop的安装与配置
  8. php购票排位_用PHP+MySQL实现12306购票和退票以及余票查询逻辑
  9. sublime text3c语言编译运行,c – Sublime text 3 – 编译程序并在终端中运行
  10. OCR完整技术栈10天掌握!教程完全开源,更有产学研大佬们联合授课!
  11. Android获取手机和系统版本等信息的代码
  12. IO之StringIO和BytesIO
  13. 电商设计提升水平,需要优秀的模板素材进行临摹练习!
  14. 矩池云上安装yolov4 darknet
  15. 用Excel做简单的数据分析
  16. Collection NSArrayM was mutated while being enumerated
  17. SequoiaDB 网络通信三剑客(maxsocketpernode,maxsocketperthread,maxsocketthread)
  18. 思科警告:旗下某些产品可能存在无法修补的WannaCrypt漏洞
  19. 云服务器系统esxi,云服务器安装esxi
  20. 3d slicer matlab,使用3D Slicer进行颅骨去除

热门文章

  1. 计算机桌面怎么能添加文字,怎么在桌面上添加文字便签
  2. XSS Challenges xss-quiz.int21h.jp
  3. 【Qt实战派学习群】 建立啦!
  4. 卸载linux 装win7系统软件,win7与ubuntu双系统完美卸载ubuntu的方法
  5. gdb、ida调试笔记
  6. 数据分析应用在传统运营后变身数据化运营
  7. stm32 SWD调试接口的使用
  8. 上半年要写的博客文章21
  9. 入门,前后端实现简单账号密码登录
  10. 利用OpenCV进行动态画椭圆,直线,矩形