【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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()
实际运行的时候,效果是这样的,