## 安装ros1 运行一键安装脚本 ```shell wget http://fishros.com/install -O fishros && . fishros ``` 安装会有提示,这里不做过多阐述 ## 创建并编译工作空间 ```shell mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws/ catkin_make source ~/catkin_ws/devel/setup.bash #设置环境变量 echo $ROS_PACKAGE_PATH #检查环境变量是否正确;正确的形式:(/home/root1/catkin_ws/src:/opt/ros/noetic/share) ``` ## 创建并编译功能包 ```shell cd ~/catkin_ws/src catkin_create_pkg turtle_circle rospy std_msgs geometry_msgs #创建功能包 cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash ``` ## 创建脚本文件 ```shell cd ~/catkin_ws/src/turtle_circle mkdir scripts cd scripts touch draw_circle.py gedit draw_circle.py #粘贴下面的代码 chmod +x draw_circle.py ``` ### 画圆代码 ```python #!/usr/bin/env python3 import rospy from geometry_msgs.msg import Twist import time def draw_square(): rospy.init_node('turtle_square', anonymous=True) pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) vel_msg = Twist() rate = rospy.Rate(10) # 10 Hz for i in range(5): vel_msg.linear.x = 0 vel_msg.angular.z = 3.14 pub.publish(vel_msg) rospy.sleep(1) # 旋转约180度 vel_msg.linear.x = 4 vel_msg.angular.z = 9.42 pub.publish(vel_msg) rospy.sleep(1) # 持续1秒前进 pub.publish(Twist()) if __name__ == '__main__': try: draw_square() except rospy.ROSInterruptException: pass ``` ### 画正方形代码 ```python #!/usr/bin/env python3 import rospy from geometry_msgs.msg import Twist import time def draw_square(): # 初始化节点,命名为"turtle_square" rospy.init_node('turtle_square', anonymous=True) # 创建发布者,发布速度指令到"/turtle1/cmd_vel"话题 pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) # 设置速度消息对象 vel_msg = Twist() # 控制频率(Hz) rate = rospy.Rate(100) # 循环4次,绘制正方形的4条边 for i in range(5): # 1. 控制乌龟前进(线速度沿x轴,y和z轴为0) vel_msg.linear.x = 2.0 # 前进速度(单位:m/s) vel_msg.angular.z = 0.0 # 旋转速度为0(不转向) pub.publish(vel_msg) time.sleep(1) # 前进1秒,总距离=速度×时间=2m # 2. 控制乌龟原地旋转90度(线速度为0,角速度沿z轴) vel_msg.linear.x = 0.0 # 停止前进 vel_msg.angular.z = 1.57 # 旋转角速度(1.57 rad≈90°,逆时针) pub.publish(vel_msg) time.sleep(1) # 旋转1秒,总角度=角速度×时间≈90° # 绘制完成后,停止乌龟运动 vel_msg.linear.x = 0.0 vel_msg.angular.z = 0.0 pub.publish(vel_msg) if __name__ == '__main__': try: draw_square() except rospy.ROSInterruptException: pass ``` ## 使用键盘控制乌龟移动 注意这里需要开2个终端,第一个用来创建乌龟,第二个用来发送wsad的指令来控制乌龟移动 ```shell roscore & rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key ``` ## 运行节点 1. 启动 turtlesim_node 2. 运行你的 draw_circle 节点 ```shell source ~/catkin_ws/devel/setup.bash roscore & rosrun turtlesim turtlesim_node rosrun turtle_circle draw_circle.py ``` ## 拓展内容 ### 双乌龟 #### 添加乌龟 ```shell rosservice call /spawn 3 3 0 turtle2 ``` #### 模仿上只运动 ```shell rosrun turtlesim mimic input:=turtle1 output:=turtle2 ``` #### 改变初始位置 ```shell rosservice call /turtle1/teleport_absolute 1 1 0 ``` 
没有评论