蓝桥ROS云课→一键配置←f1tenth和PID绕圈

这篇具有很好参考价值的文章主要介绍了蓝桥ROS云课→一键配置←f1tenth和PID绕圈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

虽然是一键配置,但还是需要若干步骤的。

参考:

ROS1云课→18一键配置

蓝桥ROS之f1tenth案例学习与调试(成功)

蓝桥ROS之f1tenth简单PID沿墙跑起来(Python)


一键升级脚本,直接配置好f1tenth并启动:

echo "Upgrade Mission Begins."
 
echo "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
 
mQINBFzvJpYBEADY8l1YvO7iYW5gUESyzsTGnMvVUmlV3XarBaJz9bGRmgPXh7jc
VFrQhE0L/HV7LOfoLI9H2GWYyHBqN5ERBlcA8XxG3ZvX7t9nAZPQT2Xxe3GT3tro
u5oCR+SyHN9xPnUwDuqUSvJ2eqMYb9B/Hph3OmtjG30jSNq9kOF5bBTk1hOTGPH4
K/AY0jzT6OpHfXU6ytlFsI47ZKsnTUhipGsKucQ1CXlyirndZ3V3k70YaooZ55rG
aIoAWlx2H0J7sAHmqS29N9jV9mo135d+d+TdLBXI0PXtiHzE9IPaX+ctdSUrPnp+
TwR99lxglpIG6hLuvOMAaxiqFBB/Jf3XJ8OBakfS6nHrWH2WqQxRbiITl0irkQoz
pwNEF2Bv0+Jvs1UFEdVGz5a8xexQHst/RmKrtHLct3iOCvBNqoAQRbvWvBhPjO/p
V5cYeUljZ5wpHyFkaEViClaVWqa6PIsyLqmyjsruPCWlURLsQoQxABcL8bwxX7UT
hM6CtH6tGlYZ85RIzRifIm2oudzV5l+8oRgFr9yVcwyOFT6JCioqkwldW52P1pk/
/SnuexC6LYqqDuHUs5NnokzzpfS6QaWfTY5P5tz4KHJfsjDIktly3mKVfY0fSPVV
okdGpcUzvz2hq1fqjxB6MlB/1vtk0bImfcsoxBmF7H+4E9ZN1sX/tSb0KQARAQAB
tCZPcGVuIFJvYm90aWNzIDxpbmZvQG9zcmZvdW5kYXRpb24ub3JnPokCVAQTAQgA
PgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBMHPbjHmut6IaLFytPQu1vur
F8ZUBQJgsdhRBQkLTMW7AAoJEPQu1vurF8ZUTMwP/3f7EkOPIFjUdRmpNJ2db4iB
RQu5b2SJRG+KIdbvQBzKUBMV6/RUhEDPjhXZI3zDevzBewvAMKkqs2Q1cWo9WV7Z
PyTkvSyey/Tjn+PozcdvzkvrEjDMftIk8E1WzLGq7vnPLZ1q/b6Vq4H373Z+EDWa
DaDwW72CbCBLWAVtqff80CwlI2x8fYHKr3VBUnwcXNHR4+nRABfAWnaU4k+oTshC
Qucsd8vitNfsSXrKuKyz91IRHRPnJjx8UvGU4tRGfrHkw1505EZvgP02vXeRyWBR
fKiL1vGy4tCSRDdZO3ms2J2m08VPv65HsHaWYMnO+rNJmMZj9d9JdL/9GRf5F6U0
quoIFL39BhUEvBynuqlrqistnyOhw8W/IQy/ymNzBMcMz6rcMjMwhkgm/LNXoSD1
1OrJu4ktQwRhwvGVarnB8ihwjsTxZFylaLmFSfaA+OAlOqCLS1OkIVMzjW+Ul6A6
qjiCEUOsnlf4CGlhzNMZOx3low6ixzEqKOcfECpeIj80a2fBDmWkcAAjlHu6VBhA
TUDG9e2xKLzV2Z/DLYsb3+n9QW7KO0yZKfiuUo6AYboAioQKn5jh3iRvjGh2Ujpo
22G+oae3PcCc7G+z12j6xIY709FQuA49dA2YpzMda0/OX4LP56STEveDRrO+CnV6
WE+F5FaIKwb72PL4rLi4
=i0tj
-----END PGP PUBLIC KEY BLOCK-----" >> ~/ros.asc
 
