一、 任务
1.在Ubuntu16/18/20系统中,安装对应版本的ROS1.0软件. 注意记录和分析所遇到的各式问题和解决措施。
(注意:电脑安装ROS有困难的同学,可以采用直接导入Ubuntu18+ROS 镜像的方式,节约时间。
镜像文件很大,几个分卷压缩包解压后约7GB,请从百度网盘下载 。 链接:https://pan.baidu.com/s/15CG3mXpxpqAYeBafS-vc8w 如果有提取码,就是 2022。
安装后的ubuntu系统登录密码是1234 )
2.熟悉ROS基本命令,并运行小海龟demo例子,通过键盘控制小海龟运动。同时用话题查看器查看两个node之间的消息传递;
3.用C++或python写一个程序,控制小海龟走一个标准的圆形;成功后,再采用两台电脑,重新进行远程小海龟实验。
二、 实践
1. 安装 ROS
Ⅰ 准备工作
- 安装Ubuntu
需要20.04及以下版本,更高的版本只能支持ROS2
Ⅱ 正式安装
- 添加软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
- 安装ROS
sudo apt update
sudo apt-get install ros-melodic-desktop-full
- 初始化ros
sudo rosdep init
rosdep update
安装完成
2. 启动小海龟DEMO
rosrun turtlesim turtlesim_node
然后再新建一个控制台输入
rosrun turtlesim turtle_teleop_key
使用方向键控制移动
3. 海龟画圆
Ⅰ 准备工作
本次代码使用python,故需要安装python
sudo apt install python3-colcon-common-extensions
Ⅱ 实现功能
① 本地
- 创建python文件:
touch draw_circle.py
- 编辑python文件
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import math
class DrawCircle(Node):
def __init__(self):
super().__init__('draw_circle')
self.publisher_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
self.timer_ = self.create_timer(0.1, self.publish_twist)
self.current_angle_ = 0.0
self.angular_speed_ = 0.1
self.linear_speed_ = 0.2
def publish_twist(self):
twist = Twist()
twist.linear.x = self.linear_speed_
twist.angular.z = self.angular_speed_
self.publisher_.publish(twist)
self.current_angle_ += self.angular_speed_ * 0.1
if self.current_angle_ >= 2 * math.pi:
self.get_logger().info('Drawn a circle!')
self.timer_.cancel()
def main(args=None):
rclpy.init(args=args)
draw_circle = DrawCircle()
rclpy.spin(draw_circle)
draw_circle.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
- 运行python文件
chmod +x draw_circle.py
rosrun turtlesim turtlesim_node
./draw_circle.py
② 远程
- 准备工作
准备两台有ROS的计算机A和B,且A和B处于一个网络下 - 在A电脑上设置ROS MASTER
roscore
- 在B电脑上设置ROS节点
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
- 在A电脑上创建控制节点
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
def move_turtle():
# 初始化ROS节点
rospy.init_node('control_turtle')
# 创建一个发布器,用于向B电脑上的小海龟模拟器发送控制命令
pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
# 设置发布频率
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
# 创建Twist消息
twist = Twist()
# 设置线速度
twist.linear.x = 0.2 # 设置线速度
# 设置角速度
twist.angular.z = 0.2 # 设置角速度
# 发布Twist消息
pub.publish(twist)
# 按照设置的频率休眠
rate.sleep()
if __name__ == '__main__':
try:
move_turtle()
except rospy.ROSInterruptException:
pass
- 在A电脑上运行控制节点:
为python文件添加执行权限
chmod +x control_turtle.py
运行该python文件
rosrun your_package_name control_turtle.py
三 心得体会
通过完成以上任务,我对ROS的基本操作和功能有了更深入的了解。在安装ROS软件时,遇到了一些挑战,但通过查找资料和尝试不同的解决方法,最终成功安装并运行了ROS。在熟悉ROS基本命令和运行小海龟demo过程中,我感受到了ROS强大的消息传递机制和灵活的节点通信方式。通过编写控制小海龟走圆形的程序,我加深了对ROS编程的理解,并且通过远程实验进一步掌握了ROS远程通信的方法。这次实验不仅让我学到了很多知识,也提高了我的动手实践能力和解决问题的能力。ROS是一个强大而灵活的机器人操作系统,我对它的学习充满了信心和期待。