TB3+X52入门(ROS2)教程-11.家庭服务挑战赛
笔记:
本说明书已于Ubuntu 22.04和进行测试ROS2 Humble Hawksbill。
更多信息,请参阅OpenMANIPULATOR 电子手册和[ROS 2] Turtlebot3 操作
主场服务挑战赛场地和物品
入门
注意:在电脑上安装家庭服务挑战包之前,请务必完成以下说明。
TurtleBot3 PC设置
TurtleBot3 SBC 设置
TB3 和 OpenMANIPULATOR-X软件包
先决条件:
ROS 2 安装了 Humble 的笔记本电脑或台式电脑。
本说明基于 Gazebo 模拟。
远程电脑设置
安装家庭服务挑战包。
[远程电脑]
git config --global http.sslVerify false
cd ~/turtlebot3_ws/src/
git clone -b humble https://ghfast.top/https://github.com/ROBOTIS-GIT/turtlebot3_home_service_challenge.git
cd ~/turtlebot3_ws && colcon build --symlink-install
模拟
在 Gazebo 中使用 OpenMANIPULATOR-X 模拟 TurtleBot3。
[远程 PC]
运行 Gazebo 模拟。
ros2 launch turtlebot3_manipulation_gazebo turtlebot3_home_service_challenge.launch.py
为 Gazebo 运行 Nav2 并2D Pose Estimate在 Rviz 中进行设置。
ros2 launch turtlebot3_home_service_challenge_tools navigation2.launch.py
运行用于执行家庭服务挑战任务的核心包。
ros2 launch turtlebot3_home_service_challenge_core core_node.launch.py
注意:core_node 包含用于 ArUco 标记检测、停放和机械臂控制的节点,core_node 使用这些节点执行场景集成控制。core_node 执行并控制场景序列中的行为。运行 core_node 后,我们可以在 rviz 中看到 ArUco 标记的 TF,然后就可以运行该场景了。有关更详细的描述以及如何运行该场景,请参阅任务。
实际机器人
准备好实际的机器人
如果您想使用 OpenMANIPULATOR-X 运行 TurtleBot3 场景,请查看以下列表。
创建自定义地图,然后使用SLAM创建并保存地图。
设置Rpi 相机。
使用实际机器人进行家庭服务挑战
运行硬件启动。
[TurtleBot SBC]
ros2 launch turtlebot3_manipulation_bringup hardware.launch.py
运行相机节点。
[TurtleBot SBC]
ros2 run camera_ros camera_node --ros-args -p format:='RGB888' -p width:=320 -p height:=240
运行 Nav2 并在 Rviz 中设置二维姿态估计。如果您想使用自定义地图,请使用启动参数运行。
[远程电脑]
ros2 launch turtlebot3_home_service_challenge_tools navigation2.launch.py map_yaml_file:=$HOME/map.yaml
运行用于执行家庭服务挑战任务的核心软件包。使用启动参数指定启动模式和 ArUco 标记大小。
[远程电脑]
ros2 launch turtlebot3_home_service_challenge_core core_node.launch.py launch_mode:='actual' marker_size:=0.04
参数
launch_mode
默认值:模拟
描述:选择您是否要将家庭服务挑战赛作为模拟或实际机器人来运行。
marker_size
默认值:0.088
描述:指定自定义地图中使用的 ArUco 标记的大小。
注意:core_node 包含用于 ArUco 标记检测、停放和机械臂控制的节点,core_node 使用这些节点执行场景集成控制。core_node 执行并控制场景序列中的行为。运行 core_node 后,我们可以在 rviz 中看到 ArUco 标记的 TF,然后就可以运行该场景了。有关更详细的描述以及如何运行该场景,请参阅任务。
任务
命令
在家庭服务挑战期间使用以下命令。
[远程电脑]
个人操作
停在 ArUco 标记前面:将标记的 ID 设置为整数$MARKER_ID。
ros2 topic pub -1 /target_marker_id std_msgs/msg/Int32 "{data: $MARKER_ID}"
注意:使用此命令时,请务必包含文件中的 ArUco 标记 ID scenario.yaml。在提供的地图中,存在 ID 0 到 7。有关此场景的详细信息,请参阅本节下方的配置说明。
控制机械手:使用机械手拾取或放置物体。
ros2 topic pub -1 /manipulator_control std_msgs/msg/String "{data: 'pick_target'}"
ros2 topic pub -1 /manipulator_control std_msgs/msg/String "{data: 'place_target'}"
运行场景TurtleBot3 将根据所写场景
执行单独的操作。$SCENARIO_NAME
ros2 topic pub -1 /scenario_selection std_msgs/msg/String "{data: '$SCENARIO_NAME'}"
注意:使用此命令时,请务必包含文件中的某个场景名称scenario.yaml。提供的场景文件包含 到room1。room4有关该场景的详细信息,请参阅本节下方的“详细信息”描述。
配置
根据给定的环境修改配置文件中的数据。
[远程PC]
scenario.yaml:此文件包含场景数据。在模拟中,TurtleBot 前方初始存在 ID 为 0 到 3 的标记,这些标记被指定为 target_marker_id。每个房间中,存在 ID 为 4 到 7 的标记。
文件路径:
/turtlebot3_home_service_challenge/turtlebot3_home_service_challenge_core/config/scenario.yaml
脚本
scenario:
room1: # SCENARIO_NAME
target_marker_id: 0 # ArUco Marker's ID
goal_pose: [0.9, 0.5, 0.0, 0.0, 0.0, 0.7071, 0.7071] # The coordinates and orientation of the room where the goal marker is located.
goal_marker_id: 4 # ArUco Marker's ID
end_pose: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] # Coordinates and orientation of the location to return to.
turtlebot3_hsc_manipulation.srdf:此配置文件包含机械臂的位置数据。通过更改关节值或添加新的group_state,可以指定机械臂的姿态。
文件路径:
/turtlebot3_home_service_challenge/turtlebot3_home_service_challenge_tools/config/turtlebot3_hsc_manipulation.srdf
脚本
<group_state name="target" group="arm">
<joint name="joint1" value="0"/>
<joint name="joint2" value="0.9076"/>
<joint name="joint3" value="-0.9425"/>
<joint name="joint4" value="0.0873"/>
</group_state>
关于家庭服务任务的详细信息
家庭服务挑战的目标是按照既定规则将四个不同的物体从客厅移动到指定位置,然后返回起点。(用于运行演示的主题/scenario_selection:)
使用演示包,Home Service Challenge 中移动物体的过程如下。
接近目标。
为了精确接近目标,TurtleBot3 的轮子直接通过 AR 标记计算目标位置来控制。(使用主题:/target_maker_id,/cmd_vel)尝试两次以确保性能可靠。
演示1
使用 OpenMANIPULATOR-X 的夹持器拾取目标。
使用 MoveIt 包执行关节空间控制、工作空间控制和夹持器控制,以拾取目标物体。(使用主题/manipulator_control:)
操作图
MoveIt 图
导航到将放置物体的下一个房间。-使用 Nav2 包到达保存在 yaml 文件中的下一个房间。
演示2
接近目标。
使用夹持器放置物体。
使用 Nav2 包返回起点。