sudo apt-key add ros.asc
 
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

git clone https://gitcode.net/ZhangRelay/f1tenth.git

mkdir -p ~/f1tenth/src

cd ~/f1tenth/src

unzip ~/f1tenth/f1tenth_simulator.zip

sudo rm /etc/apt/sources.list.d/ros2-latest.list

sudo apt update

sudo apt install ros-kinetic-tf2-geometry-msgs ros-kinetic-ackermann-msgs ros-kinetic-joy ros-kinetic-map-server ros-kinetic-message-runtime -y
 
sudo apt upgrade -y

cd ~/f1tenth

catkin_make

source ~/f1tenth/devel/setup.zsh

roslaunch f1tenth_simulator simulator.launch
 
echo "Upgrade Mission Completed."

完成后: 

蓝桥ROS云课→一键配置←f1tenth和PID绕圈

效果如下:

蓝桥ROS云课→一键配置←f1tenth和PID绕圈

 

PID的算法:

#!/usr/bin/env python
from __future__ import print_function
import sys
import math
import numpy as np
 
#ROS Imports
import rospy
from sensor_msgs.msg import Image, LaserScan
from ackermann_msgs.msg import AckermannDriveStamped, AckermannDrive
 
#PID CONTROL PARAMS
kp = 1.0
kd = 0.001
ki = 0.005
servo_offset = 0.0
prev_error = 0.0 
error = 0.0
integral = 0.0
prev_time = 0.0
 
#WALL FOLLOW PARAMS
ANGLE_RANGE = 270 # Hokuyo 10LX has 270 degrees scan
DESIRED_DISTANCE_RIGHT = 0.9 # meters
DESIRED_DISTANCE_LEFT = 0.85
VELOCITY = 1.5 # meters per second
CAR_LENGTH = 1.0 # Traxxas Rally is 20 inches or 0.5 meters
 
class WallFollow:
    """ Implement Wall Following on the car
    """
    def __init__(self):
        global prev_time
        #Topics & Subs, Pubs
        lidarscan_topic = '/scan'
        drive_topic = '/nav'
        prev_time = rospy.get_time()
 
        self.lidar_sub = rospy.Subscriber(lidarscan_topic, LaserScan, self.lidar_callback)
        self.drive_pub = rospy.Publisher(drive_topic, AckermannDriveStamped, queue_size = 10)
 
    def getRange(self, data, angle):
        # data: single message from topic /scan
        # angle: between -45 to 225 degrees, where 0 degrees is directly to the right
        # Outputs length in meters to object with angle in lidar scan field of view
        #make sure to take care of nans etc.
        #TODO: implement
        if angle >= -45 and angle <= 225:
            iterator = len(data) * (angle + 90) / 360
            if not np.isnan(data[int(iterator)]) and not np.isinf(data[int(iterator)]):
                return data[int(iterator)]
 
    def pid_control(self, error, velocity):
        global integral
        global prev_error
        global kp
        global ki
        global kd
        global prev_time
        angle = 0.0
        current_time = rospy.get_time()
        del_time = current_time - prev_time
        #TODO: Use kp, ki & kd to implement a PID controller for 
        integral += prev_error * del_time
        angle = kp * error + ki * integral + kd * (error - prev_error) / del_time
        prev_error = error
        prev_time = current_time
        drive_msg = AckermannDriveStamped()
        drive_msg.header.stamp = rospy.Time.now()
        drive_msg.header.frame_id = "laser"
        drive_msg.drive.steering_angle = -angle
        if abs(angle) > math.radians(0) and abs(angle) <= math.radians(10):
            drive_msg.drive.speed = velocity
        elif abs(angle) > math.radians(10) and abs (angle) <= math.radians(20):
            drive_msg.drive.speed = 1.0
        else:
            drive_msg.drive.speed = 0.5
        self.drive_pub.publish(drive_msg)
 
    def followLeft(self, data, leftDist):
        #Follow left wall as per the algorithm 
        #TODO:implement
        front_scan_angle = 125
        back_scan_angle = 180
        teta = math.radians(abs(front_scan_angle - back_scan_angle))
        front_scan_dist = self.getRange(data, front_scan_angle)
        back_scan_dist = self.getRange(data, back_scan_angle)
        alpha = math.atan2(front_scan_dist * math.cos(teta) - back_scan_dist, front_scan_dist * math.sin(teta))
        wall_dist = back_scan_dist * math.cos(alpha)
        ahead_wall_dist = wall_dist + CAR_LENGTH * math.sin(alpha)
        return leftDist - ahead_wall_dist
 
    def lidar_callback(self, data):
        """ 
        """
        error = self.followLeft(data.ranges, DESIRED_DISTANCE_LEFT) #TODO: replace with error returned by followLeft
        #send error to pid_control
        self.pid_control(error, VELOCITY)
 
