slam从入门到精通(稍复杂一点的运动控制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        ros本身只是提供了一个框架,上面对应客户需求,下面对应各个传感器,中间就是各个算法和决策措施。但是robot本身要真正动起来的话,还是需要底盘开发板来配合实施的。本身ros的底层输出只能到cmd_vel这一个层次。再深入的开发,比如说用pid来实现cmd_vel的效果,这个就需要在底盘开发板上用rtos+pid之类的控制算法来实现了。

        所以,在还没有自己的实体robot之前,完全可以用turtlesim来仿真测试一下,看下真实的效果是什么样的。

1、测试方法

        测试方法其实很简单。主要过程有三个步骤,第一个步骤打开roscore;第二个步骤把小乌龟仿真界面打开,即rosrun turtlesim turtlesim_node;第三个步骤就是编写小乌龟的控制代码了。控制方法就是前面一章讲过的python编写方法。编写完了,用rosrun beginner_tutorials vel_cmd.py来执行即可。

2、小乌龟前进的方法

vel_msg.linear.x = 0.4

3、小乌龟后退的方法

vel_msg.linear.x = -0.4

4、小乌龟上下侧移的方法

vel_msg.linear.y = 0.4 或者是
vel_msg.linear.y = -0.4

5、小乌龟原地顺时针或者逆时针运动的方法

vel_msg.angular.z = 0.4 或者
vel_msg.angular.z = -0.4

6、小乌龟画圈的办法

vel_msg.linear.x = 0.4
vel_msg.angular.z = 0.4

        画圈还是比较有意思的,效果是这样的,

7、小乌龟画正方形的办法

        要想让让小乌龟画出正方向,主要是有两点需要考虑。第一,在掉头之前,需要保持小乌龟的前进速度;第二,就是计数到了之后,需要立马设置angular.z,并且设置完了之后,迅速恢复为0。为了便于大家学习,这里给出完整的python代码,

#!/usr/bin/env python3

import rospy
from geometry_msgs.msg import Twist

if __name__ == "__main__":
	rospy.init_node("vel_node")

	vel_pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=10)

	vel_msg=Twist()
	vel_msg.linear.x = 0.4
	#vel_msg.angular.z = 0.4
	n = 0

	rate = rospy.Rate(2)
	while not rospy.is_shutdown():
		n +=1
		vel_msg.angular.z = 0;
		if n==20:
			n = 0
			vel_msg.angular.z = 1.57*2
		print(n)			
		vel_pub.publish(vel_msg)
		rate.sleep()

        实际运行的时候,效果是这样的,