一、首先创建一个功能包

跳转到src目录下
catkin_create_pkg 功能包名字
进入目录,创建一个script目录(主要使用py来写)
然后创建一个py文件,取名draw_circle.py  默认是没有可执行权限的,要手动加上

二、控制机器人做圆周运动

思路:通过给机器人持续发布一个含有角速度和线速度的运动指令,让机器人实现一个圆周运动

开始写代码

#!/usr/bin/python    这个必写的啦
import rospy        这个也是必写的啦
from geometry_msg.msg import Twist
(我们要发布一个速度指令,之前在执行机器人例程中,启动的键盘发布节点,发布的消息名是cmd_vel,消息类型则是Twist,所以我们import Twist这个消息)

先创建一个发布器
def cmd_vel_pub():
	rospy.init_node(‘draw_circle’,anonymous=False)    初始化一个节点,取名draw_circle,anonymous为false让节点名保持不变
	再创建一个发布器,消息名取cmd_vel,消息类型是Twist,设置一个缓存队列queue_size=10,这样最多可以缓存10条消息
	cmd_pub = rospy.Publisher(‘cmd_vel’,Twist,queue_size=10)
	设置一个发布频率,设置为10赫兹,一秒钟发布10次消息
	rate = rospy.Rate(10)
	然后创建一个Twist类型的消息
	twist = Twist()
	这时可以输出一条消息,比如“开始控制机器人”
	rospy.loginfo(‘Start Control Robot Draw a Circle’)
	然后进入一个循环,并设置,只要节点没有结束,就一直循环
	while not rospy.is.shutdown():
		然后我们在这里循环发布消息,要给twist里面进行赋值
		我们先查看twist消息中包含哪些内容,可以打开终端,用rosmsg show geometry_msgs/Twist查看

在这里插入图片描述

	可以看到包含了linear的向量,里面有xyz(线速度),以及角速度的xyz
		先给线速度赋值
		twist.linear.x = 0.2   咱沿着x方向运动,设定以0.2米每秒的速度
		twist.angular.z = 0.4 角速度我们赋值给z,我们是绕着z轴旋转,0.4弧度每秒
		根据v(线速度)=Ω(角速度)*r(半径)可以算出,r=0.5米(0.2 = 0.4*0.5)
		赋值完之后,我们发布出去
		cmd_pub.publish(twist)
		发布完成后,我们把剩余的时间用sleep消耗掉
		rate.sleep()

	然后写主函数
	if  __name__ == '__main__':
    try:
        cmd_vel_pub()
    except rospy.ROSInternalException:
            pass

写完了,完整代码:

#!/usr/bin/python
import rospy
from geometry_msgs.msg import Twist

def cmd_vel_pub():
    rospy.init_node('draw_circle',anonymous=False)
    cmd_pub = rospy.Publisher('cmd_vel',Twist,queue_size=10)
    rate = rospy.Rate(10)
    twist = Twist()
    rospy.loginfo('Start Control Robot Draw a Circle')

    while not rospy.is_shutdown():
        twist.linear.x = 0.2
        twist.angular.z = 0.4
        cmd_pub.publish(twist)
        rate.sleep()

if  __name__ == '__main__':
    try:   cmd_vel_pub()
    except rospy.ROSInternalException:   pass

总结步骤:
1、初始化一个节点
2、创建发布器
3、设置一个发布频率
4、创建消息类型
5、发布消息(可循环发布,也可指定发布次数)
1、为消息赋值
2、发布消息
6、主函数调用

可以在我们的仿真器中运行一下看看
查看我们的pc中master节点是机器人还是我们pc自己,如果是机器人,就改成我们自己为master
在.bashrc 中修改
在这里插入图片描述
输入指令

	roslaunch robot_simulation simulation_one_robot.launch   启动仿真器

编译工作空间,然后再新开窗口,启动我们编写的节点

rosrun yjc_application_test draw_circle.py

在这里插入图片描述
在这里插入图片描述
小车开始画圆了
查看一下速度发布器的信息
仿真器作为订阅者,画圆的程序作为发布者
在这里插入图片描述
然后在真的机器人上试试
先启动机器人底盘节点
pc端配置分布式通讯,把master节点设置回机器人ip
在这里插入图片描述
然后启动程序,机器人开始画圆~

以上。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