【嵌入式应用学习笔记02】ROS1.0控制小乌龟

1. ROS使用命令控制小乌龟画圆

1.1 关于ROS常用的命令介绍

命令作用
rosrun用于启动ROS节点 基本格式为 rosrun 包名 可执行文件名 ,其中可执行文件可以为编译后的cpp文件或者具有可执行权限的py文件
rosnode管理并检查ROS节点状态,如rosnode list列出所有运行的节点,rosnode info 节点名称提供指定节点的详细信息
rostopic操作和显示话题信息。使用rostopic list -v可以查看所有活跃话题以及它们的发布者和订阅者信息,rostopic echo 话题名称可以打印出该话题接收到的消息内容。
rosservice调用ROS服务的命令。例如,rosservice call 服务名称 参数可以调用指定的服务并传递参数。
rosmsg用于显示消息类型的详细信息
rossrv用于显示服务类型的详细信息

1.2 使用ROS命令控制小乌龟画圆

首先我们打开终端,在第一个终端输入

roscore

启动服务
打开第二个终端,启动小海龟节点

rosrun turtlesim turtlesim_node 

打开第三个终端,启动小海龟控制器

rosrun turtlesim turtle_teleop_key 

到这里就可以使用我们的键盘上下左右控制小海龟行动了
接下来我们打开第四个终端使用rostopic命令,使我们的小海龟做出画圆的操作

rostopic pub  -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0"

这里我们主要使用rostopic命令设置我们小乌龟的线速度和角速度同时写一个循环来对我们的小乌龟进行画圆操作
在这里插入图片描述

2. 使用c++程序控制小海龟画圆

首先我们创建一个ros工作空间,创建一个catkin_ws文件夹放置功能源码包

mkdir -p ~/catkin_ws/src

然后进入我们的src文件夹,初始化工作空间

cd ~/catkin_ws/src
 catkin_init_workspace

这样就在src文件中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。
然后我们编译工作空间catkin_make
我们所有的编译工作都需要在我们的catkin_ws文件夹中进行,所以这里我们先进入catkin_ws文件夹

cd ~/catkin_ws

使用catkin_make命令进行编译,编译完成后我们可以发现catkin_ws文件夹中会出现build和devel两个新的文件夹

catkin_make

在这里插入图片描述
使用ls命令进行查看可以看到,我们的catkin_ws文件夹中现在有三个文件夹,build ,devel和src三个文件夹,我们的代码主要存放在src文件夹下面
接下来我们设置环境变量

 echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

配置环境变量生效

source ~/.bashrc

然后我们进入src文件夹中,创建一个功能包,名字叫my_turtle_package

cd ~/catkin_ws/src
catkin_create_pkg my_turtle_package rospy roscpp

我们使用ls命令可以看到,在我们的src文件夹中出现了一个叫my_turtle_package的文件和一个CMakeLists.txt的文件
在这里插入图片描述
接下来我们要在我们创建的包里面创建一个cpp文件

gedit draw_circle.cpp

然后将以下内容写入cpp中并保存

#include "ros/ros.h"
#include<geometry_msgs/Twist.h> //运动速度结构体类型  geometry_msgs::Twist的定义文件
 
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "vel_ctrl");  //对该节点进行初始化操作
    ros::NodeHandle n;         //申明一个NodeHandle对象n,并用n生成一个广播对象vel_pub
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
    //vel_pub会在主题"/cmd_vel"(机器人速度控制主题)里广播geometry_msgs::Twist类型的数据
    ROS_INFO("draw_circle start...");//输出显示信息
    while(ros::ok())
    {
        geometry_msgs::Twist vel_cmd; //声明一个geometry_msgs::Twist 类型的对象vel_cmd,并将速度的值赋值到这个对象里面
 
        vel_cmd.linear.x = 2.0;//前后(+-) m/s
        vel_cmd.linear.y = 0.0;  //左右(+-) m/s
        vel_cmd.linear.z = 0.0;
 
        vel_cmd.angular.x = 0;
        vel_cmd.angular.y = 0;
        vel_cmd.angular.z = 1.8; //机器人的自转速度,+左转,-右转,单位是rad/s
        vel_pub.publish(vel_cmd); //赋值完毕后,发送到主题"/cmd_vel"。机器人的核心节点会从这个主题接受发送过去的速度值,并转发到硬件体上去执行
 
        ros::spinOnce();//调用此函数给其他回调函数得以执行(比例程未使用回调函数)
    }
    return 0;
}

之后打开CMakeLists.txt,在CMakeLists.txt文件中找到## Declare a C++ executable

gedit CMakeLists.txt

可以使用ctrl+f快捷搜索找到## Declare a C++ executable然后在前面添加如下内容

add_executable(draw_circle src/draw_circle.cpp)
target_link_libraries(draw_circle ${catkin_LIBRARIES})

保存之后进入catkin_ws文件夹中开始编译工作

cd ~/catkin_ws/
catkin_make

编译成功之后我们打开ros机器人
第一个终端输入roscore
打开第二个终端打开小乌龟节点rosrun turtlesim turtlesim_node
打开第三个终端启动画圆程序

cd  ~/catkin_ws/
source devel/setup.bash
rosrun my_turtle_package draw_circle

可以看见我们的小乌龟正在以匀速进行圆周运动
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值