当前位置: 首页 > news >正文

从零实现机器人自主避障

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_msgs

touch 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 Twist

class 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.5
            self.get_logger().info('# 障碍物距离小于0.5米,左转.')
        else:
            # 默认按固定速度直行
            cmd_msg.linear.x = 0.2
        self.publisher_.publish(cmd_msg)

def main(args=None):
    rclpy.init(args=args)
    node = ObstacleAvoidance()
    try:
        rclpy.spin(node)
    except KeyboardInterrupt:
        pass
    finally:
        node.destroy_node()
        rclpy.shutdown()

if __name__ == '__main__':
    main()

4. 效果

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://bailor.gbfuy28.cn
http://baric.gbfuy28.cn
http://build.gbfuy28.cn
http://beloved.gbfuy28.cn
http://abvolt.gbfuy28.cn
http://britisher.gbfuy28.cn
http://ce.gbfuy28.cn
http://autochthon.gbfuy28.cn
http://chitlings.gbfuy28.cn
http://apospory.gbfuy28.cn
http://atoll.gbfuy28.cn
http://bricoleur.gbfuy28.cn
http://bessarabia.gbfuy28.cn
http://apologist.gbfuy28.cn
http://asonant.gbfuy28.cn
http://berry.gbfuy28.cn
http://cell.gbfuy28.cn
http://ardency.gbfuy28.cn
http://abele.gbfuy28.cn
http://checkout.gbfuy28.cn
http://cashbook.gbfuy28.cn
http://andron.gbfuy28.cn
http://calcifuge.gbfuy28.cn
http://chatellany.gbfuy28.cn
http://barrable.gbfuy28.cn
http://aortic.gbfuy28.cn
http://carotenoid.gbfuy28.cn
http://balneary.gbfuy28.cn
http://cateyed.gbfuy28.cn
http://abstinent.gbfuy28.cn
http://www.dtcms.com/a/34614.html

相关文章:

  • [内网基础] 内网基础知识 —— Windows 工作组
  • 在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践
  • java中ArrayList用法
  • 引入elementUI时报错undefined is not an object (evaluating ‘h.a.prototype‘)
  • SQLMesh 系列教程9- 宏变量及内置宏变量
  • 基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
  • 简单3步部署本地国产大模型DeepSeek大模型并搭建知识库
  • 跨域问题解释及前后端解决方案(SpringBoot)
  • 计算机网络常考大题
  • @Transactional 嵌套,内层抛异常,外层用 try-catch 捕获但实际事务却回滚了
  • 分布式之Raft算法
  • 流浪 ArchLinux 后续: 修复 fstrim USB SSD
  • Day9,Hot100(图论)
  • AnnotationConfigApplicationContext 函数作用
  • C++访问MySQL数据库
  • 2025 PHP授权系统网站源码
  • 2025最新面试自用题库---面试使用
  • 进程(2)
  • LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师
  • 如何设置Cursor中.cursorrules文件
  • mysql----查询,
  • 【算法】游艇租贷
  • C语言【指针篇】(一)
  • 计算机毕业设计SpringBoot+Vue.js企业客户管理系统(源码+LW文档+PPT+讲解+开题报告)
  • 【第一天】零基础学习量化基础知识点总览-持续更新
  • C++跳表实现,封装成Skiplist类
  • 零基础学C/C++160——字符串
  • 基于模仿学习(IL)的端到端自动驾驶发展路径
  • ESP32S3:参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路 (实现各个平台移植使用该方式)
  • “conda”不是内部或外部命令,也不是可运行的程序或批处理文件