先建一个新的工作空间
mkdir -p turtlebot_ws/src
然后进入到src文件内下载turtlebot的功能包
cd turtlebot_ws/src git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone https://github.com/ROBOTIS-GIT/turtlebot3.git git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
下载完后给工作空间安装相关依赖项,并编译
cd ../ rosdep install --from-paths src -i -y catkin_make
编译完成后,我们还需要将工作空间添加到环境变量,这里直接将其设为永久的环境变量并更新
echo "source ~/turtlebot_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
然后开始进行模拟,先运行选择一个gazebo环境下的机器人,
export TURTLEBOT3_MODEL=burger # burger型机器人 export TURTLEBOT3_MODEL=waffle # waffle型机器人
再运行gazebo
roslaunch turtlebot3_gazebo turtlebot3_world.launch
查看相关的节点、话题消息,可以得到用于控制机器人运动的/cmd_vel话题
rostopic list
接下来我们就需要基于对/cmd_vel发布做圆周运动的消息,在学习中我采用了python来编写
#! usr/bin/env python
# coding=utf-8
import rospy
from geometry_msgs.msg import Twist # Twist通常含有各种速度类型的消息类型
def ss():
msg=Twist() # 设定消息载体
msg.linear.x=0.5 # 给线速度、角速度赋值
msg.angular.z=0.2
pub = rospy.Publisher("/cmd_vel",Twist,queue_size=10) # 定义向/cmd_vel话题发送Twist
rate = rospy.Rate(2) # 定义发布速率
while not rospy.is_shutdown(): # 发布消息
pub.publish(msg)
#rospy.loginfo("发布的线速度数据是:n ",msg.linear.x)
#rospy.loginfo("发布的角速度数据是:n ",msg.angular.z)
rate.sleep() # 通过rate::sleep()处理睡眠的时间来控制对应的发布频率
print('====================')
if __name__ == "__main__":
rospy.init_node("turtlebot_test_2") # 注册、初始化节点
ss()
最终代码运行成功。
自己写完才算理解了发布和订阅的方式,比如在这次仿真里,我们可以先运行官方的键盘操纵机器人的launch文件(在运行前,同样需要在终端内选择机器人)
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
并通过rqt_graph来查看节点与节点间通过什么话题来传达消息
rqt_graph
可以看出键盘节点是通过/cmd_vel话题来控制/gazebo,所以我们已经知道了/gazebp订阅了/cmd_vel话题,我们在编写时只需要向这个话题发布我们想要的行为即可。
暑期编程PK赛 得CSDN机械键盘等精美礼品!

![[ROS] turtle bot在gazebo仿真环境下做圆周运动 [ROS] turtle bot在gazebo仿真环境下做圆周运动](http://www.mshxw.com/aiimages/31/1015630.png)
