练习ROS动作编程

本文介绍了ROS(RobotOperatingSystem)的基础概念,如工作区管理、功能包创建和编译,以及如何使用ROS进行话题和服务编程,以控制小乌龟画圆。同时,还涉及了OpenCV库的安装和使用,包括打开图片进行特效展示和从摄像头读取视频的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.ROS基础练习

1.区分工作区间

1.1创建工作空间

1.2编辑工作空间

1.3设置环境变量

1.4检查环境变量

2.功能包

2.1创建功能包

2.2编译功能包

二.ROS话题与服务编程——控制小乌龟画圆圈

2.1创建小乌龟画圆发送程序

2.1.1新建一个终端,命名为终端1,创建工程文件包

2.1.2新建画圆程序为yuan.cpp

2.1.3打开文件夹将如下命令写入yuan.cpp中

2.1.3.1打开文件夹

2.1.3.2写入命令

2.2创建小乌龟画圆接收程序

2.2.1新建小乌龟画圆接收程序,用于更新实时位置

2.2.2打开callBackYuan文件,写入代码

2.3修改CMakeLists.txt

2.3.1进入工程包comm文件夹

2.3.2打开CMakeLists.txt

2.3.3在文件中添加如下代码

2.4编译程序

2.4.1进入工作空间

2.4.2编译创建好的程序

2.5运行程序

2.5.1回到我们的工作空间并进行程序注册

2.5.2新建一个终端

2.5.3建立一个新的终端,命名终端3

2.5.4新建立一个终端,作为海龟的窗口

2.5.5运行

三.安装opencv

四.opencv练习

4.1编写一个打开图片进行特效展示的代码test1.cpp

4.1.1新建一个code文件夹,进入文件夹中

4.1.2创建test1.cpp文件,并将代码复制进去

4.2.3编译文件

五.使用opencv库编写打开摄像头压缩视频的程序

5.1获取虚拟机摄像头权限

5.2创建test2.cpp


一.ROS基础练习

1.区分工作区间

名称 用途
src 代码空间
build 编辑空间
devel 开发空间
install 安装空间
1.1创建工作空间
	mkdir -p ~/catkin_ws/src#创建文件夹
	cd ~/catkin_ws/src#进入目录
	catkin_init_workspace#初始化,使其成为ROS的工作空间

 

1.2编辑工作空间
cd ..
catkin_make

1.3设置环境变量
source /home/lyy/catkin_ws/devel/setup.bash#该环境变量设置只对当前终端有效,lyy是用户名
#将上面命令放置到~/.bashrc文件中,让其对所有终端都有效
sudo nano ~/.bashrc
1.4检查环境变量
echo $ROS_PACKAGE_PATH

2.功能包

2.1创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp
#catkin_create_pkg 功能包名字 依赖
#std_msgs:定义的标准的数据结构
#rospy:提供python编程接口 
#roscpp:提供c++编程接口

 

2.2编译功能包
cd ~/catkin_ws
catkin_make

二.ROS话题与服务编程——控制小乌龟画圆圈

控制小乌龟画圆圈(旋转),并且通过代码订阅小乌龟的实时位置,并在终端打印

2.1创建小乌龟画圆发送程序

2.1.1新建一个终端,命名为终端1,创建工程文件包
cd ~/ros/src/comm/src

 

2.1.2新建画圆程序为yuan.cpp
touch yuan.cpp
2.1.3打开文件夹将如下命令写入yuan.cpp中
2.1.3.1打开文件夹
gedit yuan.cpp
2.1.3.2写入命令
#include "ros/ros.h"
#include "std_msgs/String.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);
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    ros::Rate loop_rate(10);
    //vel_pub会在主题"/turtle1/cmd_vel"(机器人速度控制主题)里广播geometry_msgs::Twist类型的数据
    //ros::Rate loopRate(2);
    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); //赋值完毕后,发送到主题"/turtle1/cmd_vel"。机器人的核心节点会从这个主题接受发送过去的速度值,并转发到硬件体上去执行
	std_msgs::String msg;
        std::stringstream ss;//定义输出流对象
        ss <<vel_cmd;
        msg.data = ss.str();
    	/**
     	* The publish() function is how you send messages. The parameter
     	* is the message object. The type of this object must agree with the type
     	* given as a template parameter to the advertise<>() call, as was done
     	* in the constructor above.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值