ROS1.0环境安装与配置

本文详细介绍了在Ubuntu系统中安装ROS1.0的过程,包括遇到的问题和解决方案,以及如何运行小海龟Demo和编写代码控制小海龟画圆。文章还涵盖了远程控制小海龟的实践,突显ROS的通信机制。
摘要由CSDN通过智能技术生成

一、 任务

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

Ⅰ 准备工作

  1. 安装Ubuntu
    需要20.04及以下版本,更高的版本只能支持ROS2

Ⅱ 正式安装

  1. 添加软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 添加密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
  1. 安装ROS
sudo apt update
sudo apt-get install ros-melodic-desktop-full
  1. 初始化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

Ⅱ 实现功能

① 本地
  1. 创建python文件:
touch draw_circle.py
  1. 编辑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()

  1. 运行python文件
chmod +x draw_circle.py
rosrun turtlesim turtlesim_node
./draw_circle.py

在这里插入图片描述

② 远程
  1. 准备工作
    准备两台有ROS的计算机A和B,且A和B处于一个网络下
  2. 在A电脑上设置ROS MASTER
roscore
  1. 在B电脑上设置ROS节点
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
  1. 在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

  1. 在A电脑上运行控制节点:
    为python文件添加执行权限
chmod +x control_turtle.py

运行该python文件
在这里插入图片描述

rosrun your_package_name control_turtle.py

三 心得体会

通过完成以上任务,我对ROS的基本操作和功能有了更深入的了解。在安装ROS软件时,遇到了一些挑战,但通过查找资料和尝试不同的解决方法,最终成功安装并运行了ROS。在熟悉ROS基本命令和运行小海龟demo过程中,我感受到了ROS强大的消息传递机制和灵活的节点通信方式。通过编写控制小海龟走圆形的程序,我加深了对ROS编程的理解,并且通过远程实验进一步掌握了ROS远程通信的方法。这次实验不仅让我学到了很多知识,也提高了我的动手实践能力和解决问题的能力。ROS是一个强大而灵活的机器人操作系统,我对它的学习充满了信心和期待。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的ROS2开发仿真环境的代码示例: URDF文件:在“my_robot/urdf”文件夹下创建名为“my_robot.urdf”的文件。 ```xml <?xml version="1.0"?> <robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <link name="base_link"> <visual> <geometry> <cylinder length="0.1" radius="0.1"/> </geometry> <origin xyz="0 0 0"/> </visual> </link> <joint name="base_joint" type="fixed"> <parent link="world"/> <child link="base_link"/> </joint> <link name="link1"> <visual> <geometry> <box size="0.1 0.1 0.1"/> </geometry> <origin xyz="0 0 0.1"/> </visual> </link> <joint name="joint1" type="revolute"> <parent link="base_link"/> <child link="link1"/> <origin xyz="0 0 0.1"/> <axis xyz="0 0 1"/> </joint> </robot> ``` 控制器配置文件:在“my_robot/controllers”文件夹下创建名为“my_robot_controllers.yaml”的文件。 ```yaml # Joints being controlled by the position_controllers position_controllers: - name: joint1_position_controller type: joint_state_controller/JointStateController joints: - joint1 - name: joint1_position_controller type: position_controllers/JointPositionController joints: - joint1 ``` 启动文件:在“my_robot/launch”文件夹下创建名为“my_robot.launch.py”的Python文件。 ```python import os import launch import launch_ros.actions def generate_launch_description(): urdf_file = os.path.join( get_package_share_directory('my_robot'), 'urdf', 'my_robot.urdf' ) controller_config_file = os.path.join( get_package_share_directory('my_robot'), 'controllers', 'my_robot_controllers.yaml' ) return launch.LaunchDescription([ launch.actions.DeclareLaunchArgument( 'use_sim_time', default_value='true', description='Use simulation (Gazebo) clock if true' ), launch.actions.ExecuteProcess( cmd=['gazebo', '--verbose', '-s', 'libgazebo_ros_init.so', urdf_file], output='screen' ), launch_ros.actions.Node( package='joint_state_publisher', executable='joint_state_publisher', name='joint_state_publisher' ), launch_ros.actions.Node( package='robot_state_publisher', executable='robot_state_publisher', name='robot_state_publisher', parameters=[{ 'robot_description': Command(['xacro', ' ', urdf_file]) }] ), launch_ros.actions.Node( package='controller_manager', executable='spawner.py', name='controller_spawner', arguments=[controller_config_file], output='screen' ) ]) ``` 这些代码只是一个简单的示例,您可以根据自己的需求和机器人模型进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值