TypeError: 'member_descriptor' object is not iterable

asked 2020-07-24 00:10:33 -0500

Kaustav Ghosh gravatar image
#! /usr/bin/env python

# Regular Python packages
import itertools

# ROS packages
import rospy
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

# Global Variables
INF = 999


def callback(scan_msg):
    print ("Inside Callback function")
    print(len(scan_msg.ranges))
    print(type(scan_msg.ranges))


def detect_and_move(scan_msg):
    print ("Inside detect_and_move function")
    print("DEBUG", scan_msg.ranges)
    # print(list(scan_msg.ranges))

    move = Twist()
    move.linear.x = 0.5
    move.angular.z = 0

    whole_scan_list = []
    for var in scan_msg.ranges:
        if scan_msg.ranges[scan_msg.ranges.index(var)] > 5:
            whole_scan_list.append(INF)
        else:
            whole_scan_list.append(var)

    scan_list_front_left = []
    for item in itertools.islice(whole_scan_list, 30, 90):
        scan_list_front_left.append(item)

    scan_list_front_right = []
    for item in itertools.islice(whole_scan_list, 269, 329):
        scan_list_front_right.append(item)

    scan_list_front_straight = []
    for item in itertools.islice(whole_scan_list, 330, 359):
        scan_list_front_straight.append(item)
    for item in itertools.islice(whole_scan_list, 0, 29):
        scan_list_front_straight.append(item)

    # DEBUG
    # print("scan_list_front_left", scan_list_front_left)
    # print("scan_list_front_straight", scan_list_front_straight)
    # print("scan_list_front_right",scan_list_front_right)
    # print(type(whole_scan_list))

    for scan_list_index in scan_list_front_left:
        if scan_list_index < 2:
            move.linear.x += 0
            move.angular.z -= 0.5
            break
    for scan_list_index in scan_list_front_right:
        if scan_list_index < 2:
            move.linear.x += 0
            move.angular.z += 0.5
            break

    for scan_list_index in scan_list_front_straight:
        if scan_list_index < 2:
            move.linear.x -= 0.5
            move.angular.z += 0
            break

    return move


def main():
    rospy.init_node('amazing_turtle')
    pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
    sub = rospy.Subscriber('/scan', LaserScan, callback)

    rate = rospy.Rate(2)
    move = Twist()

    while not rospy.is_shutdown():
        move = detect_and_move(LaserScan)
        pub.publish(move)
        rate.sleep()


if __name__ == "__main__":
    main()

Here I am simply using a Turtlebot3 to use LaserScan to navigate alos while dynamically placing obstacles along its way. Unfortunately,I am getting: for var in scan_msg.ranges: TypeError: 'member_descriptor' object is not iterable

edit retag flag offensive close merge delete