07-2-TurtleBot3家庭服务挑战

小芽科技 2022-07-26 11:58:28
Categories: Tags:

本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档

7.10 TurtleBot3家庭服务挑战

img

家庭服务挑战赛场和对象

bad asset path...

7.10.1 入门指南

先决条件

1
TurtleBot3 Waffle Pi
1
OpenMANIPULATOR-X
1
Remote PC

远程 PC 设置

  1. [远程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
  2. [远程PC] 在远程电脑上安装额外的依赖包

    1
    $ sudo apt-get install ros-kinetic-ar-track-alvar ros-kinetic-ar-track-alvar-msgs
  3. [远程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}wafflewaffle_pi。按照Export TURTLEBOT3_MODEL指令设置永久导出设置。

    turtlebot3_manipulation_view

    Rviz 界面

  4. [远程PC] 为了远程使用你的电脑,你需要制作SSH密钥。创建一个脚本文件来生成SSH密钥。

1
$ nano ~/tb3_ssh_keygen
  1. [远程PC] 复制并粘贴以下内容到脚本中,并保存。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
    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
  2. [远程PC] 使文件可执行。

    1
    $ chmod +x ~/tb3_ssh_keygen
  3. [远程PC]用TurtleBot3的IP地址执行该文件。确保远程电脑TurtleBot3连接在**同一WiFi下。

    1
    $ ~/tb3_ssh_keygen {IP_ADDRESS_OF_TURTLEBOT3}
  4. 检查~/.ssh/known_hosts文件是否成功生成了SSH。

    known_hosts

SBC 设置

  1. [Turtlebot3 SBC] 使用机器标签,创建位于/home/pi的env.bash文件。

    1
    $ nano ~/env.bash
  2. [Turtlebot3 SBC] 复制并粘贴以下内容到脚本中,并保存。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/bin/bash
    # 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 "$@"
  3. 使文件可执行。

    1
    $ chmod +x ~/env.bash

OpenCR 设置

Hardware 设置

7.10.2 Camera 标定

校准相机以减少或尽量减少失真。按照相机校准过程一步步进行。

Camera 设置

  1. [远程PC] 使用以下命令来远程运行摄像机。请确保输入TurtleBot3和远程PC连接在一起的IP地址。
    请确保远程电脑和TurtleBot3连接在同一个IP下。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_pi_cam_remote.launch address:=TURTLEBOT_IP
  2. [远程PC] 执行rqt_image_view。

    1
    $ rqt_image_view
  3. 在复选框上选择**/raspicam_node/image/compressed(或/raspicam_node/image/**)主题。

    camera view

  4. [远程计算机] 执行rqt_reconfigure。

    1
    $ rosrun rqt_reconfigure rqt_reconfigure
  5. 点击raspicam_node,并修改参数值以看到摄像机的清晰图像。

    camera setting

  6. 打开位于turtlebot3_home_service_challenge_tools/config/camera_calibration的camera.yaml**文件。

  7. 将修改后的值写入文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ISO: 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

摄像头内参标定

  1. [远程PC] 使用以下命令来远程运行摄像机。使用该命令时,请务必包括IP地址。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_pi_cam_remote.launch enable_raw:=true address:=TURTLEBOT_IP

    注意。请确保远程电脑TurtleBot3连接在同一IP下。

  2. [远程PC] 运行相机内参校准

    1
    $ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/raspicam_node/image camera:=/raspicam_node

    注意。正方形的大小可能因打印纸的尺寸A3、A4或其他而不同。在这种情况下,**根据打印纸的方形尺寸,调整给定命令中-square选项的值(0.024)。

    calibration display

  3. 使用格子板来校准相机,并点击CALIBRATE

    注意。将棋盘向左、右、上、下和各种角度移动和倾斜,以获得XYSizeSkew校准数据。当数据被充分计算后,X,Y,SizeSkew将有一个绿色条。

    calibraion

  4. 点击Commit,将本征校准数据保存到默认文件夹(~/.ros/camera_info)。

    commit

  5. 打开位于**~/.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
    20
    image_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

  1. [远程PC] 使用以下命令来远程运行摄像机。使用该命令时,请务必包括IP地址。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_robot_remote.launch address:=TURTLEBOT_IP

    注意。请确保远程电脑TurtleBot3连接在同一IP下。

  2. [远程 PC] 运行 slam 节点。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools slam.launch
  3. [远程PC] 运行键盘远程操作节点。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools mobile_teleop_key.launch

    节点运行后,以下控制器将显示在终端窗口。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Control 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
  4. 用键盘控制器更新一个地图。

    making_map

  5. [远程PC]在地图完全更新后保存。

    1
    $ ROS_NAMESPACE=tb3_hsc rosrun map_server map_saver -f tb3_hsc

    map

7.10.4 任务

  1. [远程PC] 运行演示包。在使用该命令时,请确保包括IP地址。这个软件包包含各种功能。带机器标签的远程调出,Moveit,导航,相机感应。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_home_service_challenge_demo_remote.launch address:=TURTLEBOT_IP

    注意。请确保远程电脑TurtleBot3连接在同一IP下。

    demo_01

  2. [远程PC] 运行用于执行家庭服务挑战赛任务的经理包。

    1
    $ roslaunch turtlebot3_home_service_challenge_manager manager.launch

指令

**[远程PC]**在家庭服务挑战期间使用以下命令。

操作测试

**[远程PC]**发布以下主题,以测试一个导航或操作功能。

配置

**[远程PC]**根据给定环境修改配置文件中的数据。

关于家庭服务任务的细节

家庭服务挑战赛的目标是按照给定的规则将四个不同的物体从客厅移动到一个特定的地方,并返回到起点。

使用演示包,《Home Service Challenge》中移动物体的过程如下:

  1. 在客厅里导航到一个目标。

demo_02

  1. 接近目标。

demo_03

  1. 用OpenMANIPULATOR-X的夹持器挑选目标。

manipulation_diagram

MoveIt 流程图

demo_04

使用MoveIt 软件包抓取物体

  1. 离开到下一个房间放置物体(使用的主题:/tb3_hsc/cmd_vel)。

    • 当从目标处往回走时,车轮直接由经理程序使用/tb3_hsc/cmd_vel主题控制。
  2. 导航到将放置物体的地方。

    • 寻找下一个目标,并使用导航包到达它。

    demo_05

  3. 接近目标。

  4. 使用抓手放置物体。

  5. 使用导航包返回到起始点。

    demo_06

7.10.5 模拟仿真

在Gazebo做TurtleBot3 使用 OpenMANIPULATOR-X 抓取物体。

  1. [远程 PC] 运行 Gazebo.

    1
    $ roslaunch turtlebot3_home_service_challenge_simulation competition.launch

    gazebo

  2. [远程 PC] 在 Gazebo 中运行一个仿真样例。

    1
    $ roslaunch turtlebot3_home_service_challenge_tools turtlebot3_home_service_challenge_demo_simulation.launch

    simulation_rviz

  3. [远程 PC] 运行家庭服务管理器

    1
    $ roslaunch turtlebot3_home_service_challenge_manager manager.launch
  4. 使用家庭服务挑战命令,见命令