def main(args):
    rospy.init_node("WallFollow_node", anonymous=True)
    wf = WallFollow()
    rospy.sleep(0.1)
    rospy.spin()
 
if __name__=='__main__':
	main(sys.argv)

蓝桥ROS云课→一键配置←f1tenth和PID绕圈


差速巡线参考:

蓝桥ROS-差速巡线机器人设计-良好(80+)的报告-复现

前轮转向移动机器人方向参考:

 1. 实验目的

前轮转向移动机器人的实验目的是为了让学生了解和掌握前轮转向移动机器人的基本原理和控制方法,以及学习机器人运动学方面的知识。此外,该实验还可以培养学生的动手能力和团队合作精神,提高学生的实验操作能力和实验设计能力。

具体来说,前轮转向移动机器人的实验目的可以分为以下几个方面:

  1. 了解前轮转向移动机器人的基本结构和工作原理。学生需要了解机器人的各个部件及其功能,包括前轮转向系统、电机控制系统、传感器系统等。

  2. 掌握机器人的运动学原理和控制方法。学生需要了解机器人的运动学模型,包括机器人的位置、速度和加速度等基本参数,以及控制机器人的运动轨迹和速度等。

  3. 学习机器人的编程和控制技术。学生需要学习机器人的编程语言和控制算法,包括PID控制算法、路径规划算法等,以便能够对机器人进行控制和调试。

  4. 培养学生的实验操作能力和实验设计能力。学生需要亲自进行机器人的组装、调试和测试等操作,同时还需要设计和实现机器人的控制程序和算法,以培养他们的实验操作能力和实验设计能力。

  5. 提高学生的创新意识和团队合作精神。学生需要在实验中积极思考和创新,同时还需要与同学一起合作完成实验,以提高他们的创新意识和团队合作精神。

2. 实验意义或者动机

前轮转向移动机器人的实验意义或动机有以下几个方面:

  1. 探索机器人移动的新方式:前轮转向移动机器人的移动方式相对于传统的轮式机器人具有一定的优势,可以在狭窄的空间内灵活移动,同时在机器人需要进行精细调整时也比较方便。

  2. 研究移动机器人的控制方法:前轮转向移动机器人需要通过控制前轮的转向角度来实现移动,因此需要研究相应的控制方法。这可以为其他类型的移动机器人的控制提供参考。

  3. 应用于特定场景:前轮转向移动机器人在一些特定的场景中可以发挥很好的作用,比如在仓库内进行物品搬运、在医院内进行药品送达等。

  4. 提高人机交互的便利性:前轮转向移动机器人可以通过通过传感器和相应的控制系统来实现对环境的感知和响应,从而提高人机交互的便利性。比如,在酒店或机场内作为导航机器人,可以帮助用户更加方便地找到目的地。

