ROS下的自主导航机器人软硬件设计

前言

作者这段时间参与了ROS下的机器人软硬件设计,虽然有许多不足的地方,但还是想写下这篇文章作为记录,供有需要的同好参考,如有错误的地方请批评指正。

环境篇

主要环境准备如下:

  1. 工控机:ubuntu16.04
  2. ROS: kinetic
  3. Nvidia TX2:JetPack3.3
  4. Nvidia TX2:CUDA9

硬件篇

主要硬件选型如下:

  1. 工控机:研华UNO-2484G-6731AE/i7-6600U
  2. 控制站计算机:Thinkpad T560
  3. 激光雷达: Velodyne16线激光雷达 VLP-16
  4. 摄像头:ZED2、ZED
  5. 数传设备:Rocket-M2
  6. 机械臂:Kinova
  7. 电机:MAXON电机
  8. 电机驱动器:Elmo
  9. GNSS接收机:Novatel OEM719、Novatel OEM718d
  10. 惯导元件:SBG Ellipse E
  11. 图像处理器:Nvidia TX2
  12. 遥控手柄:Xbox游戏手柄

机器人主要拥有两个模式,分别为遥控和自主模式,两个模式下依赖的硬件以及硬件连接简图如下:
ROS下的自主导航机器人软硬件设计

软件篇

主要介绍自主导航模式的实现,ROS下的自主导航一般依赖navigation功能包,不过这个包代码比较冗余,虽然可以通过插件的形式进行特定功能的修改,但是还是略略的感觉有点不方便,所以还是自己写了个框架,框架中的思想借鉴了navigation包,下图是ROS下该框架的功能节点图:

ROS下的自主导航机器人软硬件设计
ROS下的自主导航机器人软硬件设计
…………
…………

具体软件代码和实现思路等有时间另外写一篇介绍吧。0.0

通讯篇

由于涉及到ROS下的分布式多机通讯,原理与实践方式很简单,但是作者还是在这块遇到过一些小坑,所以独立写一篇进行介绍。

1、获取设备的IP地址和主机名
在终端中输入

ifconfig

可查看ip地址
若是通过网线连接,则在eth这一栏里找ip地址;
若是是通过wifi连接,在wlan这一栏找ip地址。

在终端中输入

hostname

可查看主机名

2、绑定设备的ip和主机名(可略)
在/etc/hosts可绑定ip与主机名,但需要通过geditvim进行修改(该文件是只读文件,无法直接修改)
若采用vim修改:

sudo chmod a+w /etc/hosts
vim /etc/hosts

按i进如修改模式,在开头加入绑定

id hostname

完成后,按下ESC键,输入 : wq 进行保存并退出

3、检测连接是否有误
若进行了第2步步骤,尝试直接ping对方主机名以测试连接

ping hostname

若没进行第2步,则ping ip地址,之后的操作中用ip地址代替主机名

ping ip

4、ROS_MASTER设置
设置可在终端中用以下命令设置

export ROS_MASTER_URI=http://主机的hostname:11311
export ROS_IP=http://本机hostname:11311

不过还是建议在.bashrc中进行修改
主从机都需修改.bashrc文件
在home目录中使用 Ctrl+h 显示隐藏文件,打开.bashrc文件
主机中加入

ROS_MASTER_URI=http://主机的hostname:11311
ROS_IP=http://主机的hostname:11311

从机中加入

ROS_MASTER_URI=http://主机的hostname:11311
ROS_IP=http://从机的hostname:11311

如果没有采用第2步绑定主机名和ip名,则以上hostname都用ip地址替代
以上内容部分参考ROS教程之network
5、其他
激光雷达和工控机之间也采用网口连接,也需进行通讯的配置,主要需要注意的是,雷达和工控机之间的通讯网段建议不与工控机和控制站计算机的通讯网段一样,另外有时会出现MAC地址和IP地址的映射表出错的情况,解决方法如下:
首先采用

arp -a

查看有无准确的地址映射,若没有,则

sudo arp -i enp3s0(具体以太网卡名) -s 192.168.1.201(ip地址) 60:76:88:10:59:3d(MAC地址名)

软硬件配合篇

1、ZED摄像头的使用
…………
…………
…………
2、TX2的使用
…………
…………
3、激光雷达的使用
…………
…………

gazebo仿真篇

…………

要去吃饭了,就先写到这里,等以后慢慢更新!