ROS2 basics python struggle in real robot project

Hi the construct team I hope all are fine,

I am a beginner in Ros2 and I am struggled for more than 1 week working on the real robot project part 1 the wall following behavior I wrote my code and I am sure that it is correct but it dose not work so I would appreciate if you can tell me where is the mistake or what should I do if my code is not correct.

this is the code of wall_following.py :

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist

class WallFollower(Node):
    def __init__(self):
        super().__init__('wall_follower')
        self.publisher_ = self.create_publisher(Twist, '/cmd_vel', 10)
        self.subscription_ = self.create_subscription(
            LaserScan,
            '/scan',
            self.laser_callback,
            10
        )
        self.wall_distance_ = 0.3
        self.front_wall_distance_ = 0.5

    def laser_callback(self, msg):
        ranges = msg.ranges
        right_ray_index = int(len(ranges) * 3 / 4)  # Index of the rightmost laser ray
        front_ray_index = int(len(ranges) / 2)  # Index of the laser ray in front of the robot

        # Check if there is a wall in front
        if ranges[front_ray_index] < self.front_wall_distance_:
            self.update_velocity(0.0, 0.45)  # Turn fast to the left
            return

        # Calculate the distance to the wall on the right
        right_distance = ranges[right_ray_index]

        # Adjust the linear and angular velocities based on the distance to the wall
        if right_distance > self.wall_distance_ + 0.05:
            self.update_velocity(0.15, -0.45)  # Approach the wall
        elif right_distance < self.wall_distance_ - 0.05:
            self.update_velocity(0.15, 0.45)  # Move away from the wall
        else:
            self.update_velocity(0.15, 0.0)  # Maintain the current distance

    def update_velocity(self, linear, angular):
        # Create a Twist message with the provided linear and angular velocities
        msg = Twist()
        msg.linear.x = linear
        msg.angular.z = angular
        self.publisher_.publish(msg)

def main(args=None):
    rclpy.init(args=args)
    wall_follower = WallFollower()
    rclpy.spin(wall_follower)
    wall_follower.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

I will appreciate your help :blush:

Best Regards,

Ghassan

My problem is solved it was that the front laser readings was not reading so I solve the issue
Thanks,

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.