设备及系统版本:
PC端:
- Lenovo Y7000P + Ubuntu18.04 + ROS Melodic。
- 如果使用电脑也为此型号,系统建议安装Ubuntu18.04,因为安装16.04后会缺少独显、触摸版、无线网卡等驱动,后续安装也很麻烦。其他型号电脑可根据电脑情况自选,只是在按照官方说明书调试时要注意切换ROS版本(Ubuntu18.04对应ROS Melodic;Ubuntu16.04对应ROS Kinetic)。
TurtleBot3:
-
树莓派3B+ + 官网e-Manual提供的TurtleBot3 Raspbian image for Raspberry Pi 3B+镜像(基于Ubuntu16.04,已包含ROS Kinetic及一些turtlebot3需用的packages)
-
起初为了树莓派和PC的Ubuntu版本一致,所以安装了官网e-Manual提供的 Ubuntu 18.04.3 Preinstalled Server ARM64 for Raspberry Pi3,没有图形化界面,配置起来比较繁琐,e-Manual中也没有对应此版本的教程,需根据Kinetic中的教程进行修改(比如命令中包含Kinetic时,应改为Melodic),后面因为在“8.Autonomous Driving”中无法enable摄像头而放弃。此文最后附上了此系统下调试时的一些爬坑笔记,若使用此系统且还想试一试的同学可参考一下,若在8.2.1中能成功开启摄像头还烦请指教一下。
-
后来重新使用e-Manual提供的系统镜像进行配置,只能说真香,可省去很多步骤,主要是稳定。
-
经过调试发现PC和树莓派Ubuntu、ROS版本不同也可。
参考教程:
主要参考(本文的debug也是针对此网站给出的e-Manual。)
- ROBOTIS官网的e-Manual
https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/
此网站需科学上网,否则打开网页特别慢。
其他可参考:
- ROS官方教材:https://community.robotsource.org/t/download-the-ros-robot-programming-book-for-free/51(可点此直接下载 ROS Robot Programming (English) ;ROS机器人编程 (中文) )
- 创客智造https://www.ncnynl.com/turtlebot3.html
- 以及各路神仙的博客
爬坑笔记:
提示:我直接写e-manual中的章节号,便于定位,非笔记章节号。
3. Quick Start Guide
在设置3.1 PC setup 和3.2 SBC Setup时,注意要选对上面的ROS版本,Ubuntu18.04对应ROS Melodic;Ubuntu16.04对应ROS Kinetic。尤其PC端和树莓派端Ubuntu版本不一致时,注意切换。
3.1.2. Install ROS
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh
在运行此步时,可能报错,原因是raw.githubusercontent.com这个网站是外网,在ROS的安装和使用中经常遇到,解决方法如下:
-
方法1:科学上网
-
方法2:连接手机热点,多执行几次,有概率可解决。
-
方法3:修改hosts
sudo nano /etc/hosts
在最下面添加:
151.101.84.133 raw.githubusercontent.com
保存后重新运行指令即可。
-
当然此处也可按照下面的提示,直接使用官方的ROS安装,但ROS安装的最后一步rosdep init的时候也会出现这个问题,仍需上述方法来解决。
3.1.4. Install TurtleBot3 Packages
如果想要新建workspace,先无需运行apt-get install,否则还需运行下面Click here to expand中的spt-get remove。
3.1.6. Network Configuration
此处图片并非要操作什么,只是示意,此处也无需设置TurtleBot,也可忽略此处直接看后面步骤操作。
- 此图是说明要在TurtleBot和PC的.bashrc中添加两句代码用来设置ROS通讯的IP,其中PC端在此步骤设置,注意两个IP均为PC的IP。TurtleBot端在3.2中设置,此处可忽略,区别是TurtleBot中设置的是PC的IP和Turtlebot的IP。
3.2.3.3. SSH
sudo ssh pi@192.168.x.x
无需大括号,必要时加sudo。
固定IP的方法
此处插播一条固定IP的方法,否则每次PC端和树莓派端关机重启连接wifi,会被动态分配不同的IP,导致ssh失效,还需重新查询,并更改.bashrc中的IP。
第一种情况:PC端和树莓派端在第三端路由器发射出来的局域网内
- 通过网页输入ip的方法,进入路由器管理界面,不同路由器的管理界面ip不同,可查看路由器背面的标签或者百度一下(参考https://www.win7sky.com/luyouqidizhi/20170630-4508.html)。华为路由器的管理界面中有固定一个设备的IP的功能,其他路由器应该也可,自行百度。找到自己的PC和树莓派,固定IP即可。
第二种情况:PC端发热点,树莓派连接到PC端的热点上。
- PC端发每次热点IP是固定的,也可用nm-connection-editor自定义IP,然后根据PC端的IP设置树莓派端。(方法参考https://www.feifeiboke.com/pcjishu/3617.html) 即在 /etc/dhcpcd.conf中设置static ip,此conf文档中有设置格式。192.168.x.x/24中的 /24 表示子网掩码为255.255.255.0。
3.2.3.8 设置IP
注意事项见上述3.1.6
3.3.7 验证OpenCR
- 确保是用turtlebot自带的电池或者其他12v的电源给OpenCR供电,且打开了OpenCR板子上的开关,否则舵机带不动。下图开关状态为打开。
- 如果原来是用MicroUSB的5v电源给树莓派供电想要拔除,直接拔除会造成关机。可先连接OpenCR的12v电源,打开开关,然后再拔除树莓派MicroUSB供电线。(树莓派和OpenCR的电源是互通的,树莓派接5v或者OpenCR接12v均可同时开启两个板子,但是如果想让轮子转动,必须确保OpenCR接入了电池或者其他12v电源。)
- 先按一下最大的那个,RESET;然后长按旁边SW1或SW2,至少5秒,看轮子是否转动,想要停下按RESET即可。
3.5.1. Run roscore
若要运行树莓派中的ROS命令,则必须保持PC端的roscore是启动状态。
3.6.1.1.1. Keyboard Teleoperation
运行teleop应同时运行树莓派中的bringup
3.6.1.2. RC100
若使用ROBOTIS RC100手柄(只有TurtleBot3 Waffle Pi里面有带),可无需运行任何指令,因为手柄是通过蓝牙和OpenRC直接通讯,不经过树莓派。通讯指令是在3.3中上传到OpenCR中的。
4.2.SLAM
export TURTLEBOT3_MODEL=${ TB3_MODEL}
无需每次都要输入此句,因为已经写进.bashrc中了,可打开.bashrc检查一下,如没有运行一次即可,无需重复。
4.2.3 Mapping
建图时,受雷达传感器性能的限制,不要让机器人运动太快,也不要原地快速转动,容易造成地图混乱。
4.5.1 Save Map
如果在前面3.14中建立了新的workspace,建议在此处将map的储存路径改为自己的ws中,便于管理,名字也可根据实际环境更改。比如:
mkdir -p ~/catkin_ws/map
rosrun map_server map_saver -f ~/catkin_ws/map/labmap
但后面5.1.3中运行navigation时应注意修改map.yaml的路径和名字
5.2.&5.3. Navigation
表述的文字有点多,白话说一下:
- 第一步:先用2D Pose Estimate给机器人定位,使雷达线的轮廓与地图尽量接近,此时可根据实际中机器人所在房间的位置来设置这个Pose,用墙角或者其他特征来判断。
- 第二步:雷达线轮廓和地图接近后,可使用teleop来对位置和方向进行进一步校正,使雷达线轮廓与地图吻合。此处有个技巧:在第一步设置Pose的时候,以位置准确为主,方向可有偏差,然后在第二步的遥控校正时,仅校正角度即可。
- 第三步:用2D Nav Goal设置目标位置和方向,尽量不要给机器人出难题,因为内置算法的参数还未优化,优化方法见5.4。
6.1.2 Launch Simulation World
三种机型和三种地图可任意组合,比如使用的机型为burger,仍可roslaunch World和House仿真环境,但是第一次打开House会特别慢,可先用Empty和World来尝试,尤其是电脑配置较低时。
6.2. SLAM Simulation
此处和4.2一样,无需每次都要运行export,除非想要更换机器人模型。
附:PC端Ubuntu18.04 + 树莓派端Ubuntu 18.04.3 Preinstalled Server ARM64 for Raspberry Pi3 爬坑笔记
提示:上述提到过的坑在Ubuntu18.04中基本都有,就不重述了,下面是一些只在Ubuntu18.04中遇到的坑。
3.2.3.5 配置WIFI
Ubuntu 18.04.3 Preinstalled Server ARM64 for Raspberry Pi3 只能在tty中调试,没有图形化界面,所以在连接ssh前的配置wifi需要自己手动打代码。
-
首先需一字不差的按照教程给的代码编辑,代码的层级也要注意,每个层级隔两个空格,不能用tab,只能敲空格。还有冒号后的空格一定要有。
-
wifi name和password是带有双引号的,把里面的文字换成wifi名称和密码即可。例如:
access-points: "wifi": password: "12345678"
-
此步之后在运行第6步之前,需运行以下命令:
sudo netplan generate #检查代码格式是否正确 sudo netplan apply #应用 ifconfig #此时即可查询wifi设置是否成功,以及wlan0对应的IP
4. SLAM
从这里开始教程中就不支持Melodic了,但是按照Kinetic下面的教程进行还能继续。
8.1.2. Install Autorace Packages
sudo apt-get install ros-kinetic-image-transport ros-kinetic-cv-bridge ros-kinetic-vision-opencv python-opencv libopencv-dev ros-kinetic-image-proc
此步安装可能遇到python-opencv报错,但是更改一下python版本,比如python3-opencv,可运行,但是不知道这样是否正确。
8.2.1 Camera Imaging Calibration
此处打不开摄像头,网上查了一些,都是在可视化界面中的操作,可是此版本系统没有可视化界面,所以进行不下去了,如有大佬有办法解决,请告知,感谢!
按照Robotis官网提供的e-Manual调试的坑目前就只发现这么多,如果再有什么发现可以交流。本人Linux、ROS均为初学,若解决办法错误或者有更好的办法,欢迎指教。