turtlebot 2入门(ubuntu 16.04+ROS Kinetic)

参考:http://wiki.ros.org/Robots/TurtleBot
本文用来记录在学习使用turtlebot 2的学习经历以及在学习过程中所遇到的问题,仅供大家参考。

文章目录

  • 1. 硬件准备
  • 2. 测试turtle
    • 2.1 准备工作:安装Turtle包
    • 2.2 实机测试:Turtlebot 2测试
      • 2.2.1 检查别名:
      • 2.2.2 通过遥控移动(仅TurtleBot,通过Turtlebot的上网本操作)
  • 3. 配置网络
  • 4. 使用激光雷达(Rplidar)gmapping构建地图

1. 硬件准备

本文基于官方教程的ROS indigo版本进行修改,预完成对kinect的调试,以及在turtle中实现Gamapping功能包,所以需要激光雷达。
基于官方教程,我们需要两台电脑,一台放在turtlebot上,在本文中称它为“上网本”;
另一台称为“工作站”。所以还需要路由器,完成两台电脑之间的通信。

2. 测试turtle

在已经完成安装ROS kinetic的基础上,进行测试。

2.1 准备工作:安装Turtle包

安装Turtlebot,打开终端,运行如下命令:

$ sudo apt-get update
$ sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi ros-kinetic-rocon-* ros-kinetic-ar-track-alvar-msgs
$ sudo apt-get install ros-kinetic-turtlebot-*

2.2 实机测试:Turtlebot 2测试

将上网本与Turtlebot通过USB接口相连,之后在上网本中,打开终端,运行:
roscore
如果ROS安装正确显示:
started core service [/rosout]
如有问题,请检查ROS安装步骤!

2.2.1 检查别名:

  • 输入检测命令:
    ls /dev/kobuki
  • 会显示有对应的设备/dev/kobuki
  • 如果没有,添加别名:
    rosrun kobuki_ftdi create_udev_rules
  • 重插USB线,在进行上述的检测命令

2.2.2 通过遥控移动(仅TurtleBot,通过Turtlebot的上网本操作)

  1. 打开Turtlebot开关,状态(status指示灯)点亮,不停闪烁。
  2. 启动Turtlebot,在上网本,打开一个新终端,运行如下命令:
    roslaunch turtlebot_bringup minimal.launch
  3. 启动键盘遥控,在上网本,打开另一个新终端,运行如下命令:
    roslaunch turtlebot_teleop keyboard_teleop.launch
  4. 点击键盘“i”前进。
    至此,Turtlebot 2测试完成。

3. 配置网络

  1. 在工作站和Turtlebot都要同步时钟
    打开终端,输入如下命令:
sudo apt-get install chrony
sudo apt-get install ntpdate
sudo ntpdate ntp.ubuntu.com
  1. 获取Turtlebot和工作站的IP地址,在终端执行:
    ifconfig
  2. 查看SSh状态:
    sudo service ssh status
    如果显示ssh: unrecognized service,没安装ssh,则安装:
    sudo apt-get install openssh-server
    安装成功后,查看服务器是否启动在终端输入:
    ps -e | grep ssh
    在这里插入图片描述
    若未启动,则启动ssh服务,在终端输入:
    service sshd start
  3. 工作站远程登录Turtlebot上网本:
    首先,对turtlebot进行配置参数,在上网本终端输入:
export ROS_MASTER_URI=http://localhost:11311 >> ~/.bashrc
export ROS_HOSTNAME=IP_OF_TURTLEBOT >> ~/.bashrc

注意,上述的第一个命令不用修改,而第二个需要将IP_OF_TURTLEBOT改为对应的wlan0中的inet地址。
然后,对工作站进行配置参数,在工作站打开终端,输入:

echo export ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311 >> ~/.bashrc
echo export ROS_HOSTNAME=IP_OF_PC >> ~/.bashrc

第一个将IP_OF_TURTLEBOT改为对应的ip地址;
第二个改为工作站的inet地址。

参数配置到此结束,下面开始通信。

  • 在工作站的终端输入:
    ssh NAME_OF_TURTLEBOT@IP_OF_TURTLEBOT
    NAME_OF_TURTLEBOT为Turtlebot对应的电脑名字,IP_OF_TURTLEBOT为对应的ip地址。
    然后输入IP_OF_TURTLEBOT对应的密码就可以登录成功了。
    如果出现Permission denied, please try again的登录问题,则是远程登录权限受限导致。可以用下面的方法进行修改:
    将Turtlebot电脑中/dev/ssh/ssd_config文件做一定的修改。
cd /etc/ssh
sudo gedit sshd_config

