ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2
ROS2机器人编程简述humble-第二章-Executors .3.5
书中没有使用几乎所有教程都会采用的turtlesim。
美美的圣诞树画出来-CoCube
如何将数学曲线变为机器人轨迹-花式show爱心代码-turtlesim篇
直接Gazebo仿真案例走起了。
到目前为止,已经看到了基本包,展示了ROS2的基本元素,以及如何创建节点、发布和订阅。ROS2不是通信中间件,而是机器人编程中间件,试图为机器人创建行为。因此,需要一个机器人。机器人相对昂贵。有可能有一个真正的机器人,比如装有激光和RGBD相机的Kobuki,价格约为1000欧元。一个被认为是专业机器人的价格可以达到数万欧元。由于并非所有读者都计划购买机器人来运行ROS2,将在模拟器中使用Tiago机器人。Pal Robotics的Tiago机器人由带距离传感器的差动底座和带手臂的躯干组成,头部装有RGBD摄像头。在我们已经添加到worsespace的软件包中,已经有必要在Gazebo中模拟Tiago机器人(ROS2中的参考模拟器之一)。
仿真0成本!除此之外,算法也基本都可以验证,学习机器人学必备利器。
sim.launch
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import (DeclareLaunchArgument, GroupAction,
IncludeLaunchDescription, SetEnvironmentVariable)
from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression
def generate_launch_description():
tiago_gazebo_dir = get_package_share_directory('tiago_gazebo')
world = LaunchConfiguration('world', default='home')
declare_world_cmd = DeclareLaunchArgument(
'world',
default_value='home',
description='World name')
tiago_sim_cmd = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(tiago_gazebo_dir, 'launch', 'tiago_gazebo.launch.py')),
launch_arguments={
'world_name': world,
'arm': 'no-arm'
}.items())
declare_use_sim_time_cmd = DeclareLaunchArgument(
'use_sim_time',
default_value='True',
description='Use simulation (Gazebo) clock if true')
ld = LaunchDescription()
ld.add_action(tiago_sim_cmd)
ld.add_action(declare_use_sim_time_cmd)
ld.add_action(declare_world_cmd)
return ld
运行仿真:
ros2 launch br2_tiago sim.launch.py
支持环境如下:
$ ros2 launch br2 tiago sim.launch.py world:=factory
$ ros2 launch br2 tiago sim.launch.py world:=featured
$ ros2 launch br2 tiago sim.launch.py world:=pal office
$ ros2 launch br2 tiago sim.launch.py world:=small factory
$ ros2 launch br2 tiago sim.launch.py world:=small office
$ ros2 launch br2 tiago sim.launch.py world:=willow garage
注意:world依据需要进行加载。
复习一下之前章节中学过的所有内容,可以更好的掌握ROS2和Gazebo。
比如:ros2 topic list
ros2 topic list
/arm_controller/joint_trajectory
/arm_controller/state
/arm_controller/transition_event
/base_imu
/clock
/diagnostics
/distance/sonar_base
/dynamic_joint_states
/floating_base_pose_simulated
/gripper_controller/joint_trajectory
/gripper_controller/state
/gripper_controller/transition_event
/ground_truth_odom
/head_controller/joint_trajectory
/head_controller/state
/head_controller/transition_event
/head_front_camera/depth/image_raw/compressed
/head_front_camera/depth/image_raw/compressedDepth
/head_front_camera/depth/image_raw/theora
/head_front_camera/depth_registered/camera_info
/head_front_camera/depth_registered/image_raw
/head_front_camera/depth_registered/points
/head_front_camera/image_raw/compressed
/head_front_camera/image_raw/compressedDepth
/head_front_camera/image_raw/theora
/head_front_camera/rgb/camera_info
/head_front_camera/rgb/image_raw
/input_joy/cmd_vel
/joint_state_broadcaster/transition_event
/joint_states
/joy
/joy_priority
/joy_vel
/key_vel
/marker
/marker_vel
/mobile_base_controller/cmd_vel_unstamped
/mobile_base_controller/odom
/mobile_base_controller/transition_event
/nav_vel
/parameter_events
/pause_navigation
/performance_metrics
/phone_vel
/robot_description
/rosout
/rviz_joy_vel
/scan_raw
/servoing_cmd_vel
/stop_closing_loop
/tab_vel
/tf
/tf_static
一个机器人通常具备超过20个以上主题。
例如:节点负责传感器。通过机器人的摄像头、imu、激光和声纳发布信息。最复杂的节点是相机节点,即RGBD传感器,因为它分别发布深度和RGB图像。每个图像都关联了一个主题相机信息,其中包含机器人相机的固有值。对于每个传感器,标准消息类型用于提供的信息。
遥控机器人:
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=key_vel
图形化工具:rqt和rviz2
ROS 2-带Rviz2的数据显示
RVIZ是一个ROS图形界面,它允许您可视化大量信息,并使用多种可用主题的插件。RVIZ2只是RVIZ进入ROS2的一个端口。
要创建自己的RVIZ2配置,可以组合以下插件。
全局选项
为了能够可视化ZED摄像机发布的信息,必须正确配置全局选项:
关键参数:
固定帧:指示用作所有其他帧参考的帧的名称。可以选择组合框中的每个可用帧。
帧速率:用于更新三维视图的最大频率。30或60 FPS是好值。可用的计算能力应指导决策。
网格
该插件允许可视化通常与地板平面关联的网格。
关键参数:
参考帧:用作栅格坐标参考的帧(通常:<fixed_frame>)
平面单元格计数:单元格中网格的大小
正常单元格计数:垂直于网格平面的方向上的单元格数(通常为0)
单元尺寸:每个网格单元的尺寸(单位:米)
平面:标识栅格平面的两个轴
机器人模型
该插件允许根据URDF模型的描述可视化机器人模型。
关键参数:
可视化启用:启用/禁用模型的三维可视化
描述来源:可以在文件和主题之间进行选择。在编写本指南时,“主题”选项未按预期工作,因此“文件”是正确的选项
描述文件:包含Robot Description.URDF。
通过展开“链接”,可以看到整个模型树,其中包含所有可用的关节和链接,以及空间中相对于固定框架的相对位置和方向。
时间间隔(TF)
该插件允许可视化组成TF层次结构的所有帧的位置和方向。
关键参数:
显示名称:启用/禁用链接名称的三维可视化
显示轴:启用/禁用框架轴的三维可视化
显示箭头:启用/禁用连接各个框架的箭头的三维可视化
标记比例:用于重新缩放所有TF对象,使其更清晰,更不混乱
更新间隔:以秒为单位的更新时间。在0离开以查看每个更新
使用此插件的关键是启用/禁用可视化单个帧的功能。允许只专注于对当前任务最重要的部分。
视频
通过遵循视频与RVIZ2教程,了解如何配置RVIZ以可视化视频信息。
深度传感
通过遵循RVIZ2深度教程,了解如何配置RVIZ以可视化深度信息。
位置跟踪
通过遵循RVIZ位置教程,了解如何配置RVIZ以可视化位置信息。
3D对象检测
通过遵循RVIZ对象检测教程,了解如何使用custon Stereolabs插件配置RVIZ以可视化对象检测信息。
平面检测
通过遵循RVIZ对象检测教程,了解如何配置RVIZ以可视化平面检测信息。