Untitled

 avatar
unknown
python
5 months ago
929 B
3
Indexable
from jetbot import Robot
import rclpy
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist
from rclpy.qos import QoSProfile

import time

rclpy.init()
node = rclpy.create_node("jet_node")
robot = Robot()

def cmd_vel(vel:Twist):
    R = 0.07
    w = vel.angular.z*R
    v = vel.linear.x
    l_v = v - w
    r_v = v + w
    robot.set_motors(l_v,r_v)

Kp = 3
Kd = 160
Ki = 0.1

prev_l = 0
arr_of_div = []
Ti = 20

AIM = 0.3

def scan_cb(msg):
    global prev_l
    vel = Twist()
    vel.linear.x = 0.5
    l_to_wall = min(msg.ranges)
    div = l_to_wall - AIM
    arr_of_div.append(div)
    if len(arr_of_div) > Ti:
        arr_of_div.pop(0)
    vel.angular.z = Kp*(div) + Kd*(l_to_wall - prev_l) + Ki*sum(arr_of_div)
    prev_l = l_to_wall
    cmd_vel(vel)


sub = node.create_subscription(LaserScan, "/scan", scan_cb, QoSProfile(depth=10))
pub = node.create_publisher(Twist, "/cmd_vel", 10)

rclpy.spin(node)
Editor is loading...
Leave a Comment