在做的一个项目有用到pytorch,然后需要利用rviz来进行显示,因此只能是在ros下编写python的功能包,在此做一下记录。
1 ROS下的python代码的编写
实际一个scripts的文件夹,然后在里面定义想要执行的py文件,最后将文件添加到可执行。
mkdir scripts #新建文件夹
cd scripts #进入文件夹
touch talker.py #生成文件
chmod +x talker.py #设置可执行
rosed beginner_tutorials talker.py #自己输入代码
运行代码的方法:
rosrun maze train.py
py文件不需要编译,会自动添加到包的node中,直接执行
2. 回调函数
在我自的代码中,是会需要接收回调函数,对地图进行更新,但是之后还需要进行其他的处理,也就是处理完回调函数A后还需要进行B的处理,但是ros的python代码中,并没有rosspinonce的机制,但是其rosspin并不会占用主线程,因此可以编写一个while函数来执行需要执行的操作,然后在while函数后添加rosspin,实际测试该方法有效。之后每秒打印一个loop,每10秒接收一个data信息,打印一个callback
def callback_pointcloud(data):
print("callback")
map[0][0] = map[0][0]+1
def main():
rospy.init_node("maze",anonymous=True)
rospy.Subscriber("/map",PointCloud2,callback_pointcloud)
rate = rospy.Rate(1);
while not rospy.is_shutdown():
print("loop")
rate.sleep()
rospy.spin()
print("hello")
if __name__ == '__main__':
main()