SLAM小车系统配置与软件安装过程
WH-Robot2 SLAM小车系统配置与软件安装过程
---边城量子(wechat:shihezichen), 2018.09.09
- 概述
- 背景:
- 出于成本考虑,只购买了维航科技的小车底盘(含STM32F1板和底盘、电机、电机驱动板、摄像头等),其他的零件重用自己原来的(如树莓派、激光雷达);
- 目标:
- 目的1:在此底盘之上,组装一辆SLAM小车,能够进行基本建图和导航,为以后研究做好硬件基础;
- 子目标1: 安装好WH-Robot2所需的树莓派、PC机软件系统,使得PC和树莓派之间可以正常进行通信;
- 子目标2: 在树莓派上安装相关的SLAM开源组件并调试通过;
- 目标2: 将www.wh-robot.com上的零散的教程串接起来, 形成一个场景化的安装教程,同时做少量增强,也避免后来者再走这些弯路;
- 前提条件:
- 硬件--小车底盘: 小车底盘和电源灯都已经组装完毕(具体底盘的组装教程参见维航网站,硬件安装没啥可讲的,按照网站上的做就是了,有问题可以咨询维航的技术服务人员)
- 硬件--其他硬件: 树莓派、树莓派所需的屏幕和键盘(或超级终端代替)、SD卡(16G)、读卡器;
- 在windows上安装好ubuntu 16.04 的虚拟机;
- 技能要求: 会在linux下使用vi修改文件;
- IP规划:
- 树莓派和PC两者规划信息如下, 其中PC的Ubuntu已经安装好, 树莓派的待安装:
设备 |
操作系统 |
ROS角色 |
IP |
hostname |
树莓派 |
Ubuntu Mate 16.04 for ARM |
Node |
192.168.2.104 |
mbees-desktop |
PC |
Ubuntu for X86 |
Master |
192.168.2.201 |
rosmaster 备注:可以是运行在Windows上的虚拟机,也可以是独立的Ubuntu; |
PC |
Windows |
NA |
备注:仅仅作为操作发起机器,从这台机器发起各项安装指令 |
* 以下将使用树莓派和PC分别指代上述两台设备树莓派Ubuntu 和PC Ubuntu;
* 各自的IP地址规划可能不同, 可根据自己网络规划改成相应的值,注意部分步骤里面也要把IP替换为自己的值;
- 完整过程:
- 安装小车底盘
- 安装树莓派到小车地盘上
- 安装激光雷达到小车底盘上
- 树莓派软件
- PC Ubuntu软件
- WHBOT2小车配置与软件安装(SLAM建图与导航)
以下步骤从第(4)开始讲起,前面的硬件组装需要参考网站或自行咨询维航技术人员解决。
- 在windows机器上,下载树莓派所用的ubuntu image和烧录软件
对应教程: “[WHBOT2]共享资料下载”: http://www.wh-robot.com/whb/?p=876
备注: 以下过程对上述教程步骤有所补充
- 下载软件:
- 烧录镜像到树莓派的SD卡的软件, 运行子啊windows上,
- win32 Disk Imager
- 下载image:
- 树莓派所需的Ubuntu Mate系统的镜像
- whrobot-lubuntu-16.04.2-desktop-armhf-raspberry-pi.img
- 下载ros包源码:
- 运行于树莓派上的ubuntu上的ROS包;
- whbot2.tar.gz (此文件需要购买产品后向维航服务人员索取)
- 为树莓派安装ubuntu操作系统
####对应教程: “[ROS]树莓派教程一:安装UBUNTU系统 ”: http://www.wh-robot.com/whb/?p=876
备注: 以下过程对上述教程步骤有所补充
- 烧录SD卡
- 使用win32 Disk Imager将镜像写入SD卡; 具体参见上述教程即可。
- 备注:此处安装的是ubuntu mate for ARM版本。
- 配置SD卡上的config.txt, 便于液晶屏显示树莓派分辨率( hdmi_mode那块的参数需要根据各自液晶屏修改 )
#hdmi_drive=1 DVI模式 (没声音)
#hdmi_drive=2 HDMI模式 (如果支持并已启用将有声音输出)
hdmi_drive=2
#hdmi_group 设置HDMI类型
#hdmi_group=1 CEA
#hdmi_group=2 DMT
hdmi_group=2 DMT
#hdmi_mode 设置在CEA或DMT格式下的屏幕分辨率, 根据各自屏幕调整
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
#使能硬件接口,这样就可以使能树莓派的I2C、SPI接口了。
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on
#超频选项
#默认为700MHz,如果要超频到800MHz
#arm_freq=800
gpu_mem=128
start_x=1
enable_uart=1
dtoverlay=w1-gpio
- 启动树莓派
- 将SD卡插入树莓派, 启动树莓派,可以看到树莓派界面
- 配置树莓派
对应教程: “[ROS]树莓派教程二:SSH配置”: http://www.wh-robot.com/whb/?p=653
备注: 以下过程对上述教程步骤有所补充
备注:首次树莓派连接WIFI成功后如果获取不到IP地址,可再重启一次
- 树莓派SSH和APT配置:
注意: 由于此时树莓派ssh server不一定可用, 需要使用屏幕+键盘接入树莓派进行以下配置; 或者windows用cmd, 树莓派用超级终端;
按照网页教程配置即可
- 配置树莓派apt源:
- 备份apt源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 替换 /etc/apt/sources.list内容为如下内容:
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
- 保存退出, 然后执行更新
sudo apt update
- 修改 /etc/rc.local, 配置自启动ssh服务:
在文件的exit语句前加入如下语句
service ssh start
- 树莓派上安装ROS
对应教程: “[ROS]树莓派教程三、安装ROS系统(ROS-KINETIC) ”: http://www.wh-robot.com/whb/?p=657
备注: 以下过程与上述教程步骤完全一致
注: 以下过程可以通过SSH客户端远程登录到树莓派执行.
- 添加ROS源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
- 安装ROS:
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall
注:如果由于网络原因执行超时, 则多执行几遍
- 在树莓派上创建ROS工作空间并编译wh-robot2源码
对应教程: “[WHBOT2]教程一:代码编译”: http://www.wh-robot.com/whb/?p=738
备注: 以下过程对上述教程步骤有所补充
注: 以下过程可以通过SSH客户端远程登录到树莓派执行.
- 关闭树莓派图形界面
执行如下命令关闭树莓派图形界面:
sudo /etc/init.d/lightdm stop
* 避免编译wh-robot2源码时挂死. 等编译完毕后, 再开启.
- 解压缩与编译源码
把源码包(whbot2.tar.gz)上传到树莓派home目录, 然后开始编译
cd ~/
tar -zxvf whbot2.tar.gz
mv whbot2/ros_ws ~/
cd ~/ros_ws
catkin_make
大概几分钟就可以编译好了
备注:如果编译过程中出现如下错误:
virtual memory exhausted: Cannot allocate memory
说明是扩展区大小不够, 出错处理如下步骤所示;
- 出错处理
- 查看swap大小
使用free -m 命令查看, 可以发现swap已经为零
$ free -m
total used free shared buff/cache available
mem: 862 64 525 12 271 730
swap: 0 0 0
- 扩大swap
执行如下命令为树莓派挂接一个512M的swap区
sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
sudo mkswap /swapfile1
sudo chown root:root /swapfile1
sudo chmod 0600 /swapfile1
sudo swapon /swapfile1
sudo vi /etc/fstab
添加以下内容到fstab文件尾
/swapfile1 swap swap defaults 0 0
再查看是否有swap空间
$ free -m
total used free shared buff/cache available
mem: 862 25 729 2 106 779
swap: 511 0 0
此时再执行catkine_make编译,一般就能成功了。
- 把ROS工作空间内容加入到用户环境变量
source ~/ros_ws/devel/setup.bash
echo “source ~/ros_ws/devel/setup.bash” >> ~/.bashrc
- 在树莓派上安装串口驱动, 修改波特率
对应教程: “[WHBOT2]教程三:串口驱动安装”: http://www.wh-robot.com/whb/?p=743
对应教程: “[WHBOT2]教程四:通信波特率修改”: http://www.wh-robot.com/whb/?p=750
备注: 以下过程对上述教程步骤有所补充
- 查看雷达设备信息
修改设备文件, 保证可以始终使用某个固定别名访问某台设备, 不依赖于设备插入顺序。
插入雷达设备到USB, 查看设备信息:
lsusb
得到的信息有一行(不同雷达显示内容稍有不同):
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 004: ID 6901:1224
Bus 001 Device 006: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
雷达对应的那一行(第3行)中的ID为10c4:ea60,分别代表vendor和product
串口对应的那一行(第1行)中的ID为 067b:2303, 分别代表vendor和product。
本例中会最终生成三个别名:/dev/whbot, /dev/rplidar, /dev/ydlidar
/dev/whbot:通过串口,连接的是下层STM32的控制板,名为whbot;
/dev/rplidar: 通过USB口连接rpliader雷达;
/dev/ydlidar: 通过USB口连接ydlidar雷达;
- 建立/dev/whbot设备文件
树莓派通过USB2TTL连接STM32单板,其中USB在树莓派这侧,通过RX,TX,GND三根线与STM32单板的TX,RX,GND相连(注意TX/RX交叉)。
这一步是为USB2TTL建立一个别名(设备文件),为/dev/whbot,以便于未来树莓派上的程序使用别名访问USB2TTL(本例中使用的是/dev/whbot来访问),从而与STM32通信;
在文件 /etc/udev/rules.d/99-com.rules 最后面添加USB2TTL的定义(注意vendor和product要与上面的串口的信息对应上,本例中为067b和2303):
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="whbot"
这样就给10c4:ea60设备设了一个别名/dev/whbot, 程序中可以使用这个别名访问设备, 而不论设备是在ttyUSB0或ttyUSB1;
- 串口驱动安装
执行:
rosrun whbot setup.sh
这个操作本质上是想/etc/udev/rules.d目录下拷贝whbot.rules、rplidar.rules、ydlidar.rules文件;
待成功后,插入雷达设备, 重启树莓派, 然后执行如下命令查看所有串口驱动和雷达驱动:
ls /dev/ttyAMA*
ls /dev/whbot -l
ls /dev/rplidar -l
ls /dev/ydlidar -l
应该看到分别有指向:
lrwxrwxrwx 1 root root 7 8月 4 18:22 /dev/rplidar -> ttyUSB1
lrwxrwxrwx 1 root root 7 8月 4 18:22 /dev/ydlidar -> ttyUSB1
lrwxrwxrwx 1 root root 7 8月 4 19:42 /dev/whbot -> ttyUSB0
备注:由此可知,在当前树莓派上,ttyUSB1是连接雷达的, ttyUSB0是连接STM32板的;
- 修改波特率
修改文件:
vi ~/ros_ws/src/whbot_bringup/params/base_params.yaml
修改为如下值:
buadrate: 115200
- 树莓派上修改主机名为mbees-desktop
主机名统一了,后续指代时不会出现混乱, 也比较能够与网站的教程一致。执行:
sudo vi /etc/hostname
把内容改为:
mbees-desktop
保存退出, 然后执行:
sudo vi /etc/hosts
将其中的主机名改为 mbees-desktop,如下:
127.0.1.1 mbees-desktop
保存退出,重启树莓派。
截止为此, 树莓派的配置完成了, 下面修改ubuntu上的配置。
启动ubuntu虚拟机, 然后登录。
- 修改PC上的Ubuntu源
修改 /etc/apt/sources.list内容为如下内容:
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
- 在ubuntu上安装ROS
过程同前面的 --- ”树莓派上安装ROS”;
- 在ubuntu上编译whbot2源代码
对应教程: “[WHBOT2]教程七:虚拟机UBUNTU编译WHBOT2源代码”: http://www.wh-robot.com/whb/?p=817
过程同前面的 -- ”在树莓派上创建ROS工作空间并编译wh-robot2源码”
- 树莓派和ubuntu的多机通信配置
对应教程: “[ROS]ROS多机的通信配置”: http://www.wh-robot.com/whb/?p=615
备注: 以下过程对上述教程步骤有所补充
- 假设树莓派和ubuntu两者信息如下:
设备 |
操作系统 |
ROS角色 |
IP |
hostname |
树莓派 |
Ubuntu Mate 16.04 for ARM |
Node |
192.168.2.104 |
mbees-desktop |
PC |
Ubuntu for X86 |
Master |
192.168.2.201 |
rosmaster |
- 在树莓派上修改:
- /etchostname
修改/etc/hostname 文件, 内容改为: mbees-desktop
- /etc/hosts
在/etc/hosts 文件, 添加/修改为:
127.0.0.1 mbees-desktop
192.168.2.104 mbees-desktop
192.168.2.201 rosmaster
- .bashrc
在~/.bashrc 文件中添加两行:
export ROS_HOSTNAME=mbees-desktop
export ROS_MASTER_URI=http://rosmaster:11311
然后重启
- 在PC Ubuntu上修改:
- /etchostname
修改/etc/hostname 文件, 内容改为 rosmaster
- /etc/hosts
在/etc/hosts 文件, 修改/添加为:
127.0.0.1 rosmaster
192.168.2.104 mbees-desktop
192.168.2.201 rosmaster
- .bashrc
在~/.bashrc 文件, 添加两行:
export ROS_HOSTNAME=rosmaster
export ROS_MASTER_URI=http://rosmaster:11311
然后重启
- 在PC Ubuntu上启动roscore
source ~/.bashrc
roscore
- 在树莓派的GUI的终端命令行启动turtlesim
备注:此步骤需要树莓派的GUI以便于显示弹出的窗口。
也可以用支持X-Win的终端登录软件例如MoboXTerm来从windows远程登录树莓派执行,它会在windows端弹出窗口。
source ~/.bashrc
rosrun turtelsim turtlesim_node
可以在弹出的对话框上看到小乌龟
- 在PC Ubuntu机器上上启动turtle_teloop_key
在PC Ubuntu机器上的另外一个终端窗口中执行(可以是远程SSH):
source ~/.bashrc
rosrun turtlesim turtle_teleop_key
当出现语句:
$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
就可以使用键盘上下左右键控制乌龟运动;
- 底层底盘单板(维航标准控制板)的连线
对应教程: “[WHBOT2]教程十:配置WHBOT2控制参数”: http://www.wh-robot.com/whb/?p=884
注:教程中有如何连接电源线, 如何连接电机的说明。
- 连接树莓派单板与底层底盘单板(维航标准控制板)
依据下图二, STM32串口部分排布,从右向左分别是 TX1, RX1, 5V, GND
- 配置whbot2的控制参数
对应教程: “[WHBOT2]教程十:配置WHBOT2控制参数”: http://www.wh-robot.com/whb/?p=828
备注: 以下过程与上述教程步骤完全一致
- 在树莓派上执行
roslaunchwhbot_bringup bringup.launch
若执行正常,会出现:
其中可以看到, 树莓派尝试通过 /dev/whbot 端口连接STM32板(main board)
而且当前的RobotParameters值也被打印出来了;
- 在PC ubuntu的图形化的终端命令行执行
- 启动键盘控制程序
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行。 也可以使用MoboXTerm来远程登录到PC Ubuntu来执行。
rosrun rqt_reconfigure rqt_reconfigure
在弹出的对话框中, 调节whbot_driver的各项参数, 改为如下值:
* 修改完毕后, 在空白处单击即可完成配置下发
备注:
wheel_diameter: 轮子直径
wheel_track: 轴距
encode_resolution: 编码数(总数)
- 控制whbot2小车运动
对应教程: “[WHBOT2]教程十二:WHBOT2运动控制”: http://www.wh-robot.com/whb/?p=899
备注: 以下过程与上述教程步骤完全一致
- 在PC Ubuntu上启动rosmaster
如果rosmaster没有启动则执行如下语句,如果已经启动直接进入下一步
roscore
- 在树莓派上启动whbot小车程序
如果whbot_bringup没有执行则执行如下语句,如果已经启动直接进入下一步
roslaunch whbot_bringup bringup.launch
- 在树莓派上启动键盘控制程序
roslaunch whbot keyboard_teleop.launch
此时会出现如下界面:
按i前进, 按,后退等等
注意:如果出现了如下错误,提示 teleop_twist_keyboard.py的line 2出错,参照如下方式解决。
- 出错解决
可以修改 ~/ros_ws/src/whbot/scripts/teleop_twist_keyboard.py
前两行原来为:
#!/usr/bin/env python
import roslib; roslib.load_manifest('teleop_twist_keyboard')
改为:
#!/usr/bin/env python
import roslib
#roslib.load_manifest('teleop_twist_keyboard')
然后保存, 重新编译
cd ~/ros_ws
catkin_make
待编译成功后,再重新执行
- WHBOT2里程校准
对应教程: “WHBOT2]教程十三:WHBOT2里程校准”: http://www.wh-robot.com/whb/?p=901
备注: 以下过程与上述教程步骤完全一致
- 在PC Ubuntu上启动rosmaster
如果rosmaster没有启动则执行如下语句,如果已经启动直接进入下一步
roscore
- 在树莓派上启动whbot小车程序
如果whbot_bringup没有执行则执行如下语句,如果已经启动直接进入下一步
roslaunch whbot_bringup bringup.launch
- 在PC Ubuntu上运行里程校准程序(也可以在树莓派上运行):
rosrun whbot calibrate_linear.py
屏幕会显示如下语句:
[INFO] [1535203599.788825]: Bring up rqt_reconfigure to control the test.
- 在PC Ubuntu上运行rqt_reconfigure界面:
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行。 也可以使用MoboXTerm来远程登录到PC Ubuntu来执行。
rosrun rqt_reconfigure rqt_reconfigure
出现如下界面:
test_distance: 测试距离
speed:速度
tolerance:误差
odom_linear_scale_correction: 比例参数, 开始时可先设置为1
补充说明:
机器人最底层左右各有两个M3的孔,可加装4个螺丝,来作为路程的定位指示; 然后在地上画一米的直线,然后让其中一个螺丝对准0刻度,勾选上图中的“start_test”,开始运行小车,待停止后检查定位螺丝是否到达所需的距离,如果没有就需要对参数进行调整
如果无法走到相应的距离,因减小odom_linear_scale_correction,改为 真实距离/测试距离。
例如测试距离0.5米,只走了0.495米,则比例调整为0.495/0.5 = 0.99;
- WHBOT2旋转角度校准
对应教程: “WHBOT2]教程十四:WHBOT2旋转角度校准”: http://www.wh-robot.com/whb/?p=905
备注: 以下过程与上述教程步骤完全一致
- 在PC Ubuntu上启动rosmaster
如果rosmaster没有启动则执行如下语句,如果已经启动直接进入下一步
roscore
- 在树莓派上启动whbot小车程序
如果whbot_bringup没有执行则执行如下语句,如果已经启动直接进入下一步
roslaunch whbot_bringup bringup.launch
- 在PC Ubuntu上运行里程校准程序(也可以在树莓派上运行):
rosrun whbot calibrate_angular.py
屏幕会显示如下语句:
[INFO] [1535206051.359211]: Bring up rqt_reconfigure to control the test.
- 在PC Ubuntu上运行rqt_reconfigure界面:
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行。 也可以使用MoboXTerm来远程登录到PC Ubuntu来执行。
rosrun rqt_reconfigure rqt_reconfigure
出现如下界面:
test_angle: 测试角度
speed:速度
tolerance:误差
odom_linear_scale_correction: 比例参数, 开始时可先设置为1
补充说明:
机器人最底层左右各有两个M3的孔,可加装4个螺丝,来作为路程的定位指示; 然后在地上画一米的直线,然后让其中一个螺丝对准0刻度,勾选上图中的“start_test”,开始运行小车,待停止后检查定位螺丝是否回到原来的这条线(因为旋转了360°),如果没有就需要对参数进行调整。
- 将自己的雷达驱动package融入到WHBOT2 的ROS工程中
由于没有使用whbot附带的雷达,因此需要把自己雷达的驱动融入到whbot的工程中。 以下操作在树莓派上操作,因为是树莓派访问雷达;
- 把自己的雷达驱动包放入到whbot2中
在ros_ws目录下,拷贝如雷达的驱动的package,名为iiiroboticslidar2_ros,拷贝之后如下图:
进入目录显示:
备注:这一步操作,是给whbot2工程新增了一个package,根据其中package.xml的描述,这个package的 名字为iiiroboticslidar2。
- 在whbot2的bringup中新增雷达的launch文件
将iiiroboticslidar2_ros/launch下的雷达启动文件3iroboticslidar2.launch拷贝到whbot_bringup/launch下:
cd ~/ros_ws/src
cp iiiroboticslidar2_ros/launch/3iroboticslidar2.launch whbot_bringup/launch/
备注:这一步操作,是让whbot2的whbot_bringup具有启动节点iiiroboticslidar2的能力,具体可以参考3iroboticslidar.launch的内容。
打开3iroboticslidar2.launch文件,让其中的dev指向别名,把
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="frame_id" type="string" value="laser"/>
改为:
<param name="serial_port" type="string" value="/dev/rplidar"/>
<param name="frame_id" type="string" value="laser_link"/>
备注:为什么这里可以直接使用/dev/rplidar,因为经过lsusb查看,我自己的雷达的vendor和product和whbot中的rplidar完全一样; 如果不一样,则需要的“7. 安装树莓派窗口驱动,修改波特率”那个步骤,为自己的雷达专门建立一个别名和rule文件,在rule文件中写入自己的vendor和product;然后在本步骤的launch文件中填写自己的/dev下的别名;
备注:laser_link是whbot所需frame_id的value(可参见它自己的rdlidar.launch的定义);
备注:在此树莓派上,/dev/rplidar指向/dev/ttyUSB1,外部接的是雷达:
$ ls -al /dev/rplidar
lrwxrwxrwx 1 root root 7 9月 9 17:42 /dev/rplidar -> ttyUSB1
- 修改whbot2的bringup中的robot.launch文件
cd ~/ros_ws/src/whbot_bringup/launch/
vi robot.launch
把如下内容:
<arg name="lidar" default="$(env WHBOT_LIDAR)" doc="lidar type [rplidar, eai-x4, eai-g4 ]"/>
改为:
<arg name="lidar" default="$(env WHBOT_LIDAR)" doc="lidar type [rplidar, eai-x4, eai-g4, 3iroboticslidar2]"/>
备注:这一步操作,是让robot.launch中新增一个雷达的选项,robot.launch具体启动哪款雷达,是根据环境变量WHBOT_LIDAR来决定的;如其中的下句所示:
<include file="$(find whbot_bringup)/launch/$(arg lidar).launch"/>
当然也可以在上面这句把变量${arg lidar}.launch写死为某个具体的雷达的launch文件。
- 重新编译whbot2工程
因为加入了新的package, iiiroboticslidar2,而且把这个package对应的node节点的launch也加入到了robot.launch中,因此需要重新编译工程,使得这部分新增代码生效:
cd ~/ros_ws
catkin_make
执行后,会列出此时的工程所包含的所有的packages:
- 补充缺少的ROS Kinect Packages
- 在树莓派所在ubuntu上安装kinect Packages:
执行如下语句(如果已经安装可以跳过):
sudo apt install ros-kinetic-move-base
sudo apt install ros-kinetic-slam-gmapping
sudo apt install ros-kinetic-map-server
sudo apt install ros-kinetic-image-view
备注: move-base用于导航基础包,map-server是建图时的基础包,image-view是摄像头显示时需要的基础包;
备注:可以使用apt-cache search ros-kinetic 搜索kinetic的可用的包, 例如:
apt-cache search ros-kinetic | grep map-server
查找所有map-server的可用的包。
- WHBOT2利用ROS建图
对应教程: “WHBOT2]教程十五:WHBOT2利用ROS建图”: http://www.wh-robot.com/whb/?p=912
备注: 以下过程与上述教程步骤稍有修改;
ROS驱动中提供了cmd_vel的订阅以及odom的发布。
- 在PC Ubuntu上启动rosmaster
如果rosmaster没有启动则执行如下语句,如果已经启动直接进入下一步
roscore
- 在树莓派上启动whbot_navigation程序
如果如下语句没有执行则执行如下语句,如果已经启动直接进入下一步
export WHBOT_LIDAR=3iroboticslidar2
export WHBOT_MODEL=whbot2
roslaunch whbot_navigation gmapping.launch
- 在PC Ubuntu上启动view程序
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行。 也可以使用MoboXTerm来远程登录到PC Ubuntu来执行。
roslaunch whbot_navigation view_nav.launch
执行后显示如下图形界面:
- WHBOT2利用建好地图导航
对应教程: “WHBOT2]教程十六:WHBOT2利用建好地图导航”: http://www.wh-robot.com/whb/?p=908
备注: 以下过程与上述教程步骤完全一致
- 在PC Ubuntu上启动rosmaster
如果rosmaster没有启动则执行如下语句,如果已经启动直接进入下一步
roscore
- 在树莓派上启动whbot_navigation程序
如果如下语句没有执行则执行如下语句,如果已经启动直接进入下一步
export WHBOT_LIDAR=3iroboticslidar2
export WHBOT_MODEL=whbot2
roslaunch whbot_navigation nav.launch map_name:=whbot2_lab.yaml
- 在PC Ubuntu上启动view程序
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行。 也可以使用MoboXTerm来远程登录到PC Ubuntu来执行。
roslaunch whbot_navigation view_nav.launch
执行后显示图形界面,在图形界面上选择机器人的目标,选择好之后,放开鼠标,就可以看到机器人开始导航了,导航效果主要是看你上一步所建立的地图,如果建图较好,则导航效果还是不错的:
- WHBOT2视频见识
对应教程: “WHBOT2]教程十七:WHBOT2视频显示”: http://www.wh-robot.com/whb/?p=915
备注: 以下过程与上述教程步骤完全一致
视频有如下应用方面:
- 视频监控:
- 图像识别:比如加入opencv + tensorflow
- 图像建图:
- 在树莓派上安装摄像头驱动USB Camera
- 进入ros工作区(假定为~/ros_ws),新建usb_cam目录,并在其下新建src目录:
cd ~/ros_ws
mkdir -p usb_cam/src
- 下载github上的usb_cam源码
cd usb_cam/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
- 编译whbot工程
cd ~/ros_ws
catkin_make
source ~/ros_ws/devel/setup.bash
- 测试是否配置完毕
roscd usb_cam
- 运行usb_cam
由于有图形化窗口, 因此以下语句需要在树莓派的图形界面的终端命令行中执行:
rosrun usb_cam usb_cam_node
此时只能看到摄像头打开而不会看到图像; 如果想看当前图像,可以使用如下语句:
rosrun image_view image_view image:=/usb_cam/image_raw
其中/usb_cam/image_raw是usb_cam默认发布图像的topic;如果一切顺利,则可以看到当前摄像头实时视频窗口:
- 使用自定义launch文件设置摄像头
usb_cam的默认launch文件在如下目录
~/ros_ws/usb_cam/src/usb_cam/launch/usb_cam-test.launch
如果想自定义一个launch文件,可以复制并编辑它:
其中<param name=”video_device” value=”dev/video0” />代表第一个摄像头,可以改为其他摄像头;修改好之后运行这个文件usb_cam.launch:
roslaunch usb_cam usb_cam.launch
- 在PC Ubuntu上启动rosmaster
roscore
- 在树莓派上启动视频监控程序
roslaunch usb_cam usb_cam.launch
- 在PC Ubuntu运行
由于有图形化窗口, 因此以下语句需要在PC Ubuntu的图形界面的终端命令行中执行:
roslaunch whbot_navigation view_nav.launch
可以看到启动了rviz界面,为其添加视频窗口:
添加成功后,设置Topic为 /usb_cam/image_raw
这时候就可以在rviz窗口看到视频了。
- 结语
至此,整个SLAM小车就完全调通了;验证过程中使用gmapping的开源库。
从仅仅熟悉树莓派GPIO编程和Linux开发开始,到逐步接触激光雷达、差速底盘、ROS、SLAM库并把整个过程调通,中间学习到了很多技能和知识点,谨以此文作为纪录,也希望其他类似的人员可以少走弯路。
接下来的任务,就是钻研真正具有技术含量的地方----深度理解SLAM所涉及的数学原理和开源库的实现过程。
感谢维航技术人员的耐心解答,最后,也祝维航科技能越办越好!
SLAM小车系统配置与软件安装过程相关推荐
- OCR图片文字识别,人工手动图片标注软件安装过程
OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda 下载慢的问题: 使用国内镜像地址下载: https://mirro ...
- 常用软件-安装过程中的小常识
常用软件-安装过程中的小常识 主要通过安装金山打字通软件,来讲解我自己安装程序中用到的小技巧. (只适用于电脑小白奥) 完整安装过程 如下是安装金山打字通的完整过程,讲解了我自己的常用小技巧. 1. ...
- 程序员之常用软件安装过程记录
前言 最近重做系统,顺便整理一下安装常见编程语言和工具过程 本文原创,创作不易,转载请注明!!! Work 这部分主要是开发工具和编程环境的安装与测试运行 C/C++ CodeBlocks 安装与调试 ...
- screentogif 屏幕录制生成gif图片的软件安装过程
下载地址 https://www.screentogif.com/ 安装过程 启动界面
- TX2刷机和软件安装过程记录
文章目录 准备 使用SDKmanager刷机 手动安装SDK SSD启动 1. 格式化已安装的 SSD 2. 从SD卡复制到SSD 3. 启用从 SSD 启动 换源 1. 备份 2. 删除或注释sou ...
- 使用oracle客户端与PLSQL连接ORACLE数据库软件安装过程
1. 下载安装PLSQL软件,以及oracle客户端安装软件instantclient. 2. instantclient文件中新建network文件夹,在它下面再新建一个admin文件夹,在admi ...
- ANSA软件安装过程
ANSA安装包可在"软件钥匙"微信公众号上找到 破解版安装包密码是中文"软件钥匙",显示密码方式可以输入中文 根据安装步骤可以一步一步安装成功.
- PKPK检测软件安装过程
1.因为是要数据传输软件要在三个不同的机子上安装,可以先两个,如果是同一台机子会测不出效果的. 2.{PKPM检测软件.exe ,数据交换软件(中转版) .rar ,PKPMJC1.409.131 ...
- Quartus II软件安装过程中的can't find Quartus II subscription Editon device file(.qdz)
上一篇文章说道,安装玩Quartus软件之后,还需要安装器件库就是一个.qdz文件.我想很多初学者跟我一样,不知道去哪下载,下载那个文件.在折腾了几个小时之后,我终于 弄好了,下面我把解决的办法写下来 ...
最新文章
- Windows7下OpenGL简单使用举例
- 7月个人:Windows和Linux绑定和解绑ARP 了解ARP命令的用途。 掌握ARP命令的使用。...
- 发布一个自己开发的网站
- 【瞎搞】 Codeforces Round 276 DIV 2 C.Bits
- 算法 --- 记一道面试dp算法题
- 使用TVP批量插入数据
- RHEL下安装配置基于2台服务器的MYSQL集群
- 【Git基础笔记】常用命令
- 2018年9月28号-10月9号
- 元编程的思想是一种新的编程细想吗
- 关于tomcat那些事情 - tomcat6.0 配置ip地址访问不用加端口和项目名
- 【22】Vue 之 Vue Devtools
- Abaqus单位制简述
- linux opendir路径_Linux C - opendir 和 readdir 和 closedir - 目录文件打开
- 【直播礼物特效】vap原理图理解
- Google搜索引擎设置百度搜索
- mysql之给字段设置缺省值
- python竖线_Matplotlib示例.43 横线与竖线
- android多个module打包aar,Android 多 Module 合并打包 AAR
- c++实现文件传输之三:断点续传与多线程传输
热门文章
- python imread的用法_Python imread、newaxis用法详解
- 水壶 - NOI Online 3
- 吴恩达深度学习—02神经网络和深度学习(视频笔记)
- 自己XP电脑无法查看工作组计算机,XP系统提示“没有法查看工作组计算机”如何办?...
- 屏幕输出类似LED显示屏效果的字母拼图
- Android编译错误:error APT0000: Integer types not allowed (at 'layout_marginBottom' with value '150').
- 需求条目化与自动估算强强联合 助力软件估算自动化
- mac home brew 安装不同版本的gradle
- 脉冲matlab,matlab脉冲发生器 脉冲发生器matlab程序.doc
- Linux输入子系统简析