从零实现机器人自主避障

news/2025/2/26 17:24:54/

1. 编译工具安装

sudo apt update
sudo apt install python3-catkin-pkg python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential
sudo rosdep init
rosdep update

在这里插入图片描述

2. 构建节点

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
ros2 pkg create turtlebot_suo --build-type ament_python --dependencies rclpy sensor_msgs geometry_msgstouch turtlebot_suo/turtlebot_suo/ob_avoid.py
chmod +x turtlebot_suo/turtlebot_suo/ob_avoid.py
# setup.py中定义ros2 run的入口entry_points={'console_scripts': ['ob_avoid = turtlebot_suo.ob_avoid:main',],},
cd ~/ros2_ws
colcon build --packages-select turtlebot_suo
source install/setup.bash

在这里插入图片描述

3. 避障程序


#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twistclass ObstacleAvoidance(Node):def __init__(self):super().__init__('ob_avoid')self.publisher_ = self.create_publisher(Twist, 'cmd_vel', 10)self.subscription_ = self.create_subscription(LaserScan,'scan',self.laser_scan_callback,10)self.subscription_  def laser_scan_callback(self, msg):# 获取前方90度范围内的最小距离front_range = msg.ranges[0:45] + msg.ranges[-45:]min_distance = min(front_range)# 避障逻辑cmd_msg = Twist()if min_distance < 0.5:# 障碍物距离小于0.5米时左转cmd_msg.angular.z = 0.5self.get_logger().info('# 障碍物距离小于0.5米,左转.')else:# 默认按固定速度直行cmd_msg.linear.x = 0.2self.publisher_.publish(cmd_msg)def main(args=None):rclpy.init(args=args)node = ObstacleAvoidance()try:rclpy.spin(node)except KeyboardInterrupt:passfinally:node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

4. 效果

# 启动Gazebo仿真
roslaunch turtlebot3_gazebo turtlebot3_world.launch
# 启动避障节点(新终端)
ros2 run turtlebot_suo ob_avoid

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/1575057.html

相关文章

STM32 最小系统

STM32 最小系统 最小系统就是保证 MCU 正常运行的最低要求&#xff0c;一般是指 MCU 的供电、复位、晶振、BOOT 等部分。 最小系统需求如表&#xff1a;F407/F103最小系统都是一样的

山东大学软件学院nosql实验一环境配置

环境&#xff1a;前端vue后端springboot 软件环境&#xff1a; MongoDB MongoDBCompass 实验步骤与内容&#xff1a; 在官网下载安装包&#xff08;最新版&#xff09; 配置环境环境变量 在“高级系统设置-环境变量”中&#xff0c;可以将MongoDB添加到环境变量Path中(D:\…

[前端] 学习内容总结,css样式居中以及点击包裹a标签的容器元素也能触发a标签的点击事件

一、Css样式居中 1.1、用flex布局来使子元素居中 flex中justify-content是指定子元素在主轴上的对齐方式&#xff1b;align-items是子元素在交叉轴上的对齐方式。 所以我们可以通过设定这两个属性为居中来使子元素居中。 .navbar {display: flex; //flex 布局justify-conten…

智慧物流小程序(论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

【C语言】指针笔试题

前言&#xff1a;上期我们介绍了sizeof与strlen的辨析以及sizeof&#xff0c;strlen相关的一些笔试题&#xff0c;这期我们主要来讲指针运算相关的一些笔试题&#xff0c;以此来巩固我们之前所学的指针运算&#xff01; 文章目录 一&#xff0c;指针笔试题1&#xff0c;题目一…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数

ngx_atoi 声明在 src/core/ngx_string.h ngx_int_t ngx_atoi(u_char *line, size_t n); 定义在 src/core/ngx_string.c ngx_int_t ngx_atoi(u_char *line, size_t n) {ngx_int_t value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim…

matlab ylabel怎么让y轴显示的标签是正的

这是90度的&#xff0c;即默认形式 在 MATLAB 中&#xff0c;若想让ylabel设置的 y 轴标签是正的&#xff08;即文字正常显示而非默认的垂直排列&#xff09;&#xff0c;可以通过设置Rotation属性来实现 在使用ylabel函数添加 y 轴标签时&#xff0c;通过Rotation,0将标签文…

20250223C语言指针与应用

20250223C语言指针与应用 01指针位数.cpp #include<stdio.h> int main() {char a 0x22; // char *p;char *p&a; //指针变量就是存放地址&#xff0c;为了可以存下计算机内存中任何地址&#xff0c;16位系统指针变量大小为2字节&#xff0c;32-4字节&#xff08;4x…