неверный синтаксис движущегося робота - PullRequest
0 голосов
/ 12 июля 2020

SyntaxError: недопустимый синтаксис

У меня есть синтаксическая ошибка, но я не могу ее решить, нужна помощь

ошибка: для k, g в groupby (enumerate (range) , lambda (i, x): ix):

Кроме того, 1 вопрос, может ли кто-нибудь мне помочь. Я использую Ubuntu 18.04, я запустил этот файл, но получил [ rosrun] Не удалось найти исполняемый файл с именем sensor_data_listerner.py ниже / home / sk / catkin_ws / src / testbot_description

это из-за версии ROS python, которую я использую, что вызвало ошибка?

следующий код:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String
import sensor_msgs.msg
import random
import numpy as np
from geometry_msgs.msg import Twist
from itertools import *
from operator import itemgetter

LINX = 0.0 #Always forward linear velocity.
THRESHOLD = 1.5 #THRESHOLD value for laser scan.
PI = 3.14
Kp = 0.05
angz = 0

def LaserScanProcess(data):
    range_angels = np.arange(len(data.ranges))
    ranges = np.array(data.ranges)
    range_mask = (ranges > THRESHOLD)
    ranges = list(range_angels[range_mask])
    max_gap = 40
    # print(ranges)
    gap_list = []
    for k, g in groupby(enumerate(ranges), lambda (i,x):i-x):
        gap_list.append(map(itemgetter(1), g))
    gap_list.sort(key=len)
    largest_gap = gap_list[-1]
    min_angle, max_angle = largest_gap[0]*((data.angle_increment)*180/PI), largest_gap[-1]*((data.angle_increment)*180/PI)
    average_gap = (max_angle - min_angle)/2

    turn_angle = min_angle + average_gap

    print(min_angle, max_angle)
    print(max_gap,average_gap,turn_angle)

    global LINX
    global angz
    if average_gap < max_gap:
        angz = -0.5
    else:
        LINX = 0.5
        angz = Kp*(-1)*(90 - turn_angle)

def main():
    rospy.init_node('listener', anonymous=True)

    pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
    rospy.Subscriber("scan", sensor_msgs.msg.LaserScan , LaserScanProcess)

    rate = rospy.Rate(10) # 10hz

    while not rospy.is_shutdown():
        command = Twist()
        command.linear.x = LINX
        command.angular.z = angz
        pub.publish(command)
        rate.sleep()

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 12 июля 2020

Вы не можете распаковать кортеж в списке аргументов лямбда-выражения (или def оператора) в Python 3. (Это изменение по сравнению с Python 2, где ваше лямбда-выражение могло бы быть действительно.)

Вместо этого вам нужно будет использовать

lambda t: t[0] - t[1]

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...