浏览代码

[feat]:基本完成foxy版本教程

sangxin 3 年之前
父节点
当前提交
0913f480d7

+ 71 - 5
docs/chapt10/10.10通过Nav2API进行导航.md

@@ -4,11 +4,77 @@ Nav2的API其实是Nav2提供的一个Python库,通过该库你可以事先调
 
 很遗憾的是,该功能包官方并没有发布foxy版本的,再下一个galactic版本才开始正式发布。
 
-
-
-
-
-
+从2022年5月23号开始,教程将开始向humble版本迁移,该部分内容将在humble版本发布。
+
+## 1.导入nav2_simple_commander
+
+```
+from nav2_simple_commander.robot_navigator import BasicNavigator
+import rclpy
+from copy import deepcopy
+```
+
+初始化BasicNavigator
+
+```
+rclpy.init()
+nav = BasicNavigator()
+navigator.waitUntilNav2Active()
+```
+
+## 2.初始化位置
+
+```
+# ======================初始化位置,代替rviz2的2D Pose Estimate===============================
+initial_pose = PoseStamped()
+initial_pose.header.frame_id = 'map'
+initial_pose.header.stamp = navigator.get_clock().now().to_msg()
+initial_pose.pose.position.x = 0.0
+initial_pose.pose.position.y = 0.0
+initial_pose.pose.orientation.w = 1.0
+navigator.setInitialPose(initial_pose)
+```
+
+## 3.导航到点
+
+```
+#========================导航到目标点1===========================================
+goal_pose1 = deepcopy(initial_pose)
+goal_pose1.pose.position.x = 1.5
+nav.goToPose(goal_pose1)
+while not nav.isNavComplete():
+  feedback = nav.getFeedback()
+  #检查是否超时,超时则停止导航到点   
+  if feedback.navigation_duration > 600:
+    nav.cancelNav()
+
+
+#================================导航到目标点2==================================
+goal_pose2 = deepcopy(initial_pose)
+goal_pose2.pose.position.x = -1.5
+
+nav.goToPose(goal_pose2)
+while not nav.isNavComplete():
+  feedback = nav.getFeedback()
+  #检查是否超时,超时则停止导航到点   
+  if feedback.navigation_duration > 600:
+    nav.cancelNav()
+
+#===============================查看返回结果=====================================
+result = nav.getResult()
+if result == NavigationResult.SUCCEEDED:
+    print('Goal succeeded!')
+elif result == NavigationResult.CANCELED:
+    print('Goal was canceled!')
+elif result == NavigationResult.FAILED:
+    print('Goal failed!')
+```
+
+
+
+## 4.总结
+
+上面是对nav2_simple_commander的简单介绍,介于本教程目前主要维护foxy版本问题,暂时该部分无法使用,不过你可以使用galactic版本进行实践。
 
 
 

+ 35 - 1
docs/chapt10/10.11Nav2进阶学习.md

@@ -1,4 +1,38 @@
-内容还在更新中,请关注公众号鱼香ROS,第一时间获取更新
+# 10.11 Nav2进阶学习
+
+各位小伙伴,感谢你能够看到这里,到这里意味着本教程正式的告一段落了,相信你从ros2的基本使用和后面的机器人运动学和建模再到建图和导航,一路收货了非常多的知识。
+
+本节小鱼主要想和你聊聊下一步的学习路线,因为目前教程中并不包含机械臂这块(后面会补齐,主要看Moveit2的发布速度了),所以接下来你有下面几个方向可以选择
+
+## 1.真机实战
+
+真机实战会帮助你提高对机器人硬件和系统的了解,摸一摸真实的传感器,感受下他们的使用和仿真有何不同,当然小鱼接下来也会推出fishbot的实体机器人,同时部署ROS2和Nav。这是一个不错的方向,如果是做机械和做嵌入式硬件相关的小伙伴可以大胆尝试下自己的动手能力。
+
+## 2.SLAM方向
+
+在Nav2教程中,我们需要通过SLAM进行定位和建图,让机器人对环境有个提前的感知,这也是一个非常热门的方向,对应的工作岗位也非常多,几乎每家做机器人的公司都离不开SLAM。
+
+但是SLAM方向细分下来还有很多方向,其对应的知识和内容也是很多的,比如对点云的处理,对开源框架的理解,多传感器融合建图定位等等,这个可以到淘宝或者网上找一些相关课程进行学习。
+
+这块内容对数学功底有一定的要求,软件或者数理出身的小伙伴可以结合自身爱好选择。
+
+这块内容因为小鱼工作中不太涉及所以后续大概率不会出这块教程。
+
+## 3.运动规划控制方向
+
+在Nav2教程中,我们通过运动规划服务器和运动控制服务器完成了路径的搜索和控制机器人沿着指定的路径进行移动,没错,运动规划控制方向就是做这个事情,在地图中找到路,指挥机器人沿着路径进行平滑的运动。
+
+因为小鱼的工作就是做这个方向,所以后续小鱼会继续出这个方向的教程,结合Nav2仿真或者实体机器人,带你将自己的运动控制算法在机器人上跑起来。
+
+## 4.总结
+
+除了上面三个方向,其实还可以继续细分,不过大方向上基本是如此。你可以根据自身的情况进行选择,也欢迎找小鱼付费咨询,知乎微信都可以找小鱼哦~
+
+小鱼后面的任务就是开始进行教程的迁移和细化,相信要不了多久,你就可以看到另一版更加优化和详细的教程,届时ROS2和Nav2也将在各个领域大方光彩。
+
+
+
+
 
 --------------
 

+ 25 - 1
docs/chapt10/10.9使用Fishbot进行自主导航.md

@@ -164,7 +164,31 @@ ros2 launch fishbot_navigation2 navigation2.launch.py
 
 ![fishbot_multi_point](10.9%E4%BD%BF%E7%94%A8Fishbot%E8%BF%9B%E8%A1%8C%E8%87%AA%E4%B8%BB%E5%AF%BC%E8%88%AA/imgs/fishbot_multi_point.gif)
 
-## 7.总结
+
+
+## 7.查看机器人当前在地图中的位置
+
+在机器人导航过程中我们如何实时查看机器人在地图中的位置呢?我们可以通过tf进行查看。
+
+打开终端,输入指令:
+
+```shell
+ros2 run tf2_ros  tf2_echo map base_link
+```
+
+接着就可以看到下面的信息,旋转和变换位资数据了
+
+```shell
+[INFO] [1653215686.225862749] [tf2_echo]: Waiting for transform map ->  base_link: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
+At time 4873.528000000
+- Translation: [-0.009, -0.016, 0.076]
+- Rotation: in Quaternion [0.000, -0.000, -0.000, 1.000]
+At time 4874.514000000
+- Translation: [-0.009, -0.016, 0.076]
+- Rotation: in Quaternion [0.000, -0.000, -0.000, 1.000]
+```
+
+## 8.总结
 
 本节我们终于将FishBot的自主导航给跑了起来,不过我们都是通过RVIZ2的工具给机器人指定的目标点,除了工具栏的工具,我们还可以使用代码的方式发送目标点给FishBot,下一节小鱼就会带你一起学习Nav2的API(应用程序接口)。