Hola les hago una pregunta estoy leyendo los valores del laserscan para luego pasarlo al servicio que creo en el cual me dice en el poryecto que haga eso, pero lo que me parece raro es que los valores del sensor laserscan frontal me varia, y mucho es como que a medida que me voy acercando a la pared no me disminuye mucho la la lectura y a veces me aumenta en vez de disminuirla y la verdad nose porque hace esto. Me gustaria que me ayuden ya que llevo bastante tiempo sin poder resolver este problema. Les dejo el codigo a continuación:
#!/usr/bin/env python
import rospy
from scan_test.srv import FindWall, FindWallResponse, FindWallRequest
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist
request = FindWallRequest()
class Scannerwall:
def init(self):
self.publicador = rospy.Publisher(’/cmd_vel’, Twist, queue_size=1)
rospy.Subscriber(’/scan’, LaserScan, self.callback) # Ya que esta constantemente
rospy.Service(’/my_service’, FindWall,self.my_callback) # Igual este
self.laserFrontal = None
self.rayo270 = None
self.move = Twist()
# Aca inicia el loop que printea y corre los comandos que quieras todo el tiempo
# Con rospy.sleep limita cada cuanto corre el loop
while not rospy.is_shutdown(): # Mientras no se aprete ctrl + c
print('Frente = ', self.laserFrontal)
print('270 = ', self.rayo270)
rospy.sleep(0.1)
def publicando(self, x, z):
self.move.linear.x = x
self.move.linear.z = z
self.publicador.publish(self.move)
rospy.sleep(1)
def callback(self, msg):
self.laserFrontal = msg.ranges[360]
self.rayo270 = msg.ranges[270]
rospy.sleep(1)
def my_callback(self, request):
respuesta = FindWallResponse()
while respuesta.wallfound != True:
print(self.laserFrontal)
if self.laserFrontal > 0.8:
self.publicando(0.1, 0)
else:
while self.rayo270 > 1:
self.publicando(0, 0.1)
else:
respuesta.wallfound = True
return respuesta
rospy.init_node(‘servidor_servicios’)
robot = Scannerwall()