ROS 树莓派小车制作(一) ——ROS “点灯”

ROS 树莓派小车制作(一) ——ROS “点灯”

一、硬件准备

1.树莓派开发板(本人使用的版本为树莓派3b+)。
2.LED灯(没有的话,可以使用万用表测下IO的电平)。
3.显示屏(没有的话,可以使用vnc或者远程桌面)。

二、详细步骤

1.安装树莓派系统Raspbian
这个在网上有许多教程,这这里不详细赘述。

2.在树莓派上安装ROS环境
这个需要注意的是树莓派原生系统Raspbian安装ROS和Ubuntu mate安装ROS有一点区别,我刚开始按照Ubuntu mate的步骤去安装出现了一大堆无法解决的错误,最后在CSDN下面这篇博文的引导下,才正确完成了ROS的安装(我安装的时common版本的,没有多余的可视化的包)附上链接:
https://blog.csdn.net/qq_30267617/article/details/108252600
需要注意的是在这篇博文的第十步:ROS 树莓派小车制作(一) ——ROS “点灯”_第1张图片

在编译roscpp时树莓派可能会死机,在网上查资料后,发现可能roscpp太大,四核一起运行编译会卡死,所以在这句命令后面加入-j2 采用双核编译,给cpu预留空间才能完成,即采用以下代码:

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic -j2

3.创建ROS工作空间
(1)在shell终端依次运行以下命令,创建工作空间:

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

(2)创建完成后,回到工作目录根空间使用catkin_make命令编译整个空间:

cd ~/catkin_ws/
catkin_make

(3)编译完成后,设置环境变量

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

4.创建ROS功能包
进入工作空间,使用catkin_create_pkg命令创建功能包:`

cd ~/catkin_ws/src
catkin_create_pkg ROS_testPi std_msgs rospy roscpp

然后回到工作空间根目录进行编译,

cd ~/catkin_ws
catkin_make

5.编写cpp程序来点亮LED灯
进入我们刚刚创建的功能包ROS_testPi文件的src目录下,编写cpp程序:

cd ~/catkin_ws/src/ROS_testPi/src
vi blink.cpp

这里我们使用vim编辑器来写cpp代码,没有安装vim编辑器的话可以执行以下代码来安装vim:

sudo apt-get install vim

进入vi编辑器后,编写cpp代码如下:

include "ros/ros.h"
#include "std_msgs/Bool.h"

#include
#include"wiringPi.h"

#define LED 1

void blink_callback(const std_msgs::Bool::ConstPtr& msg)
{
	if(msg->data==1){
		digitalWrite(LED,HIGH);
		ROS_INFO("LED ON");
	}

	if(msg->data==0){
		digitalWrite(LED,LOW);
		ROS_INFO("LED OFF");

	}
}

int main(int argc,char** argv){
	ros::init(argc,argv,"blink_led");
	ROS_INFO("Started Blink Node");
	wiringPiSetup();
	pinMode(LED,OUTPUT);
	
	ros::NodeHandle n;
	ros::Subscriber sub=
			n.subscribe("led_blink",10,blink_callback);
	ros::spin();
}

6.修改用于编译代码的CMakeList.txt文件如下:

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)
## System dependencies are found with CMake's conventions
 find_package(Boost REQUIRED COMPONENTS system)

set(wiringPi_include "/usr/include")

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
  ${wiringpi_include}
  
LINK_DIRECTORIES("usr/lib")

add_executable(blink_led src/blink.cpp)
target_link_libraries(blink_led
		${catkin_LIBRARIES} wiringPi
		)
)

修改完CMakeLists.txt后,回到工作空间编译ROS节点:

cd ~/catkin_ws
catkin_make

7.运行代码
首先在打开一个终端运行roscore:

roscore

再打开一个终端,运行我们的刚刚写的点灯的ROS节点:

cd  ~/catkin_ws
rosrun ROS_testPi blink_led

随后运行rostopic命令发布我们的话题:

cd  ~/catkin_ws
rostopic pub /led_blink std_msgs/Bool 1
rostopic pub /led_blink std_msgs/Bool 0

如果树莓派板子上的12脚接了个LED灯的话,这时便可以看到LED亮起和熄灭了。没有的话,可以用万用表测一下12脚的电平来验证代码的正确性。

你可能感兴趣的:(ROS,树莓派小车制作,linux,c++)