【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
ros本身只是提供了一个框架,上面对应客户需求,下面对应各个传感器,中间就是各个算法和决策措施。但是robot本身要真正动起来的话,还是需要底盘开发板来配合实施的。本身ros的底层输出只能到cmd_vel这一个层次。再深入的开发,比如说用pid来实现cmd_vel的效果,这个就需要在底盘开发板上用rtos+pid之类的控制算法来实现了。
所以,在还没有自己的实体robot之前,完全可以用turtlesim来仿真测试一下,看下真实的效果是什么样的。
测试方法其实很简单。主要过程有三个步骤,第一个步骤打开roscore;第二个步骤把小乌龟仿真界面打开,即rosrun turtlesim turtlesim_node;第三个步骤就是编写小乌龟的控制代码了。控制方法就是前面一章讲过的python编写方法。编写完了,用rosrun beginner_tutorials vel_cmd.py来执行即可。
vel_msg.linear.x = 0.4
vel_msg.linear.x = -0.4
- vel_msg.linear.y = 0.4 或者是
- vel_msg.linear.y = -0.4
- vel_msg.angular.z = 0.4 或者
- vel_msg.angular.z = -0.4
- vel_msg.linear.x = 0.4
- vel_msg.angular.z = 0.4
画圈还是比较有意思的,效果是这样的,

要想让让小乌龟画出正方向,主要是有两点需要考虑。第一,在掉头之前,需要保持小乌龟的前进速度;第二,就是计数到了之后,需要立马设置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()
实际运行的时候,效果是这样的,
