本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档。
7.10 TurtleBot3家庭服务挑战
注意。
- 本说明在
Ubuntu 16.04
和ROS Kinetic Kame
上测试。 - 更多信息,请参阅OpenMANIPULATOR e-Manual和[ROS 1] Turtlebot3 Manipulation
- 本说明在
bad asset path...家庭服务挑战赛场和对象
7.10.1 入门指南
- 注意。在PC中安装家庭服务挑战包之前,请务必完成以下说明。
先决条件
1 | TurtleBot3 Waffle Pi |
- 它是使用家庭服务挑战包进行移动复制的基本模式。
- 提供的源代码,家庭服务挑战包,是基于TurtleBot3 Waffle Pi制作的。
1 | OpenMANIPULATOR-X |
- OpenMANIPULATOR-X是一个官方机器人平台,可以在家庭服务挑战赛中与Turtlebot3一起使用移动复制功能。
1 | Remote PC |
- 它与Turtlebot3上的单板计算机(SBC)进行通信。
- 笔记本电脑、台式机或其他带有 ROS 1 的设备。
远程 PC 设置
[远程PC] 安装 Home Service Challenge 软件包.
1
2
3$ cd ~/catkin_ws/src/
$ git clone -b kinetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_home_service_challenge.git
$ cd ~/catkin_ws && catkin_make[远程PC] 在远程电脑上安装额外的依赖包
1
$ sudo apt-get install ros-kinetic-ar-track-alvar ros-kinetic-ar-track-alvar-msgs
[远程PC] 在RViz上用OpenMANIPULATOR加载TurtleBot3 Waffle(或Waffle Pi)。
1
2$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ roslaunch turtlebot3_manipulation_description turtlebot3_manipulation_view.launch use_gui:=true注意: 在执行命令前,指定
${TB3_MODEL}
:waffle
,waffle_pi
。按照Export TURTLEBOT3_MODEL指令设置永久导出设置。Rviz 界面
[远程PC] 为了远程使用你的电脑,你需要制作SSH密钥。创建一个脚本文件来生成SSH密钥。
1 | $ nano ~/tb3_ssh_keygen |
[远程PC] 复制并粘贴以下内容到脚本中,并保存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
argc=$#
args=("$@")
if [ 0 -eq $argc ]
then
echo "need to argument that host ip for ssh connection"
echo "Usage: $0 [ip address] ..."
exit 1
fi
for((index = 0; index < $#; index++ ))
do
ssh-keygen -R ${args[$index]}
ssh-keyscan ${args[$index]} >> ~/.ssh/known_hosts
done[远程PC] 使文件可执行。
1
$ chmod +x ~/tb3_ssh_keygen
[远程PC]用TurtleBot3的IP地址执行该文件。确保远程电脑和TurtleBot3连接在**同一WiFi下。
1
$ ~/tb3_ssh_keygen {IP_ADDRESS_OF_TURTLEBOT3}
检查
~/.ssh/known_hosts
文件是否成功生成了SSH。
SBC 设置
[Turtlebot3 SBC] 使用机器标签,创建位于/home/pi的env.bash文件。
1
$ nano ~/env.bash
[Turtlebot3 SBC] 复制并粘贴以下内容到脚本中,并保存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# check if other turtlebot3_core is already running
is_running=`ps ax | grep turtlebot3_core`
IFS=' ' read -ra is_runnings <<< "$is_running"
process_name=${is_runnings[4]}
if [ ${process_name} == "python" ]
then
echo "other turtlebot3_core is already running."
exit 1
fi
#### ROS ####
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
#### ROS Network ####
ip_address=`hostname -I`
ip_address_trim=${ip_address%% * }
ip_address_no_space="$(echo -e "${ip_address_trim}" | tr -d '[:space:]')"
export ROS_HOSTNAME=${ip_address_no_space}
##### Set TURTLEBOT3 Model ####
export TURTLEBOT3_MODEL=waffle_pi
exec "$@"使文件可执行。
1
$ chmod +x ~/env.bash
OpenCR 设置
- 请参阅 OpenCR Setup
Hardware 设置
- 请参阅 Hardware Setup
7.10.2 Camera 标定
校准相机以减少或尽量减少失真。按照相机校准过程一步步进行。
Camera 设置
[远程PC] 使用以下命令来远程运行摄像机。请确保输入TurtleBot3和远程PC连接在一起的IP地址。
请确保远程电脑和TurtleBot3连接在同一个IP下。1
$ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_pi_cam_remote.launch address:=TURTLEBOT_IP
[远程PC] 执行rqt_image_view。
1
$ rqt_image_view
在复选框上选择**/raspicam_node/image/compressed(或/raspicam_node/image/**)主题。
[远程计算机] 执行rqt_reconfigure。
1
$ rosrun rqt_reconfigure rqt_reconfigure
点击raspicam_node,并修改参数值以看到摄像机的清晰图像。
打开位于turtlebot3_home_service_challenge_tools/config/camera_calibration的camera.yaml**文件。
将修改后的值写入文件。
1
2
3
4
5
6
7
8
9
10
11
12
13ISO: 400
awb_mode: auto
brightness: 50
contrast: 0
exposureCompensation: 0
exposure_mode: auto
hFlip: false
saturation: 0
sharpness: 0
shutterSpeed: 0
vFlip: false
videoStabilisation: false
zoom: 1.0
摄像头内参标定
在A4大小的纸上打印一个棋盘。该棋盘用于本征相机校准。
从ROS Wiki下载一个棋盘。
关于相机校准的详细信息,请参阅ROS Wiki的camera_calibration。
格子板
[远程PC] 使用以下命令来远程运行摄像机。使用该命令时,请务必包括IP地址。
1
$ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_pi_cam_remote.launch enable_raw:=true address:=TURTLEBOT_IP
注意。请确保远程电脑和TurtleBot3连接在同一IP下。
[远程PC] 运行相机内参校准
1
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/raspicam_node/image camera:=/raspicam_node
注意。正方形的大小可能因打印纸的尺寸A3、A4或其他而不同。在这种情况下,**根据打印纸的方形尺寸,调整给定命令中-square选项的值(0.024)。
使用格子板来校准相机,并点击CALIBRATE。
注意。将棋盘向左、右、上、下和各种角度移动和倾斜,以获得
X
、Y
、Size
和Skew
校准数据。当数据被充分计算后,X
,Y
,Size
和Skew
将有一个绿色条。点击Commit,将本征校准数据保存到默认文件夹(~/.ros/camera_info)。
打开位于**~/.ros/camera_info**的
camerav2_1280x720.yaml
文件,从Turtlebot SBC
中查看保存的数据,其形式如下面的脚本。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20image_width: 1280
image_height: 720
camera_name: camerav2_1280x720
camera_matrix:
rows: 3
cols: 3
data: [1280.628466572832, 0, 658.384219880362, 0, 1277.989132765768, 360.8363923435625, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [0.2032697817127332, -0.4147569733010375, -0.001420915782245743, 0.003110652248245379, 0]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [1312.630981445312, 0, 661.4149459665205, 0, 0, 1312.107055664062, 360.0239481801327, 0, 0, 0, 1, 0]
7.10.3 SLAM
SLAM是指同步定位和绘图。利用这一功能,TurtleBot3可以绘制地图。更多相关信息,见SLAM
[远程PC] 使用以下命令来远程运行摄像机。使用该命令时,请务必包括IP地址。
1
$ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_robot_remote.launch address:=TURTLEBOT_IP
注意。请确保远程电脑和TurtleBot3连接在同一IP下。
[远程 PC] 运行 slam 节点。
1
$ roslaunch turtlebot3_home_service_challenge_tools slam.launch
[远程PC] 运行键盘远程操作节点。
1
$ roslaunch turtlebot3_home_service_challenge_tools mobile_teleop_key.launch
节点运行后,以下控制器将显示在终端窗口。
1
2
3
4
5
6
7
8
9
10
11
12Control Your TurtleBot3!
---------------------------
Moving around:
w
a s d
x
w/x : increase/decrease linear velocity
a/d : increase/decrease angular velocity
space key, s : force stop
CTRL-C to quit用键盘控制器更新一个地图。
[远程PC]在地图完全更新后保存。
1
$ ROS_NAMESPACE=tb3_hsc rosrun map_server map_saver -f tb3_hsc
7.10.4 任务
[远程PC] 运行演示包。在使用该命令时,请确保包括IP地址。这个软件包包含各种功能。带机器标签的远程调出,Moveit,导航,相机感应。
1
$ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_home_service_challenge_demo_remote.launch address:=TURTLEBOT_IP
注意。请确保远程电脑和TurtleBot3连接在同一IP下。
[远程PC] 运行用于执行家庭服务挑战赛任务的经理包。
1
$ roslaunch turtlebot3_home_service_challenge_manager manager.launch
指令
**[远程PC]**在家庭服务挑战期间使用以下命令。
Ready:TurtleBot3将准备开始一项任务。
1
$ rostopic pub -1 /tb3_hsc/command std_msgs/String ready_mission
Start:TurtleBot3将开始一个任务。
1
$ rostopic pub -1 /tb3_hsc/command std_msgs/String start_mission
Stop : TurtleBot3将停止运行一个任务。
1
$ rostopic pub -1 /tb3_hsc/command std_msgs/String stop_mission
Restart:TurtleBot3将按给定的方案重新启动任务。
1
$ rostopic pub -1 /tb3_hsc/command std_msgs/String restart_mission:SCENARIO_NAME
注意。当使用这个命令时,请确保包括一个
scenario.yaml
文件中的senario名称。关于情景的详细信息,请参见本节下面的配置描述。
操作测试
**[远程PC]**发布以下主题,以测试一个导航或操作功能。
Navigation 导航
1
2
3
4$ rostopic pub -1 /tb3_hsc/command std_msgs/String nav_start
$ rostopic pub -1 /tb3_hsc/command std_msgs/String nav_ar_marker_0
$ rostopic pub -1 /tb3_hsc/command std_msgs/String nav_ar_marker_1
$ rostopic pub -1 /tb3_hsc/command std_msgs/String nav_ar_marker_2Manipulation 机械手操作
1
2
3
4
5$ rostopic pub -1 /tb3_hsc/command std_msgs/String arm_home
$ rostopic pub -1 /tb3_hsc/command std_msgs/String arm_joint
$ rostopic pub -1 /tb3_hsc/command std_msgs/String arm_task
$ rostopic pub -1 /tb3_hsc/command std_msgs/String open_gripper
$ rostopic pub -1 /tb3_hsc/command std_msgs/String close_gripper
配置
**[远程PC]**根据给定环境修改配置文件中的数据。
scenario.yaml
:该文件包含一个场景的数据。文件路径 : /turtlebot3_home_service_challenge_manager/script/scenario.yaml
脚本
1
2
3
4
5
6
7SCENARIO_NAME: # start - scenario - finish
task: TASK_NAME
args: [0, 1, 2]
timeout: 10 #sec, 0 : no time out
next_scenario: find_object
scenario_on_failure: standby
retry_times: 0 #times, 0 : no retryroom.yaml
:该文件包含家庭服务挑战赛的场馆数据。文件路径 : /turtlebot3_home_service_challenge_manager/config/room.yaml
脚本
1
2
3
4
5
6
7
8
9
10room_1:
name: toilet
object:
marker: ar_marker_0
position: [0.25, 0, 0.15]
target:
marker: ar_marker_4
position: [0.25, 0, 0.15]
x: [1.5, 0.6]
y: [1.5, 0.2]config.yaml
:这个配置文件包含经理包的数据。- 文件路径。**/turtlebot3_home_service_challenge_manager/config/config.yaml**
关于家庭服务任务的细节
家庭服务挑战赛的目标是按照给定的规则将四个不同的物体从客厅移动到一个特定的地方,并返回到起点。
使用演示包,《Home Service Challenge》中移动物体的过程如下:
- 在客厅里导航到一个目标。
- 找到一个目标,并使用导航包到达该目标。
- 接近目标。
- 为了精确地接近目标,TurtleBot3的轮子是通过计算AR标记的目标位置直接控制的。(使用的主题:
/tb3_hsc/cmd_vel
)。为了产生可靠的性能,闭环和控制系统可用于指定次数。
- 用OpenMANIPULATOR-X的夹持器挑选目标。
- 使用moveit软件包(关节空间控制、任务空间控制和抓手控制)挑选目标对象。
MoveIt 流程图
使用MoveIt 软件包抓取物体
离开到下一个房间放置物体(使用的主题:
/tb3_hsc/cmd_vel
)。- 当从目标处往回走时,车轮直接由经理程序使用
/tb3_hsc/cmd_vel
主题控制。
- 当从目标处往回走时,车轮直接由经理程序使用
导航到将放置物体的地方。
- 寻找下一个目标,并使用导航包到达它。
接近目标。
使用抓手放置物体。
使用导航包返回到起始点。
7.10.5 模拟仿真
在Gazebo做TurtleBot3 使用 OpenMANIPULATOR-X 抓取物体。
[远程 PC] 运行 Gazebo.
1
$ roslaunch turtlebot3_home_service_challenge_simulation competition.launch
[远程 PC] 在 Gazebo 中运行一个仿真样例。
1
$ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_home_service_challenge_demo_simulation.launch
[远程 PC] 运行家庭服务管理器
1
$ roslaunch turtlebot3_home_service_challenge_manager manager.launch
使用家庭服务挑战命令,见命令