进入以后将PermitRootLogin without-password 改为PermitRootingLogin yes
然后保存关闭。

  • 登录到上网本之后,终端变为上网本的终端,可以对上网本执行操作。(在成功通信之后,工作站上的终端变为上网本的终端)
  • 验证从工作站到Turtlebot
    在Turtlebot终端(工作站中的)执行:
    roslaunch turtlebot_bringup minimal.launch --screen
    在工作站终端(可以新打开一个终端)执行:
    roslaunch turtlebot_teleop keyboard_teleop.launch
    可以在工作站的键盘点击“i”,控制Turtlebot前进。
    在工作站终端执行:
    rostopic list
  • 验证从Turtlebot到工作站
    在工作站终端执行:
    rostopic pub -r10 /hello std_msgs/String "hello"
    在TurtleBot终端(工作站中的)执行:
    rostopic echo /hello
    消息“你好”开始打印每秒约10次。如果没有,检查工作站的ROS_HOSTNAME设置。

4. 使用激光雷达(Rplidar)gmapping构建地图

1. 建立工作空间:

$ mkdir -p  ~/turtlebot_ws/src
$ cd   ~/turtlebot_ws/src
## 激光雷达rplidar一代驱动
$ git clone https://github.com/ncnynl/rplidar_ros.git
## turtlebot建图依赖包
$ git clone https://github.com/turtlebot/turtlebot_apps 
#编译
$ cd  ~/turtlebot_ws
$ catkin_mak
  • 添加环境变量,在~/.bashrc最后添加一行:
    $ source ~/turtlebot_ws/devel/setup.bash
  • 刷新配置
    $ source ~/.bashrc

2. 创建激光雷达(Rplidar)的串口别名

  • 将激光雷达通过USB口与电脑连接,此时,激光雷达会旋转。
    随后,确认idVendor和idProduct,ID后面的部分idVendor:idProduct,在终端输入:
    $ lsusb
    输出项含有:
    Bus 001 Device 006: ID 10c4:ea60
    则证明连接成功。
  • 新建 /etc/udev/rules.d/rplidar.rules文件(需要管理员权限),具体步骤如下:(别名为rplidar,实际名称为:/dev/rplidar)
    ## 新建文件
    $ sudo touch  /etc/udev/rules.d/rplidar.rules
    ## 打开文件
    $ sudo gedit  /etc/udev/rules.d/rplidar.rules
    
    将以下内容复制进去:
    KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", 	MODE:="0666", GROUP:="dialout",  SYMLINK+="rplidar"
    
  • 增加当前用户对串口的默认访问权限:
    $ sudo usermod -a -G dialout 用户名
  • 使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)
    $ sudo service udev reload
    $ sudo service udev restart
    

3. 制作雷达驱动启动文件

  • 复制rplidar.launch到rplidar-laser.launch,并增加TF定义 :
    $ roscd turtlebot_navigation
    $ mkdir -p laser/driver
    $ sudo cp ~/turtlebot_ws/src/rplidar_ros/launch/rplidar.launch laser/driver/rplidar_laser.launch
    
  • 打开rplidar_laser.launch,并修改:
    sudo gedit rplidar_laser.launch
  • 检查frame_id是否指定为laser:
  • 查看serial_port是否指定正确端口,使用别名:
  • 检查端口:
    中的/dev/rplidar更改为:
    /dev/ttyUSB0
  • 增加TF:
    
    
    修改为args="-0.18 0.0 0.24 0 0.0 0.0 为自己的实际安装位置。TF的单位为米。
    完整代码如下:
    
    
      
    
    
    
    
    
    
    
    
    
  • 检查turtlebot_navigation包
    增加rplidar_gmapping_demo.launch文件,用于启动gmapping。
    $ roscd  turtlebot_navigation
    $ touch  launch/rplidar_gmapping_demo.launch
    $ gedit  launch/rplidar_gmapping_demo.launch
    
    输入内容:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 增加rplidar_gmapping.launch.xml文件,执行gmapping建图
    $ roscd  turtlebot_navigation
    $ touch  launch/includes/gmapping/rplidar_gmapping.launch.xml 
    $ gedit  launch/includes/gmapping/rplidar_gmapping.launch.xml 
    
    输入内容:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

4. 测试激光雷达gmapping构建地图

  • 上网本新开端口,打开roscore
    $ roscore

以下操作均在上网本的工作空间(turtlebot_ws)下执行:

  • 上网本新开端口,启动turtlebot
    $ roslaunch turtlebot_bringup minimal.launch
  • 上网本新开端口,启动gmapping,用于构建地图
    $ roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
  • 工作机或上网本新开端口,启动键盘操作Turtlebot
    $ roslaunch turtlebot_teleop keyboard_teleop.launch
  • 工作机或上网本新开端口,启动rviz,实时查看建图情况
    $ roslaunch turtlebot_rviz_launchers view_navigation.launch
  • 构建地图结束保存地图
    上网本新开端口,建立目录,保存地图:
    $ mkdir -p ~/map
    $ rosrun map_server map_saver -f ~/map/rplidar_gmapping
    $ ls ~/map   #查看内容,包含rplidar_gmapping.pgm  rplidar_gmapping.yaml
    
  • 查看地图,已经生成rplidar_gmapping.pgm文件,可以用图像浏览器(gimp, eog, gthumb, 等等)打开查看。

自此,turtlebot基本入门已经基本结束,以后会开一个专栏详细介绍激光SLAM。

你可能感兴趣的:(ROS)