webots和ros2笔记04-入门

在完成03-解析:https://zhangrelay.blog.csdn.net/article/details/112686566

本文通过一个移动机器人案例入门webots和ros2吧,这里以官方教程epuck为例介绍。

参考链接:https://github.com/cyberbotics/webots_ros2/wiki/Tutorial-E-puck-for-ROS2-Beginners

这个教程适用于仿真的epuck和真实的epuck机器人,但是这里只介绍仿真。

请务必确保webots和ros2已经配置正确,ubuntu直接参考如上链接,windows介绍如下:

仿真机器人

启动如下命令:

ros2 launch webots_ros2_epuck robot_launch.py
import os
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
from launch.substitutions.path_join_substitution import PathJoinSubstitution
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch import LaunchDescription
from ament_index_python.packages import get_package_share_directory


def generate_launch_description():
    package_dir = get_package_share_directory('webots_ros2_epuck')
    world = LaunchConfiguration('world')

    webots = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            os.path.join(get_package_share_directory('webots_ros2_core'), 'launch', 'robot_launch.py')
        ),
        launch_arguments=[
            ('package', 'webots_ros2_epuck'),
            ('executable', 'driver'),
            ('world', PathJoinSubstitution([package_dir, 'worlds', world])),
        ]
    )

    return LaunchDescription([
        DeclareLaunchArgument(
            'world',
            default_value='epuck_world.wbt',
            description='Choose one of the world files from `/webots_ros2_epuck/world` directory'
        ),
        webots
    ])

简单介绍:

webots和ros2笔记04-入门_第1张图片

通过前三课,一个案例通常包括如上一些文件,启动文件都在launch中。这里提供了5种启动模式。

webots和ros2笔记04-入门_第2张图片

如果需要加载工具等,使用如下命令:

ros2 launch webots_ros2_epuck robot_with_tools_launch.py rviz:=true

启动robot_with_tools_launch.py其中包含robot_launch.py和的robot_tools_launch.py示例。

如果启动真实机器人使用:

ros2 launch epuck_ros2 robot_launch.py

这里不做具体介绍,只以仿真为主!

红外传感器,摄像头和LED灯布局

webots和ros2笔记04-入门_第3张图片

仿真中机器人俯视图:

前视图:

webots和ros2笔记04-入门_第4张图片

使用ros2 topic等工具指令可以查看主题等。

webots和ros2笔记04-入门_第5张图片

节点:

E-puck2具有8个红外传感器(名为ps0-7),所有这些红外传感器的数据类型为sensor_msgs/Range。因此,可以通过以下方法获得与传感器的距离:

ros2 topic echo /ps1

除红外传感器外,e-puck2还升级了位于摄像头上方的ToF距离传感器。来自该传感器的数据也通过sensor_msgs/Range发布tof。

将所有距离传感器组合在一起创建sensor_msgs/LaserScan,因此可以直接在SLAM软件包中使用它:

ros2 topic echo /scan

webots和ros2笔记04-入门_第6张图片

相同的红外传感器充当光传感器。在ROS2驱动程序中,来自传感器的数据将发布为sensor_msgs/Illuminance消息(单位为lux),可以按以下方式订阅它:

ros2 topic echo /ls1

请注意,在上图中,机器人周围有8个LED正确放置。发光二极管led0,led2,led4和led6可以打开或关闭,而发光二极管led1,led3,led5和led7具有可控的RGB分量。因此,对于二进制LED,开启指令如下:

ros2 topic pub /led1 std_msgs/Bool "{ "data": true }" 

RGB为:

ros2 topic pub /led1 std_msgs/Int32 "{ "data": 0xFF0000 }"

其中Int32的低3个字节表示R,G和B分量。

机器人LED灯发出红光!!!

webots和ros2笔记04-入门_第7张图片

可以知道绿光和蓝光指令分别如下:

webots和ros2笔记04-入门_第8张图片

webots和ros2笔记04-入门_第9张图片

更多色彩自主练习。通过可以编程实现绚丽彩灯模式。

速度控制

这个属于ROS2老案例了,turtlesim最常用案例也是如此,注意windows指令如下:

ros2 topic pub --rate 10 /cmd_vel geometry_msgs/Twist "{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.8}}"

这个效果就是:

请注意,只有linear.xangular.z有效,这是因为e-puck2是差动轮式机器人。

摄像头

参考上图左上角效果!

摄像机数据和详细信息通过image_raw(类型sensor_msgs/Image)和camera_info(类型sensor_msgs/CameraInfo)主题发布。与物理机器人驱动程序相比,没有sensor_msgs/CompressedImage,因为这些图像不需要通过网络传输的。

可以运行rqt,导航至Plugins > Visualization > Image View并选择主题/image_raw。请注意,图像编码是BGRA。

里程计

标准ROS2消息nav_msgs/Odometry用于发布里程计数据。可以通过以下方式订阅:

ros2 topic echo /odom

webots和ros2笔记04-入门_第10张图片

如果对协方差矩阵不感兴趣,则可以使用--no-arr参数隐藏数组:

ros2 topic echo --no-arr /odom

还可以在rviz中显示里程计:

ros2 launch webots_ros2_epuck robot_tools_launch.py rviz:=true

IMU

e-puck2上有3D加速度计和3D陀螺仪硬件。可以通过imu主题(类型sensor_msgs/Imu)访问此数据,例如:

ros2 topic echo --no-arr /imu

webots和ros2笔记04-入门_第11张图片 

地面传感器

可选模块,参考官方教程。

webots和ros2笔记04-入门_第12张图片

坐标变换

查看如下:

ros2 topic echo tf

webots和ros2笔记04-入门_第13张图片

通常使用tf2_monitor:

ros2 run tf2_ros tf2_monitor

SLAM

ros2 launch webots_ros2_epuck robot_tools_launch.py rviz:=true mapper:=true

webots和ros2笔记04-入门_第14张图片

导航

ros2 launch webots_ros2_epuck robot_tools_launch.py rviz:=true nav:=true

webots和ros2笔记04-入门_第15张图片

校准

这部分也请参考官网。

位置估计的精度很大程度上取决于车轮之间的距离和车轮半径。


 教程:

  • E-puck for ROS2 Beginners
  • Create Webots Robot
  • Write ROS2 Driver
    • Universal Launcher
    • Custom ROS2 Driver and Package
  • Using URDF or Xacro
  • Navigate TurtleBot3
  • SLAM with TurtleBot3

案例:

  • Wheeled robots 轮式机器人
    • E-puck
    • TIAGo
    • Khepera IV
    • TurtleBot3 Burger
    • Thymio II
  • Robotic arms 机械臂
    • UR5e and IRB 4600
    • Universal Robots
    • ABB IRB4600

技术细节

  • Devices
    • Robot
    • LED
    • Sensor
      • Lidar
      • Camera
      • DistanceSensor
      • IMU
      • LightSensor
  • WebotsNode
  • WebotsLauncher
  • JointStatePublisher
  • Utils

 

你可能感兴趣的:(ROS2学习笔记与高校课程分享,ros2,webots)