3. 实验步骤

以下是前轮转向移动机器人实验步骤的详细讲解:

  1. 确认实验器材和硬件:首先需要确认实验所需的器材和硬件是否齐全,包括前轮转向移动机器人、开发板、电机驱动器、直流电源以及电缆等。

  2. 连接电路:将电机驱动器和开发板通过电缆连接起来,并将直流电源连接到电机驱动器上,以为机器人提供动力。

  3. 编写控制程序:利用开发板上的控制软件,编写控制程序,对机器人进行控制。主要包括控制机器人的运动方向、速度和转向角度等。

  4. 连接传感器:为了实现机器人的自主导航,需要连接一些传感器,如红外线传感器、超声波传感器等,以便机器人能够感知周围环境,自主避障和控制转向。

  5. 调试程序:通过测试和调试程序,确保机器人能够正常运行和执行任务,如前进、转向、避障等。

  6. 实验操作:将机器人放置在实验场地上,让它自主移动和执行任务,如行驶一定距离、绕过障碍物等。

  7. 数据分析:根据实验结果,对机器人的运动性能和控制程序进行分析和评价,进一步优化机器人的运动控制和导航性能。

总之,前轮转向移动机器人实验需要多方面的技术支持和掌握,包括电路设计、控制程序编写、传感器连接、数据分析等,需要认真准备和实践。

4. 实验结果和分析

前轮转向移动机器人是一种常见的机器人类型,它通过控制前轮的转向来实现运动和转向。在实验中,我们通常会对机器人进行控制,比如通过遥控器或编程控制来实现机器人的移动和转向。下面就对前轮转向移动机器人的实验结果和分析进行详细讲解。

实验结果:

前轮转向移动机器人的实验结果通常包括机器人的运动轨迹、速度、转向角度等方面的数据。在实验中,我们可以通过设置不同的运动轨迹和控制参数来观察机器人的运动状态。

一般来说,当机器人向前移动时,我们可以通过控制前轮的转向角度来改变机器人的移动方向。同时,我们也可以通过控制机器人的速度来控制机器人的移动速度。在实验中,我们可以设置不同的速度和转向角度来观察机器人的运动状态。

分析:

前轮转向移动机器人的实验分析主要涉及机器人的运动控制和传感器反馈两个方面。下面分别进行详细讲解。

  • 运动控制

机器人的运动控制是实现机器人运动和转向的关键。在前轮转向移动机器人中,我们通常通过控制前轮的转向角度来改变机器人的运动方向。同时,我们也可以通过控制机器人的速度来控制机器人的移动速度。

在实验中,我们可以通过设置不同的速度和转向角度来观察机器人的运动状态。比如,当我们设置机器人的转向角度为90度时,机器人就会向左或向右转向。当我们设置机器人的速度为5cm/s时,机器人就会以5cm/s的速度向前移动。

  • 传感器反馈

机器人的传感器反馈是实现机器人自主控制的关键。在前轮转向移动机器人中,我们通常使用红外线或超声波传感器来获取机器人周围环境的信息。通过传感器反馈,机器人可以实现避障、跟随等自主控制功能。

在实验中,我们可以通过设置不同的传感器反馈方式来观察机器人的自主控制状态。比如,当机器人遇到障碍物时,我们可以通过传感器反馈来让机器人自动避障。当机器人需要跟随某个目标时,我们也可以通过传感器反馈来实现机器人的自主跟随。

总结:

