你好,我正在为一个学校项目工作。我在Raspberry pi 3 B上使用Sense Hat在led矩阵和IMU上显示像素以获取偏航数据。但是问题是当Ubuntu Mate在ROS(http://www.ros.org/)中启动时(启动时),我试图运行IMU。因此,我提供了在服务中使用robot_upstart(http://docs.ros.org/jade/api/robot_upstart/html/)在启动时运行python脚本的服务。但是服务出现错误:
#!/usr/bin/env python
import rospy
from sense_hat import SenseHat
import time
from random import randint
from std_msgs.msg import Float32
sense = SenseHat()
def randomColor():
red_random = randint(0,255)
blue_random = randint(0,255)
green_random = randint(0,255)
return (red_random,green_random,blue_random)
def gyroData():
pub = rospy.Publisher('gyro', Float32, queue_size=10)
rospy.init_node('picobot_imu')
rate = rospy.Rate(10) # 10hz
sense.set_imu_config(False, True, True)
while not rospy.is_shutdown():
o = sense.get_orientation()
#pitch = o["pitch"]
#roll = o["roll"]
yaw = o["yaw"]
#rospy.loginfo(yaw)
pub.publish(yaw)
rate.sleep()
def main():
sense.clear((0, 0, 0))
sense.low_light = True
g =(0,153,153)
bl = (0,153,0)
b = (0,0,0)
picobot_pixels = [
g,g,b,g,b,g,g,b,
g,g,b,g,b,g,b,b,
g,b,b,g,b,g,g,b,
b,b,b,b,b,b,b,b,
g,g,g,b,bl,b,bl,b,
g,b,g,b,b,bl,b,b,
g,g,g,b,bl,bl,bl,b,
b,b,b,b,b,b,b,b
]
sense.set_pixels(picobot_pixels)
gyroData()
if __name__ == '__main__':
main()
如果我手动运行脚本,一切正常,但是如果运行该服务,则会出现错误。
后来我尝试将启动延迟设置为15秒。
<node pkg="timed_roslaunch" type="timed_roslaunch.sh" args="15 picobot_imu picobot_imu.launch" name="timed_roslaunch2" output="screen" />
服务错误如下:
12月29日10:46:06 pi-mate picobot-start [859]:NODES
12月29日10:46:06 pi-mate picobot-start [859]:/
12月29日10:46:06 pi-mate picobot-start [859]:picobot_imu(picobot_imu / picobot_imu.py)
12月29日10:46:06 pi-mate picobot-start [859]:ROS_MASTER_URI = http://127.0.0.1:11311
12月29日10:46:06 pi-mate picobot-start [859]:[96B blob数据]
12月29日10:46:06 pi-mate picobot-start [859]:进程[picobot_imu-1]:从pid [1823]开始
12月29日10:46:06 pi-mate picobot-start [859]:计算机上的所有进程均已终止,roslaunch将退出
12月29日10:46:06 pi-mate picobot-start [859]:正在关闭处理监视器...
12月29日10:46:06 pi-mate picobot-start [859]:...正在关闭处理监控程序