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
    ])

簡單介紹:

通過前三課,一個案例通常包括如上一些文件,啓動文件都在launch中。這裏提供了5種啓動模式。

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

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燈佈局

仿真中機器人俯視圖:

前視圖:

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

節點:

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

相同的紅外傳感器充當光傳感器。在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燈發出紅光!!!

可以知道綠光和藍光指令分別如下:

更多色彩自主練習。通過可以編程實現絢麗彩燈模式。

速度控制

這個屬於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

如果對協方差矩陣不感興趣,則可以使用--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

 

地面傳感器

可選模塊,參考官方教程。

座標變換

查看如下:

ros2 topic echo tf

通常使用tf2_monitor:

ros2 run tf2_ros tf2_monitor

SLAM

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

導航

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

校準

這部分也請參考官網。

位置估計的精度很大程度上取決於車輪之間的距離和車輪半徑。


 教程:

案例:

技術細節


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章