.. _py_move:
1. 移动
==============
这是 PiCrawler 的第一个项目,用来展示它最基本的功能 —— 移动。
**运行代码**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 1_move.py
当程序启动时,PiCrawler 会先站立起来,并短暂等待。
随后它会持续执行一个循环动作:
向前移动、向后移动、向左转、向右转、
小幅左转以及小幅右转。
每个动作之间都会加入短暂的延时,使运动更加平稳。
按下 Ctrl+C 可以停止程序。
在程序退出之前,机器人会安全地坐下。
**代码**
.. note::
你可以对下面的代码进行 **Modify/Reset/Copy/Run/Stop** 操作。但在此之前,需要进入源码路径,例如 ``picrawler\examples``。修改代码后可直接运行并查看效果。
.. raw:: html
.. code-block:: python
from picrawler import Picrawler
from time import sleep
crawler = Picrawler() # Create PiCrawler object
def main():
speed = 80 # Movement speed
try:
crawler.do_step('stand', 40) # Stand up
sleep(1.0)
while True:
crawler.do_action('forward', 1, speed) # Move forward
sleep(0.25)
crawler.do_action('backward', 1, speed) # Move backward
sleep(0.25)
crawler.do_action('turn left', 1, speed) # Turn left
sleep(0.25)
crawler.do_action('turn right', 1, speed) # Turn right
sleep(0.25)
crawler.do_action('turn left angle', 1, speed) # Small left turn
sleep(0.3)
crawler.do_action('turn right angle', 1, speed) # Small right turn
sleep(0.3)
sleep(0.5)
except KeyboardInterrupt:
print("\nCtrl+C pressed...")
finally:
crawler.do_step('sit', 40) # Sit down before exit
sleep(1.0)
if __name__ == "__main__":
main()
**它是如何工作的?**
#. 导入与初始化
.. code-block:: python
from picrawler import Picrawler
from time import sleep
crawler = Picrawler()
该脚本导入所需的模块,并创建一个
``Picrawler`` 对象,用于控制机器人的所有运动。
#. 主函数与初始化设置
.. code-block:: python
def main():
speed = 80
crawler.do_step('stand', 40)
sleep(1.0)
``main()`` 函数中定义了机器人的运动速度。
在进入循环之前,机器人会先站立起来并保持稳定。
#. 持续运动循环
.. code-block:: python
while True:
crawler.do_action('forward', 1, speed)
crawler.do_action('backward', 1, speed)
crawler.do_action('turn left', 1, speed)
crawler.do_action('turn right', 1, speed)
crawler.do_action('turn left angle', 1, speed)
crawler.do_action('turn right angle', 1, speed)
机器人会在无限循环中持续执行一组预定义的
运动动作。
每个动作之间加入短暂延时,可以让动作更加平滑。
#. 安全退出处理
.. code-block:: python
except KeyboardInterrupt:
print("\nCtrl+C pressed...")
finally:
crawler.do_step('sit', 40)
``try / except / finally`` 结构确保:
- 按下 Ctrl+C 时可以安全地停止循环。
- 程序退出前,机器人会先执行坐下动作。
#. 程序入口
.. code-block:: python
if __name__ == "__main__":
main()
该结构确保只有在脚本被直接运行时,
才会执行 ``main()`` 函数。