ROS云课三分钟-阿克曼车式移动机器人倒车入库出库测试实验
初稿
学生比我强,一部分学生作业已经提交,我忙到一直没时间更新,就拖到了250525。
发现提交视频里面能力满分学生超过了10%,远超预期。
学生实力远强于我,这是非常好的,棒棒哒。
一键配置
echo "Upgrade Mission Begins."echo "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1mQINBFzvJpYBEADY8l1YvO7iYW5gUESyzsTGnMvVUmlV3XarBaJz9bGRmgPXh7jc
VFrQhE0L/HV7LOfoLI9H2GWYyHBqN5ERBlcA8XxG3ZvX7t9nAZPQT2Xxe3GT3tro
u5oCR+SyHN9xPnUwDuqUSvJ2eqMYb9B/Hph3OmtjG30jSNq9kOF5bBTk1hOTGPH4
K/AY0jzT6OpHfXU6ytlFsI47ZKsnTUhipGsKucQ1CXlyirndZ3V3k70YaooZ55rG
aIoAWlx2H0J7sAHmqS29N9jV9mo135d+d+TdLBXI0PXtiHzE9IPaX+ctdSUrPnp+
TwR99lxglpIG6hLuvOMAaxiqFBB/Jf3XJ8OBakfS6nHrWH2WqQxRbiITl0irkQoz
pwNEF2Bv0+Jvs1UFEdVGz5a8xexQHst/RmKrtHLct3iOCvBNqoAQRbvWvBhPjO/p
V5cYeUljZ5wpHyFkaEViClaVWqa6PIsyLqmyjsruPCWlURLsQoQxABcL8bwxX7UT
hM6CtH6tGlYZ85RIzRifIm2oudzV5l+8oRgFr9yVcwyOFT6JCioqkwldW52P1pk/
/SnuexC6LYqqDuHUs5NnokzzpfS6QaWfTY5P5tz4KHJfsjDIktly3mKVfY0fSPVV
okdGpcUzvz2hq1fqjxB6MlB/1vtk0bImfcsoxBmF7H+4E9ZN1sX/tSb0KQARAQAB
tCZPcGVuIFJvYm90aWNzIDxpbmZvQG9zcmZvdW5kYXRpb24ub3JnPokCVAQTAQgA
PgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBMHPbjHmut6IaLFytPQu1vur
F8ZUBQJgsdhRBQkLTMW7AAoJEPQu1vurF8ZUTMwP/3f7EkOPIFjUdRmpNJ2db4iB
RQu5b2SJRG+KIdbvQBzKUBMV6/RUhEDPjhXZI3zDevzBewvAMKkqs2Q1cWo9WV7Z
PyTkvSyey/Tjn+PozcdvzkvrEjDMftIk8E1WzLGq7vnPLZ1q/b6Vq4H373Z+EDWa
DaDwW72CbCBLWAVtqff80CwlI2x8fYHKr3VBUnwcXNHR4+nRABfAWnaU4k+oTshC
Qucsd8vitNfsSXrKuKyz91IRHRPnJjx8UvGU4tRGfrHkw1505EZvgP02vXeRyWBR
fKiL1vGy4tCSRDdZO3ms2J2m08VPv65HsHaWYMnO+rNJmMZj9d9JdL/9GRf5F6U0
quoIFL39BhUEvBynuqlrqistnyOhw8W/IQy/ymNzBMcMz6rcMjMwhkgm/LNXoSD1
1OrJu4ktQwRhwvGVarnB8ihwjsTxZFylaLmFSfaA+OAlOqCLS1OkIVMzjW+Ul6A6
qjiCEUOsnlf4CGlhzNMZOx3low6ixzEqKOcfECpeIj80a2fBDmWkcAAjlHu6VBhA
TUDG9e2xKLzV2Z/DLYsb3+n9QW7KO0yZKfiuUo6AYboAioQKn5jh3iRvjGh2Ujpo
22G+oae3PcCc7G+z12j6xIY709FQuA49dA2YpzMda0/OX4LP56STEveDRrO+CnV6
WE+F5FaIKwb72PL4rLi4
=i0tj
-----END PGP PUBLIC KEY BLOCK-----" >> ~/ros.ascsudo apt-key add ~/ros.ascsudo apt updateecho "Upgrade Mission Completed."echo "Teb Mission Begins."sudo apt install ros-kinetic-stage-ros ros-kinetic-teb-local-planner ros-kinetic-teb-local-planner-tutorials ros-kinetic-global-planner* -yecho "Teb Mission Completed."roslaunch teb_local_planner_tutorials robot_carlike_in_stage.launch
等待自动完成后:
文件管理器,如果需要管理员权限,命令前加上sudo。
sudo thunar
出现超级用户提示。
修改:/opt/ros/kinetic/share/teb_local_planner_tutorials/maps/
地图如下
原文件一定要备份,修改后如下:
然后打开就可以,需要一个autoparkio的程序。
需要修改巡逻程序,将巡逻点更新为依次停车点等。
宽车位3个,窄车位2个。
60分效果
ROS云课三分钟-阿克曼车式移动机器人倒车入库出库测试实验60分
80分效果
ROS云课三分钟-阿克曼车式移动机器人倒车入库出库测试实验80分
满分效果期待学生分享自己的实践体会。
差速巡线机器人设计-满分(100+)的报告-2020_视觉差速巡线逻辑-CSDN博客
非常好的总结!以下是对上述内容要点的精简回顾与整理,帮助进一步巩固理解:
1. 什么是ROS?
- ROS(Robot Operating System):一个开源的机器人软件框架,提供工具、库和功能,用于构建机器人应用程序。
- 本代码通过ROS实现机器人巡逻功能。
2. 代码结构
代码分为三个主要部分:
- 导入库:
rospy
:Python与ROS交互的核心库。- 消息类型:如
PoseStamped
,Pose
,Point
,Quaternion
,描述机器人位置和姿态。- 定义功能函数:
send_goal(goal_pub, waypoint)
:向指定主题发布机器人目标位置。- 主程序逻辑:
- 包含节点初始化、定义目标点、设置发布者、目标点循环发送等核心逻辑。
3. 代码详细功能解析
(1) 导入库
python
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PoseStamped, Pose, Point, Quaternion
- Shebang (
#!/usr/bin/env python
):
- 指定脚本用Python解释器运行。
rospy
:
- 提供与ROS系统交互的功能,如节点创建、通信等。
- 消息类型 (
geometry_msgs.msg
):
- 用于描述目标点的数据结构(如位置坐标和姿态信息)。
(2) 定义函数:
send_goal
python
def send_goal(goal_pub, waypoint):
rospy.loginfo("Sending goal to: (%.2f, %.2f)", waypoint.pose.position.x, waypoint.pose.position.y)
goal_pub.publish(waypoint)
- 功能:向主题发布机器人目标点。
- 参数:
goal_pub
:发布者对象。waypoint
:目标点(包含位置和姿态信息)。- 主要逻辑:
- 使用
rospy.loginfo
输出日志,显示目标点坐标。- 调用
goal_pub.publish(waypoint)
发布目标点。(3) 主程序:
main
- 初始化节点
python
rospy.init_node('patrol_robot', anonymous=True)
- 初始化一个名为
patrol_robot
的ROS节点。anonymous=True
:避免节点名称冲突,自动添加随机后缀。- 定义巡逻点
python
waypoints = [
PoseStamped(
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),
pose=Pose(
position=Point(x=1.0, y=1.0, z=0.0),
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0)
)
),
PoseStamped(
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),
pose=Pose(
position=Point(x=3.0, y=3.0, z=0.0),
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0)
)
)
]
waypoints
:目标点列表(机器人巡逻路径)。- 每个目标点包含:
header
:
frame_id="map"
:指定参考坐标系为地图坐标系。stamp=rospy.Time.now()
:设置时间戳为当前时间。pose
:
position
:目标点位置坐标(x, y, z
)。orientation
:目标点姿态(四元数x, y, z, w
)。- 创建发布者
python
goal_pub = rospy.Publisher('/move_base_simple/goal', PoseStamped, queue_size=10)
rospy.sleep(1)
- 主题:
/move_base_simple/goal
(通常由导航栈监听)。- 消息类型:
PoseStamped
。queue_size=10
:指定消息队列大小。rospy.sleep(1)
:确保发布者准备就绪。- 循环发送目标点
python
try:
while not rospy.is_shutdown():
for waypoint in waypoints:
send_goal(goal_pub, waypoint)
rospy.sleep(30)
except rospy.ROSInterruptException:
pass
- 主循环:
- 持续运行,直到接收到退出信号(如Ctrl+C)。
- 遍历
waypoints
列表,依次将目标点发送给发布者。- 等待30秒后发送下一个目标点。
- 异常处理:
- 捕获
rospy.ROSInterruptException
,实现优雅退出。(4) 程序入口
python
if __name__ == '__main__':
main()
- 检查脚本是否直接运行(非被导入)。
- 调用
main()
函数启动程序。4. 总结
- 节点名称:
patrol_robot
。- 功能:
- 定义了两个巡逻点(
(1.0, 1.0)
和(3.0, 3.0)
)。- 通过发布
/move_base_simple/goal
主题,控制机器人依次移动到目标点。- 每30秒切换一次目标点,模拟巡逻行为。
- 优雅退出:
- 捕获中断信号(如Ctrl+C),实现程序的正常退出。
阿克曼车式移动机器人倒车入库出库测试实验
实验目的
- 掌握ROS(Robot Operating System)在机器人导航中的应用。
- 实现阿克曼车式移动机器人的倒车入库和出库功能。
- 验证巡逻路径规划与目标点导航的准确性和稳定性。
实验环境
- 操作系统:Ubuntu 16.04
- ROS版本:Kinetic Kame
- 机器人平台:阿克曼车式移动机器人
- 模拟环境:Stage仿真器
实验步骤
1. 环境配置
首先,我们需要配置ROS环境,并安装所需的软件包。
# 添加ROS软件源的PGP密钥
echo "Upgrade Mission Begins."
echo "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQINBFzvJpYBEADY8l1YvO7iYW5gUESyzsTGnMvVUmlV3XarBaJz9bGRmgPXh7jc
VFrQhE0L/HV7LOfoLI9H2GWYyHBqN5ERBlcA8XxG3ZvX7t9nAZPQT2Xxe3GT3tro
u5oCR+SyHN9xPnUwDuqUSvJ2eqMYb9B/Hph3OmtjG30jSNq9kOF5bBTk1hOTGPH4
K/AY0jzT6OpHfXU6ytlFsI47ZKsnTUhipGsKucQ1CXlyirndZ3V3k70YaooZ55rG
aIoAWlx2H0J7sAHmqS29N9jV9mo135d+d+TdLBXI0PXtiHzE9IPaX+ctdSUrPnp+
TwR99lxglpIG6hLuvOMAaxiqFBB/Jf3XJ8OBakfS6nHrWH2WqQxRbiITl0irkQoz
pwNEF2Bv0+Jvs1UFEdVGz5a8xexQHst/RmKrtHLct3iOCvBNqoAQRbvWvBhPjO/p
V5cYeUljZ5wpHyFkaEViClaVWqa6PIsyLqmyjsruPCWlURLsQoQxABcL8bwxX7UT
hM6CtH6tGlYZ85RIzRifIm2oudzV5l+8oRgFr9yVcwyOFT6JCioqkwldW52P1pk/
/SnuexC6LYqqDuHUs5NnokzzpfS6QaWfTY5P5tz4KHJfsjDIktly3mKVfY0fSPVV
okdGpcUzvz2hq1fqjxB6MlB/1vtk0bImfcsoxBmF7H+4E9ZN1sX/tSb0KQARAQAB
tCZPcGVuIFJvYm90aWNzIDxpbmZvQG9zcmZvdW5kYXRpb24ub3JnPokCVAQTAQgA
PgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBMHPbjHmut6IaLFytPQu1vur
F8ZUBQJgsdhRBQkLTMW7AAoJEPQu1vurF8ZUTMwP/3f7EkOPIFjUdRmpNJ2db4iB
RQu5b2SJRG+KIdbvQBzKUBMV6/RUhEDPjhXZI3zDevzBewvAMKkqs2Q1cWo9WV7Z
PyTkvSyey/Tjn+PozcdvzkvrEjDMftIk8E1WzLGq7vnPLZ1q/b6Vq4H373Z+EDWa
DaDwW72CbCBLWAVtqff80CwlI2x8fYHKr3VBUnwcXNHR4+nRABfAWnaU4k+oTshC
Qucsd8vitNfsSXrKuKyz91IRHRPnJjx8UvGU4tRGfrHkw1505EZvgP02vXeRyWBR
fKiL1vGy4tCSRDdZO3ms2J2m08VPv65HsHaWYMnO+rNJmMZj9d9JdL/9GRf5F6U0
quoIFL39BhUEvBynuqlrqistnyOhw8W/IQy/ymNzBMcMz6rcMjMwhkgm/LNXoSD1
1OrJu4ktQwRhwvGVarnB8ihwjsTxZFylaLmFSfaA+OAlOqCLS1OkIVMzjW+Ul6A6
qjiCEUOsnlf4CGlhzNMZOx3low6ixzEqKOcfECpeIj80a2fBDmWkcAAjlHu6VBhA
TUDG9e2xKLzV2Z/DLYsb3+n9QW7KO0yZKfiuUo6AYboAioQKn5jh3iRvjGh2Ujpo
22G+oae3PcCc7G+z12j6xIY709FQuA49dA2YpzMda0/OX4LP56STEveDRrO+CnV6
WE+F5FaIKwb72PL4rLi4
=i0tj
-----END PGP PUBLIC KEY BLOCK-----" >> ~/ros.ascsudo apt-key add ~/ros.ascsudo apt updateecho "Upgrade Mission Completed."echo "Teb Mission Begins."sudo apt install ros-kinetic-stage-ros ros-kinetic-teb-local-planner ros-kinetic-teb-local-planner-tutorials ros-kinetic-global-planner* -yecho "Teb Mission Completed."
bash
# 添加ROS软件源的PGP密钥 | |
echo "Upgrade Mission Begins." | |
echo "-----BEGIN PGP PUBLIC KEY BLOCK----- | |
Version: GnuPG v1 | |
mQINBFzvJpYBEADY8l1YvO7iYW5gUESyzsTGnMvVUmlV3XarBaJz9bGRmgPXh7jc | |
VFrQhE0L/HV7LOfoLI9H2GWYyHBqN5ERBlcA8XxG3ZvX7t9nAZPQT2Xxe3GT3tro | |
u5oCR+SyHN9xPnUwDuqUSvJ2eqMYb9B/Hph3OmtjG30jSNq9kOF5bBTk1hOTGPH4 | |
K/AY0jzT6OpHfXU6ytlFsI47ZKsnTUhipGsKucQ1CXlyirndZ3V3k70YaooZ55rG | |
aIoAWlx2H0J7sAHmqS29N9jV9mo135d+d+TdLBXI0PXtiHzE9IPaX+ctdSUrPnp+ | |
TwR99lxglpIG6hLuvOMAaxiqFBB/Jf3XJ8OBakfS6nHrWH2WqQxRbiITl0irkQoz | |
pwNEF2Bv0+Jvs1UFEdVGz5a8xexQHst/RmKrtHLct3iOCvBNqoAQRbvWvBhPjO/p | |
V5cYeUljZ5wpHyFkaEViClaVWqa6PIsyLqmyjsruPCWlURLsQoQxABcL8bwxX7UT | |
hM6CtH6tGlYZ85RIzRifIm2oudzV5l+8oRgFr9yVcwyOFT6JCioqkwldW52P1pk/ | |
/SnuexC6LYqqDuHUs5NnokzzpfS6QaWfTY5P5tz4KHJfsjDIktly3mKVfY0fSPVV | |
okdGpcUzvz2hq1fqjxB6MlB/1vtk0bImfcsoxBmF7H+4E9ZN1sX/tSb0KQARAQAB | |
tCZPcGVuIFJvYm90aWNzIDxpbmZvQG9zcmZvdW5kYXRpb24ub3JnPokCVAQTAQgA | |
PgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBMHPbjHmut6IaLFytPQu1vur | |
F8ZUBQJgsdhRBQkLTMW7AAoJEPQu1vurF8ZUTMwP/3f7EkOPIFjUdRmpNJ2db4iB | |
RQu5b2SJRG+KIdbvQBzKUBMV6/RUhEDPjhXZI3zDevzBewvAMKkqs2Q1cWo9WV7Z | |
PyTkvSyey/Tjn+PozcdvzkvrEjDMftIk8E1WzLGq7vnPLZ1q/b6Vq4H373Z+EDWa | |
DaDwW72CbCBLWAVtqff80CwlI2x8fYHKr3VBUnwcXNHR4+nRABfAWnaU4k+oTshC | |
Qucsd8vitNfsSXrKuKyz91IRHRPnJjx8UvGU4tRGfrHkw1505EZvgP02vXeRyWBR | |
fKiL1vGy4tCSRDdZO3ms2J2m08VPv65HsHaWYMnO+rNJmMZj9d9JdL/9GRf5F6U0 | |
quoIFL39BhUEvBynuqlrqistnyOhw8W/IQy/ymNzBMcMz6rcMjMwhkgm/LNXoSD1 | |
1OrJu4ktQwRhwvGVarnB8ihwjsTxZFylaLmFSfaA+OAlOqCLS1OkIVMzjW+Ul6A6 | |
qjiCEUOsnlf4CGlhzNMZOx3low6ixzEqKOcfECpeIj80a2fBDmWkcAAjlHu6VBhA | |
TUDG9e2xKLzV2Z/DLYsb3+n9QW7KO0yZKfiuUo6AYboAioQKn5jh3iRvjGh2Ujpo | |
22G+oae3PcCc7G+z12j6xIY709FQuA49dA2YpzMda0/OX4LP56STEveDRrO+CnV6 | |
WE+F5FaIKwb72PL4rLi4 | |
=i0tj | |
-----END PGP PUBLIC KEY BLOCK-----" >> ~/ros.asc | |
sudo apt-key add ~/ros.asc | |
sudo apt update | |
echo "Upgrade Mission Completed." | |
echo "Teb Mission Begins." | |
sudo apt install ros-kinetic-stage-ros ros-kinetic-teb-local-planner ros-kinetic-teb-local-planner-tutorials ros-kinetic-global-planner* -y | |
echo "Teb Mission Completed." |
2. 启动仿真环境
roslaunch teb_local_planner_tutorials robot_carlike_in_stage.launch
bash
roslaunch teb_local_planner_tutorials robot_carlike_in_stage.launch |
5. 修改巡逻程序
修改巡逻程序,将巡逻点更新为依次停车点。
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PoseStamped, Pose, Point, Quaterniondef send_goal(goal_pub, waypoint):rospy.loginfo("Sending goal to: (%.2f, %.2f)", waypoint.pose.position.x, waypoint.pose.position.y)goal_pub.publish(waypoint)def main():rospy.init_node('parking_robot', anonymous=True)# 定义停车点(宽车位3个,窄车位2个)waypoints = [PoseStamped(header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),pose=Pose(position=Point(x=2.0, y=2.0, z=0.0), # 宽车位1orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0))),PoseStamped(header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),pose=Pose(position=Point(x=4.0, y=2.0, z=0.0), # 宽车位2orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0))),PoseStamped(header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),pose=Pose(position=Point(x=6.0, y=2.0, z=0.0), # 宽车位3orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0))),PoseStamped(header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),pose=Pose(position=Point(x=2.0, y=4.0, z=0.0), # 窄车位1orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0))),PoseStamped(header=rospy.Header(frame_id="map", stamp=rospy.Time.now()),pose=Pose(position=Point(x=6.0, y=4.0, z=0.0), # 窄车位2orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0)))]goal_pub = rospy.Publisher('/move_base_simple/goal', PoseStamped, queue_size=10)rospy.sleep(1)try:while not rospy.is_shutdown():for waypoint in waypoints:send_goal(goal_pub, waypoint)rospy.sleep(30) # 等待30秒后发送下一个目标点except rospy.ROSInterruptException:passif __name__ == '__main__':main()
python
#!/usr/bin/env python | |
import rospy | |
from geometry_msgs.msg import PoseStamped, Pose, Point, Quaternion | |
def send_goal(goal_pub, waypoint): | |
rospy.loginfo("Sending goal to: (%.2f, %.2f)", waypoint.pose.position.x, waypoint.pose.position.y) | |
goal_pub.publish(waypoint) | |
def main(): | |
rospy.init_node('parking_robot', anonymous=True) | |
# 定义停车点(宽车位3个,窄车位2个) | |
waypoints = [ | |
PoseStamped( | |
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()), | |
pose=Pose( | |
position=Point(x=2.0, y=2.0, z=0.0), # 宽车位1 | |
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0) | |
) | |
), | |
PoseStamped( | |
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()), | |
pose=Pose( | |
position=Point(x=4.0, y=2.0, z=0.0), # 宽车位2 | |
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0) | |
) | |
), | |
PoseStamped( | |
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()), | |
pose=Pose( | |
position=Point(x=6.0, y=2.0, z=0.0), # 宽车位3 | |
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0) | |
) | |
), | |
PoseStamped( | |
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()), | |
pose=Pose( | |
position=Point(x=2.0, y=4.0, z=0.0), # 窄车位1 | |
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0) | |
) | |
), | |
PoseStamped( | |
header=rospy.Header(frame_id="map", stamp=rospy.Time.now()), | |
pose=Pose( | |
position=Point(x=6.0, y=4.0, z=0.0), # 窄车位2 | |
orientation=Quaternion(x=0.0, y=0.0, z=0.0, w=1.0) | |
) | |
) | |
] | |
goal_pub = rospy.Publisher('/move_base_simple/goal', PoseStamped, queue_size=10) | |
rospy.sleep(1) | |
try: | |
while not rospy.is_shutdown(): | |
for waypoint in waypoints: | |
send_goal(goal_pub, waypoint) | |
rospy.sleep(30) # 等待30秒后发送下一个目标点 | |
except rospy.ROSInterruptException: | |
pass | |
if __name__ == '__main__': | |
main() |
实验报告
1. 实验目标
实现阿克曼车式移动机器人的倒车入库和出库功能,验证巡逻路径规划与目标点导航的准确性和稳定性。
2. 实验过程
- 环境配置:安装ROS Kinetic,并配置软件源。
- 启动仿真:使用Stage仿真器启动机器人仿真环境。
- 编写巡逻程序:编写Python脚本,定义巡逻点,并通过发布
/move_base_simple/goal
主题控制机器人移动。 - 测试与验证:在仿真环境中测试机器人的倒车入库和出库功能,验证巡逻路径的准确性和稳定性。
3. 实验结果
- 机器人能够按照预设的巡逻点进行移动,包括宽车位和窄车位的停车。
- 倒车入库和出库功能正常,机器人能够准确到达目标点并完成任务。
- 实验过程中未出现错误或异常,验证了程序的稳定性和可靠性。
4. 实验总结
本次实验成功实现了阿克曼车式移动机器人的倒车入库和出库功能,验证了ROS在机器人导航中的应用效果。通过编写Python脚本控制机器人移动,并设置合理的巡逻点,实现了机器人的自动化巡逻和停车任务。未来可以进一步优化巡逻路径规划算法,提高机器人的导航效率和准确性。