ROS实践--运行小海龟仿真例程

ROS实践–运行小海龟仿真例程

由于在之前就已经安装了ROS,所以本文章只有小海龟的相关实验。

1.启动小海龟及其键盘控制

1.1 启动rosmaster

打开一个终端(快捷键ctrl+alt+t),输入roscore

image-20230302171746788

1.2 启动小海龟仿真器

打开第二个终端,输入rosrun turtlesim turtlesim_node。rosrun是一个启动执行文件的命令

image-20230302172022067

1.3 启动海龟控制节点

打开第三个终端,输入rosrun turtlesim turtle_teleop_key

image-20230302172143903

这是用键盘控制小海龟运动,鼠标要在这个终端上,不然键盘就会失去控制。

1.4 启动rqt_graph查看这个程序运行的结构计算图

再打开一个终端,输入rqt_graph

rosout是ros里面一直存在的节点,主要用于存储日志信息。在这个rqt界面上,点上debug后,就只显示有效信息。

image-20230302172445202

rosout是ros里面一直存在的节点,主要用于存储日志信息。在这个rqt界面上,点上debug后,就只显示有效信息。

image-20230302172500210

1.5 查看节点信息

rosnode list

rosnode info /turtlesim

想要看一下现在运行的ros有哪些节点,就用rosnode list,都列举出来。想要看某一个节点的具体信息,就用rosnode info /turtlesim,查看此节点信息

image-20230302172606061

image-20230302172652678

Publications: 
/rosout [rosgraph_msgs/Log]
/turtle1/cmd_vel [geometry_msgs/Twist]

其中 /turtle1/cmd_vel [geometry_msgs/Twist]是我们要的信息
以 /turtle1/cmd_vel消息管道,以geometry_msgs::Twist传递消息

Services: 
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level

这里面可以看到/teleop_turtle,该为发布者的节点名

1.6 查看话题

rostopic list

查看话题,使用rostopic list,就会列举出现在的所有话题,查看某一话题的具体内容,添加info即可,如:rostopic info /turtle1/cmd_vel。

image-20230302172748822

image-20230302172845702

1.7 监听话题内容

rostopic echo /turtle1/cmd_vel

通过键盘控制小海龟运动的同时,通过话题监听就可以查看小海龟运动的实时的线速度、角速度

image-20230302173035791

1.8 按控制量移动海龟运行

如果想控制小海龟运动,就自己发布一个消息,发布一次信息,比如发布小海龟线速度,rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:修改linear的X为1.0,回车后,看见小海龟向前运动了一截。如果想按照一定的频率发布消息,那就要加一个参数,rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist …,即可.

image-20230302174114318

  • 节点(node):节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
  • 话题(topic):话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
  • 消息(message):消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
  • 服务(service):服务是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
  • 节点管理器(master):节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

2. 用C++或python写一个程序,控制小海龟走一个圆形

工作空间workspace,我们在开发一个ROS项目的时候,是以工作空间来代表一个项目的。

  • workspace: 工作空间
  • build:ros编译打包的结果产出目录。我们不需要对这个文件夹做任何编辑操作,属于自动生成。
  • devel: 开发所需要的目录
  • src:存放package的目录
  • CMakeLists.txt: 整个工作空间编译的脚本。此文件我们通常不用去做修改操作。

工作单元package,一个项目中可以创建多个工作单元,这个工作单元,我们称之为package。

  • pkg1: package的名称,开发过程中根据自己实际情况进行创建设定。
  • CMakeLists.txt: 当前package的编译脚本。通常需要为c++代码添加编译时的依赖,执行等操作。
  • package.xml: package相关信息。通常添加一些ros库的支持
  • include文件夹: 存放c++ 头文件的
  • config文件夹:存放参数配置文件,格式为yaml
  • launch文件夹:存放.launch文件的。
  • src:c++源代码
  • scripts:python源代码
  • srv:存放定义的service
  • msg: 存放自定义的消息协议
  • action: 存放自定义的action

2.1 Workspace创建

新建工作空间目录结构

1.新建一个文件夹,命名为catkin_ws

2.在文件夹 catkin_ws 下创建一个文件夹 src

3.移动到src目录下输入catkin_init_workspace。在src文件夹中出现CMakeLists.txt文件

4.返回catkin_ws,对其进行编译

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make

image-20230302202155075

2.2 设置环境变量

设置环境变量是为了让系统知道功能包的位置在哪,以便能找到。确保安装脚本正确地覆盖了工作空间,ROS_PACKAGE_PATH环境变量包含在目录中。
在catkin_ws路径下终端输入source devel/setup.bash,使系统知道功能包放置在catkin_ws这个工作空间下。

检查环境变量
查看当前环境变量,终端输入echo $ROS_PACKAGE_PATH

image-20230302202502435

2.3 Package创建

来到workspace的src目录下,新建my_turtle_package包

cd ./src
catkin_create_pkg my_turtle_package std_msgs rospy roscpp

catkin_create_pkg是创建package的命令。运行以上命令,会新建好package的目录,并且在目录中创建CMakeLists.txt,package.xml,src,include等文件和 目录第一个参数firstros是指创建的package名称,可以根据自己的实际需求去设定。

后面的参数roscpp,rospy,rosmsg是指当前创建的这个package需要提供哪些环境依赖。

  • roscpp是对c++的一种依赖,有了它就可以用c++开发ros程序。
  • rospy是对python的一种依赖,有了它就可以用python开发ros程序。

image-20230302202727303

进入my_turtle_package的src文件中

image-20230302202850489

新建画圆程序名为yuan.cpp

touch yuan.cpp

2.3 画圆程序编写

2.3.1 打开yuan.cpp
gedit yuan.cpp
2.3.2 画圆的代码
#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;
}

image-20230302192801323

2.4 修改CMakeLists.txt文件内容

返回my_turtle_package,打开CMakeLists.txt文件

image-20230302203157666

在CMakeLists.txt文件中找到##Declare a C++ executable,在这一行的前面添加如下内容:

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

image-20230302203337292

2.5 编译程序

进入catkin_ws,编译程序

cd ~/catkin_ws/
catkin_make

image-20230302203509684

image-20230302203526653

2.6 运行程序

新建一个终端,运行ros。

image-20230302194414638

再新建一个终端,启动我们的小海龟。

rosrun turtlesim turtlesim_node

image-20230302194501673

再打开一个终端

cd  ~/catkin_ws/
source devel/setup.bash			#程序注册
rosrun my_turtle_package yuan

image-20230302203913527
按下Ctr+C退出节点,小乌龟停止运动。

  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值