一.ROS环境安装
设置Ros的下载源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
设置公钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
安装Ros
sudo apt install ros-melodic-desktop-full
设置环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
下载其他功能组件
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
rosdep init 初始化
sudo rosdep init
rosdep update 更新
rosdep update
运行小海龟
1.终端输入命令:roscore
2.打开第二个终端输入 rosrun turtlesim turtlesim_node
3.打开第三个终端输入 rosrun turtlesim turtle_teleop_key
之后就可以通过方向键控制小海龟的移动
二.用 c++写一个程序,控制小海龟画一个圆
(1)Workspace创建
终端输入
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
设置环境变量
查看当前环境变量,终端输入echo $ROS_PACKAGE_PATH
(2)Package创建
cd ./src
catkin_create_pkg my_turtle_package std_msgs rospy roscpp
新建画圆程序 circle.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;
}
(3)编译程序
cd ~/catkin_ws/
catkin_make
(4)运行程序
打开终端输入:roscore
打开第二个终端:rosrun turtlesim turtlesim_node 启动小海龟
打开第三个终端:
cd ~/catkin_ws/
source devel/setup.bash #程序注册
rosrun my_turtle_package yuan
参考:https://blog.csdn.net/m0_53525274/article/details/129389430?spm=1001.2014.3001.5502