ROS小车应用:控制机器人做圆周运动

该博客介绍了如何使用ROS(Robot Operating System)控制机器人进行圆周运动。首先,创建一个功能包并编写Python脚本draw_circle.py,设置节点、发布器和发布频率。然后,通过发布 Twist 消息来指定机器人的线速度和角速度,实现绕z轴的旋转。代码中设置了线速度为0.2m/s,角速度为0.4rad/s,形成半径为0.5m的圆周运动。最后,在仿真环境中运行并观察机器人运动,也可以在真实机器人上进行测试。
部署运行你感兴趣的模型镜像

一、首先创建一个功能包

跳转到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
在这里插入图片描述
然后启动程序,机器人开始画圆~

以上。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值