注意事项:
- 文件只能是c++或者python,一开始后缀为.c时会报错
- 可以利用tab键补齐命令
- 导入依赖一定要注意拼写情况,若遗漏则依据报错情况去package文件中修改一下即可
- setlocale(LC_ALL,"")命令可以解决输出乱码问题
- 参数设置中,此处的小乌龟要从终端生成,不能用之前的launch文件,否则会使参数服务器运行失效
终端简单命令提示:
- cd:切换路径
- vi:编辑文件
- ls:显示该路径下内容
- esc+u:撤回
- (:x):保存
helloworld
引言:借助helloworld了解基于vscode搭建程序框架
流程:
1.创建一个工作空间:
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make
1.1补充
1.1.1 code . :将该文件在vscode中打开,也可以直接拖动文件进入vs code界面中
1.1.2control+shift+B进入json中进行配置
{
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
2.进入src创建ros包并添加依赖
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
2.1补充
2.1.1也可以在vscode工作空间中的src中利用create catkin package去配置包以及依赖
3.编辑源文件(.cpp文件)
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//解决中文乱码问题
setlocale(LC_ALL,"");
//执行节点初始化
ros::init(argc,argv,"HelloVSCode");
//输出日志
ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");
return 0;
}
4.编辑配置文件
释放136行add
释放149-151target
4.1补充:
4.1.1 此处释放后将前面那块语句用你的后续运行文件名称替换,其实也可以不一样,此处只是起到了一个映射的作用
5.编译并执行
在文件中启动终端,或者cd 该路径
catkin_make
roscore
source ./devel/setup.bash
rosrun 包名 C++节点
任务一:话题发布
1.导入依赖:roscpp rospy std_msgs geometry_msgs
2.配置json文件
3.c++代码:
#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ROS 节点
ros::init(argc,argv,"control");
ros::NodeHandle nh;
// 3.创建发布者对象
ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1000);
// 4.循环发布运动控制消息
//4-1.组织消息
geometry_msgs::Twist msg;
msg.linear.x = 1.0;
msg.linear.y = 0.0;
msg.linear.z = 0.0;
msg.angular.x = 0.0;
msg.angular.y = 0.0;
msg.angular.z = 2.0;
//4-2.设置发送频率
ros::Rate r(10);
//4-3.循环发送
while (ros::ok())
{
pub.publish(msg);
ros::spinOnce();
}
return 0;
}
4.配置cmake
5.启动终端:roscore
6.启动节点:rosrun turtlesim turtlesim_node
7.运行:
cd task01
source ./devel/setup.bash
rosrun tplaunch 1
任务二:话题订阅
1.编辑launch文件
<!--启动乌龟GUI与键盘控制节点-->
<launch>
<node pkg= "turtlesim" type="turtlesim_node" name="turtle1" output="screen" />
<node pkg= "turtlesim" type="turtle_teleop_key" name="key" output="screen" />
</launch>
开启终端运行:
source ./devel/setup.bash
roslaunch tplaunch start_turtle.launch
2.配置包时增加:turtlesim
3.c++代码:
#include "ros/ros.h"
#include "turtlesim/Pose.h"
void doPose(const turtlesim::Pose::ConstPtr& p)
{
ROS_INFO("乌龟位姿信息:x=%.2f,y=%.2f,theta=%.2f,lv=%.2f,av=%.2f",
p->x,p->y,p->theta,p->linear_velocity,p->angular_velocity
);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ROS 节点
ros::init(argc,argv,"sub_pose");
// 3.创建 ROS 句柄
ros::NodeHandle nh;
// 4.创建订阅者对象
ros::Subscriber sub = nh.subscribe<turtlesim::Pose>("/turtle1/pose",1000,doPose);
// 5.回调函数处理订阅的数据
// 6.spin
ros::spin();
return 0;
}
4.打开终端:
cd task01
source ./devel/setup.bash
rosrun tplaunch 2
任务三:服务调用
1.启动launch文件
2.c++代码:
#include "ros/ros.h"
#include "turtlesim/Spawn.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ros 节点
ros::init(argc,argv,"set_turtle");
// 3.创建 ros 句柄
ros::NodeHandle nh;
// 4.创建 service 客户端
ros::ServiceClient client = nh.serviceClient<turtlesim::Spawn>("/spawn");
// 5.等待服务启动
// client.waitForExistence();
ros::service::waitForService("/spawn");
// 6.发送请求
turtlesim::Spawn spawn;
spawn.request.x = 1.0;
spawn.request.y = 1.0;
spawn.request.theta = 1.57;
spawn.request.name = "turtle2";
bool flag = client.call(spawn);
// 7.处理响应结果
if (flag)
{
ROS_INFO("新的乌龟生成,名字:%s",spawn.response.name.c_str());
}
else
{
ROS_INFO("乌龟生成失败!!!");
}
return 0;
}
3.打开终端
source ./devel/setup.bash
rosrun tplaunch 3
任务四:参数设置
1.c++代码:
#include "ros/ros.h"
int main(int argc, char *argv[])
{
ros::init(argc,argv,"colour_change");
ros::NodeHandle nh("turtlesim");
//ros::NodeHandle nh;
// ros::param::set("/turtlesim/background_r",0);
// ros::param::set("/turtlesim/background_g",0);
// ros::param::set("/turtlesim/background_b",0);
nh.setParam("background_r",0);
nh.setParam("background_g",0);
nh.setParam("background_b",0);
return 0;
}
2.打开终端:
roscore
rosrun turtlesim turtlesim_node
cd task01
source ./devel/setup.bash
rosrun tplaunch 4