ROS联合Webots实现机器人视觉巡线刷圈
注意:
- 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
ubuntu版本:20.04
webots版本:2021a
ros版本:noetic
前言
最近看到Youtube上大部分博主都在做巡线,笔者也来凑凑热闹。
此项目基于tianbot_mini机器人完成。
项目开源地址:tianbot_mini_webots
效果
小车已经设置为最高速度10

ROS控制方案
- 在功能包中添加opencv库
- 因为机器人要行使,所以首先要使能电机
- 要用到camera,所以使能camera
- 调整camera的前瞻角度
- 写opencv检测算法
- 更具PID控制算法控制两个轮子的速度
1. 配置功能包
1.1 配置CMakeLists.txt
自己找到相应位置添加
set(CMAKE_CXX_FLAGS "-std=c++11") # 调用OpenCV配置:C++版本为11
find_package(OpenCV 4.2 REQUIRED) # 找OpenCV 4.2 安装路径
include_directories(
${OpenCV_INCLUDE_DIRS} # 加载OpenCV 4.2 安装路径
)
add_executable(tianbot_line_follow src/tianbot_line_follow.cpp)
add_dependencies(tianbot_line_follow webots_ros_generate_messages_cpp)
target_link_libraries(tianbot_line_follow ${catkin_LIBRARIES})
target_link_libraries(tianbot_line_follow ${OpenCV_LIBS}) # 使用到Opencv库需要通过Opencv链接库
2. 使能电机
笔者这边写了tianbot_velocity.cpp来使能左右电机,其主要代码如下所示:
// 初始化电机
for (int i = 0; i < NMOTORS; ++i) {
// 速度控制时position设置为缺省值INFINITY(必须要这一步,否则webots会报错)
set_position_client = n->serviceClient<webots_ros::set_float>(string("/tianbot_mini/") + string(motorNames[i]) + string("/set_position"));
set_position_srv.request.value = INFINITY;
if (set_position_client.call(set_position_srv) && set_position_srv.response.success)
ROS_INFO("Positi

本文介绍了如何使用ROS和Webots模拟平台实现机器人视觉巡线。通过添加opencv库,调整摄像头参数,编写检测算法,并应用PID控制,实现了机器人在虚拟环境中自动沿着黑色线条行驶。详细步骤包括配置功能包,启用电机,调整摄像头角度,图像处理,以及关键点检测和PID速度控制。最终,通过调整和优化,机器人能够稳定地在赛道上刷圈。
最低0.47元/天 解锁文章
8112