前轮转向移动机器人的实验结果和分析涉及机器人的运动控制和传感器反馈两个方面。通过对机器人的运动轨迹、速度、转向角度等数据进行观察和分析,可以有效评估机器人的运动状态和控制能力。同时,通过对机器人的传感器反馈进行观察和分析,可以评估机器人的自主控制能力和适应性。

后续内容依据需要补充。文章来源地址https://www.toymoban.com/news/detail-419491.html

到了这里,关于蓝桥ROS云课→一键配置←f1tenth和PID绕圈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 轨迹规划 | 图解路径跟踪PID算法(附ROS C++/Python/Matlab仿真)

    🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。 🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法 PID控制 是一种常用的

    2024年02月07日
    浏览(51)
  • ROS篇——Ubuntu快速一键安装ROS或ROS2(通用)

    以下以Ubuntu22.04安装ROS2为例(我今天新装了一个Ubuntu22.04,从0开始教你安装ROS)。 一、下载ROS安装脚本并运行 执行后如下图所示  输入数字1,回车 如果不确定自己的系统源是否可用 ,输入数字1(建议),回车  如果自己之前设置过一些第三方源,不想清除,就输入数字

    2024年02月14日
    浏览(44)
  • Ubuntu20.04安装ROS----鱼香ROS一键安装

    输入以下命令行: 选择1 选择1 ROS1 选择1   下载noetic版本 ROS2 选择3 下载galactic版本

    2024年02月05日
    浏览(65)
  • ros安装(一键最简安装,吹爆鱼香ROS,请叫我鱼吹)

    ros的安装一直以来都是想学习ros的同学面对的第一道难关,但鱼哥的一键安装,真的会给我们初学者很大的便利,命令如下: 依次进行: 5,更换系统源,更换系统源并删除旧源 1,ROS安装,系统版本是Ubuntu16.04--安装kinetic,Ubuntu18.04--安装melodic,继续选择完整安装 3,rosdep更新

    2024年02月16日
    浏览(28)
  • 一键安装ROS适用于Ubuntu22/20/18

    ROS(Robot Operating System,机器人操作系统)是一个用于机器人软件开发的框架。它提供了一套工具和库,用于机器人应用程序的开发、测试和部署。ROS是由美国斯坦福大学机器人实验室(Stanford University’s Robot Lab)的Willow Garage公司开发的,并在2009年首次发布。 在Ubuntu上使用

    2024年02月19日
    浏览(46)
  • ubuntu22.04一键安装ROS1和ROS2(超简单,亲测可靠)

    这几天在安装ros,然后发现可以一键安装,话不多说,直接终端输入如下指令 回车之后系统会自动安装ros 详见鱼香ROS

    2024年02月11日
    浏览(62)
  • ubuntu20.04一键安装VScode搭建ROS编程环境

    VSCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。

    2023年04月24日
    浏览(49)
  • Linux下ROS程序崩溃,程序段错误process has died [pid 20083, exit code -11, cmd /home GDB core dump 调试

           在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息。 core dump叫做核心转储 ,当程序运行过程中发生异常的那一刻的一个内存快照,操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态

    2024年02月12日
    浏览(47)
  • 【AUTOSAR】RH850(F1KM) MCU PWM配置(MCAL)

    前言 在嵌入式项目中,我们经常需要使用到PWM信号。本文将基于汽车电子AUTOSAR架构下的软件开发方式。以RH850为例进行说明,介绍如何查阅芯片参考文档,并结合项目原理图,使用Davinci工具配置MCAL PWM模块,输出PWM波形。 仅供大家学习参考。 其他MCU的配置方法类似,需要找

    2024年02月13日
    浏览(42)
  • 【12】STM32·HAL库开发-STM32时钟系统 | F1/F4/F7时钟树 | 配置系统时钟

      下图的clk是clock(时钟)的缩写,下面的波形可以理解为脉冲信号或者方波。简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。 时钟是单片机的脉搏,搞懂时钟走向及关系,对单片机使用至关重要!   下图是F1系列的时钟树,从左侧竖线开始,

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包