首页 理论教育如何添加一个新进程到系统中?

如何添加一个新进程到系统中?

【摘要】:给前面的程序增加一个红外避障进程,改变它的行为,而其他部分不需要做大的变动。如果不加以限制,两个进程同时修改电动机速度,必然会出现一片混乱,机器人下一步的运动方向将无法预知。在本程序里碰撞处理进程的优先级高于红外避障进程。全局变量running是机器人开始运动的标志,红外避障进程要等待这一事件发生后才能起作用。For-ward反映机器人当前运动方向,用于避免红外避障进程在后退时处理前方障碍。

给前面的程序增加一个红外避障进程,改变它的行为,而其他部分不需要做大的变动。改动后的程序如下:

改动以后的程序增加了避开侧面障碍物的行为。比较一下,增加的代码除了红外避障进程外,就是用于进程之间的通信。进程间的通信和同步是多进程编程的难点,不解决好这个问题,多进程程序可能会产生一些奇怪的行为。在这个程序里,由于碰撞处理进程和红外避障进程都要修改设置电动机速度的两个全局变量(bill_trans,bill_rot),这是进程间发生冲突的根源。如果不加以限制,两个进程同时修改电动机速度,必然会出现一片混乱,机器人下一步的运动方向将无法预知。

本程序中把bmpr改为全局变量,通过bmpr来划分两个进程生效的时间。即发生碰撞时,只有碰撞处理进程可以修改电动机速度;在其他时间里碰撞处理进程只是在不断检测碰撞传感器,只有红外避障进程才有可能修改电动机速度。在本程序里碰撞处理进程的优先级高于红外避障进程。增加的另两个全局变量是出于红外避障行为逻辑的需要。全局变量running是机器人开始运动的标志,红外避障进程要等待这一事件发生后才能起作用。For-ward反映机器人当前运动方向,用于避免红外避障进程在后退时处理前方障碍。