在完成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.x和angular.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

校準
這部分也請參考官網,
位置估計的精度很大程度上取決于車輪之間的距離和車輪半徑,
教程:
- 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
CSDN認證博客專家
不合格高校講師
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250165.html
標籤:AI

