本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档。
警告。在执行本例之前,请确保运行Bringup指令,在桌子上测试机器人时要小心,因为机器人可能会掉下来。
注意。
- 本指令在
Ubuntu 16.04
和ROS Kinetic Kame
上测试。 - 这个指令应该是在远程PC上运行的。请在您的**远程电脑上遵循该指令。
- 本指令在
电子手册中的内容可能会在没有事先通知的情况下进行更新。因此,一些视频可能与电子手册中的内容有所不同。
10.1 使用交互式移动标记
TurtleBot3可以通过RViz上的[Interactive Markers](http://wiki.ros.org/interactive_markers)进行移动。你可以使用交互式标记将TurtleBot3移动到旋转或线性。
**[远程PC]**打开一个新的终端,启动远程文件。
TIP。在执行这个命令之前,你必须指定TurtleBot3的模型名称。${TB3_MODEL}
是你在burger
、waffle
、waffle_pi
中使用的模型名称。如果你想永久设置导出设置,请参考[Export TURTLEBOT3_MODEL](https://emanual.robotis.com/docs/en/platform/turtlebot3/export_turtlebot3_model)页面。
1 | $ export TURTLEBOT3_MODEL=${TB3_MODEL} |
**[远程PC]**启动交互式标记文件。
1 | $ roslaunch turtlebot3_example interactive_markers.launch |
**[远程PC]**用RViz对模型进行三维可视化。
1 | $ rosrun rviz rviz -d `rospack find turtlebot3_example`/rviz/turtlebot3_interactive.rviz |
10.2 障碍物检测
TurtleBot3可以通过LDS数据进行移动或停止。当TurtleBot3移动时,当它检测到前方有障碍物时就会停止。
**[远程PC]**启动障碍物文件。
1 | $ roslaunch turtlebot3_example turtlebot3_obstacle.launch |
10.3 位置控制
注意。此功能适用于冲刺。
10.4 点操作
TurtleBot3可以通过2D点(x,y)
和z-angular
移动。例如,如果你插入(0.5,0.3,60),TurtleBot3会移动到点(x = 0.5m,y = 0.3m),然后旋转60度。
**[远程PC]**启动 pointop 文件。
1 | $ roslaunch turtlebot3_example turtlebot3_pointop_key.launch |
10.5 循迹运动
TurtleBot3可以通过自定义路线移动。有三种路线(矩形、三角形和圆形)。这个例子使用行动主题。动作客户端将巡逻数据(模式、面积、计数)翻译给动作服务器。然后行动服务器将cmd_vel
翻译给TurtleBot3。请参考上面的教程视频了解更详细的用法。
**[远程PC]**启动循迹服务器文件。
1 | $ rosrun turtlebot3_example turtlebot3_server |
**[远程电脑]**启动循迹客户端文件。
1 | $ roslaunch turtlebot3_example turtlebot3_client.launch |
10.6 TurtleBot 跟随例程
为了尝试下面的例子,你必须安装turtlebot3_applications和turtlebot3_applications_msgs软件包。
**[远程PC]**进入catkin workspace
目录(/home/(user_name)/catkin_ws/src),克隆turtlebot3_applications和turtlebot3_applications_msgs仓库。然后运行catkin_make
来构建新的软件包。
1 | $ sudo apt-get install ros-kinetic-ar-track-alvar |
- 注意:
- 跟随者演示仅使用360激光距离传感器LDS-01实现。根据以前对人和障碍物位置样本的拟合,使用分类算法来采取行动。它在50厘米范围和140度范围内跟随机器人前面的人。
- 在有障碍物的地方运行跟随者演示可能效果不好。因此,建议在一个没有障碍物的开放区域运行该演示。
[远程PC] 安装
scikit-learn
、NumPy
和ScyPy
软件包。1
2
3$ sudo apt-get install python-pip
$ sudo pip install -U scikit-learn numpy scipy
$ sudo pip install --upgrade pip[远程PC] 安装完成后,在远程电脑上运行roscore。
1
$ roscore
[TurtleBot] 运行Bringup软件包。
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
[远程PC] 为TurtleBot3 Burger设置环境变量,并启动turtlebot3_follow_filter。
1
2$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_follow_filter turtlebot3_follow_filter.launch**[远程PC]**启动
turtlebot3_follower
。
1 | $ roslaunch turtlebot3_follower turtlebot3_follower.launch |
10.7 TurtleBot全景图演示
- 注意:
- turtlebot3_panorama “演示使用 “pano_ros “来拍摄快照,并将它们拼接起来以创建全景图像。
- 全景演示需要安装
raspicam_node
包。安装这个包的说明可以在Gihub链接找到。 - Panorama演示需要安装OpenCV和cvbridge软件包。安装OpenCV的说明可以在OpenCV教程链接
[TurtleBot] 启动
turtlebot3_rpicamera
文件1
$ roslaunch turtlebot3_bringup turtlebot3_rpicamera.launch
[远程 PC] 运行
panorama
。1
$ roslaunch turtlebot3_panorama panorama.launch
[远程 PC] 要启动全景图演示,请输入以下命令:
1
$ rosservice call turtlebot3_panorama/take_pano 0 360.0 30.0 0.3
可以发送给rosservice以获得全景图像的参数有。
拍摄照片的模式。
0 : 快照和旋转(即旋转,停止,快照,旋转,停止,快照,…)。
- 1 : 连续(即在拍摄快照的同时不断旋转)
- 2 : 停止拍照并创建全景图像 -全景图像的总角度,度数 -在快照和旋转模式下创建全景图像时的角度间隔(度数),否则时间间隔(秒) -旋转速度(弧度/秒)
[远程 PC] 要查看结果图像,请输入以下命令。
1
$ rqt_image_view image:=/turtlebot3_panorama/panorama
10.8 自动泊车
- 注意:
- turtlebot3_automatic_parking “演示使用的是360激光距离传感器LDS-01和一个反光带。LaserScan主题有来自LDS的强度和距离数据。TurtleBot3使用这个来定位反光带。
turtlebot3_automatic_parking
演示需要NumPy
包。
[远程PC]用以下命令安装
NumPy
包。如果你已经安装了numpy,你可以跳过以下命令。1
2
3$ sudo apt-get install python-pip
$ sudo pip install -U numpy
$ sudo pip install --upgrade pip[远程PC] 运行roscore.
1
$ roscore
[TurtleBot] 调出基本软件包,以启动TurtleBot3应用程序。
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
[远程PC] 如果你使用TurtleBot3 Burger,请按以下命令设置TurtleBot3的型号。
1
{% dplayer "url=TurtleBot3_51_Machine_Learning_tutorial_3.mp4"%}
注意: 在执行命令前指定
${TB3_MODEL}:
burger’,waffle',
waffle_pi`。按照Export TURTLEBOT3_MODEL指令设置永久导出设置。[远程PC] 运行 RViz。
1
2$ roslaunch turtlebot3_bringup turtlebot3_remote.launch
$ rosrun rviz rviz -d `rospack find turtlebot3_automatic_parking`/rviz/turtlebot3_automatic_parking.rviz[远程PC] 启动自动停车文件。
1
$ roslaunch turtlebot3_automatic_parking turtlebot3_automatic_parking.launch
- 你可以在RViz中选择LaserScan话题。
/scan
/scan_spot
10.9 视觉自动泊车
- 注意:
- turtlebot3_automatic_parking_vision “使用树莓派的摄像头,因此本演示使用的机器人是TurtleBot3 Waffle Pi的默认平台。由于它是在墙上找到AR标记的,所以应该准备好打印的AR标记。整个过程使用从摄像头得到的图像,所以如果这个过程做得不好,请配置参数,如亮度、对比度等。
- turtlebot3_automatic_parking_vision “使用基于 “image_proc “节点的矫正图像。为了获得矫正图像,机器人应该获得树莓派相机的光学校准数据。(每个下载的turtlebot3软件包都已经有raspberry pi相机v2默认的相机校准数据)。
- turtlebot3_automatic_parking_vision “包需要 “ar_track_alvar “包。
[远程 PC] 运行 roscore.
1
$ roscore
[TurtleBot] 调出基本软件包,以启动TurtleBot3应用程序。
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
[TurtleBot] 启动树莓派相机节点。
1
$ roslaunch turtlebot3_bringup turtlebot3_rpicamera.launch
[远程PC]树莓派软件包将发布压缩类型的图像,以便快速通信。然而,在
image_proc
节点的图像整顿中需要的是原始类型的图像。因此,压缩后的图像应该被转换为原始图像。1
$ rosrun image_transport republish compressed in:=raspicam_node/image raw out:=raspicam_node/image
[远程PC] 然后,应进行图像矫正。
1
$ ROS_NAMESPACE=raspicam_node rosrun image_proc image_proc image_raw:=image _approximate_s=true _queue_size:=20
[远程PC]现在应该开始AR标记检测。在运行相关的启动文件之前,应该导出本示例代码将使用的模型。运行启动文件后,RViz将在预设的环境下自动运行。
1
2$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_automatic_parking_vision turtlebot3_automatic_parking_vision.launchTurtleBot3 Automatic Parking Vision
10.10 加载多个TurtleBot3s
注意:此应用程序必须设置固件版本1.2.1
或更高。
[远程 PC] 运行 roscore.
1
$ roscore
用不同的命名空间调出多个Turtlebot3。我们建议命名空间包括常见的词语,如
tb3_0
,tb3_1
或my_robot_0
,my_robot_1
。**[TurtleBot(tb3_0)]**调出基本包,
ROS NAMESPACE
为节点,multi_robot_name
为tf前缀,set_lidar_frame_id
为激光雷达框架id。这些参数必须是相同的。1
$ ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_0" set_lidar_frame_id:="tb3_0/base_scan"
**[TurtleBot(tb3_1)]**调出基本包,
ROS NAMESPACE
为节点,multi_robot_name
为tf前缀,set_lidar_frame_id
为激光雷达框架id。这些参数必须是相同的,但不同的其他机器人。1
$ ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_1" set_lidar_frame_id:="tb3_1/base_scan"
然后你启动的终端
tb3_0
将代表以下信息。你可以看到TF信息的前缀是tb3_0
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.13
* /tb3_0/turtlebot3_core/baud: 115200
* /tb3_0/turtlebot3_core/port: /dev/ttyACM0
* /tb3_0/turtlebot3_core/tf_prefix: tb3_0
* /tb3_0/turtlebot3_lds/frame_id: tb3_0/base_scan
* /tb3_0/turtlebot3_lds/port: /dev/ttyUSB0
NODES
/tb3_0/
turtlebot3_core (rosserial_python/serial_node.py)
turtlebot3_diagnostics (turtlebot3_bringup/turtlebot3_diagnostics)
turtlebot3_lds (hls_lfcd_lds_driver/hlds_laser_publisher)
ROS_MASTER_URI=http://192.168.1.2:11311
process[tb3_0/turtlebot3_core-1]: started with pid [1903]
process[tb3_0/turtlebot3_lds-2]: started with pid [1904]
process[tb3_0/turtlebot3_diagnostics-3]: started with pid [1905]
[INFO] [1531356275.722408]: ROS Serial Python Node
[INFO] [1531356275.796070]: Connecting to /dev/ttyACM0 at 115200 baud
[INFO] [1531356278.300310]: Note: publish buffer size is 1024 bytes
[INFO] [1531356278.303516]: Setup publisher on sensor_state [turtlebot3_msgs/SensorState]
[INFO] [1531356278.323360]: Setup publisher on version_info [turtlebot3_msgs/VersionInfo]
[INFO] [1531356278.392212]: Setup publisher on imu [sensor_msgs/Imu]
[INFO] [1531356278.414980]: Setup publisher on cmd_vel_rc100 [geometry_msgs/Twist]
[INFO] [1531356278.449703]: Setup publisher on odom [nav_msgs/Odometry]
[INFO] [1531356278.466352]: Setup publisher on joint_states [sensor_msgs/JointState]
[INFO] [1531356278.485605]: Setup publisher on battery_state [sensor_msgs/BatteryState]
[INFO] [1531356278.500973]: Setup publisher on magnetic_field [sensor_msgs/MagneticField]
[INFO] [1531356280.545840]: Setup publisher on /tf [tf/tfMessage]
[INFO] [1531356280.582609]: Note: subscribe buffer size is 1024 bytes
[INFO] [1531356280.584645]: Setup subscriber on cmd_vel [geometry_msgs/Twist]
[INFO] [1531356280.620330]: Setup subscriber on sound [turtlebot3_msgs/Sound]
[INFO] [1531356280.649508]: Setup subscriber on motor_power [std_msgs/Bool]
[INFO] [1531356280.688276]: Setup subscriber on reset [std_msgs/Empty]
[INFO] [1531356282.022709]: Setup TF on Odometry [tb3_0/odom]
[INFO] [1531356282.026863]: Setup TF on IMU [tb3_0/imu_link]
[INFO] [1531356282.030138]: Setup TF on MagneticField [tb3_0/mag_link]
[INFO] [1531356282.033628]: Setup TF on JointState [tb3_0/base_link]
[INFO] [1531356282.041117]: --------------------------
[INFO] [1531356282.044421]: Connected to OpenCR board!
[INFO] [1531356282.047700]: This core(v1.2.1) is compatible with TB3 Burger
[INFO] [1531356282.051355]: --------------------------
[INFO] [1531356282.054785]: Start Calibration of Gyro
[INFO] [1531356284.585490]: Calibration End[远程PC]以相同的命名空间启动机器人状态发布器。
[TurtleBot(tb3_0)]
1
$ ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_remote.launch multi_robot_name:=tb3_0
[TurtleBot(tb3_1)]
1
$ ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup turtlebot3_remote.launch multi_robot_name:=tb3_1
在启动另一个应用程序之前,检查主题和TF树以打开rqt。
1
$ rqt
为了使用这种设置,每个Turtlebot3使用SLAM制作地图,这些地图由multi_map_merge软件包同步合并。你可以访问Virtual SLAM by Multiple TurtleBot3s部分来获得更多的信息。