forked from ray/RobotKernal-UESTC
ultrasonic
parent
1861adb239
commit
e73ef2a5a8
|
@ -11,6 +11,7 @@ find_package(catkin REQUIRED COMPONENTS
|
|||
|
||||
find_package(OpenCV REQUIRED)
|
||||
find_package(Threads REQUIRED)
|
||||
find_package(Boost REQUIRED COMPONENTS thread chrono)
|
||||
|
||||
|
||||
# generate_messages(
|
||||
|
@ -41,10 +42,13 @@ add_library(
|
|||
include/upbot_vision/preprocess.h
|
||||
include/upbot_vision/ranging.h
|
||||
include/upbot_vision/Timer.h
|
||||
include/upbot_vision/ultrasonic.h
|
||||
|
||||
src/detection.cc
|
||||
src/postprocess.cc
|
||||
src/preprocess.cc
|
||||
src/ranging.cc
|
||||
src/ultrasonic.cc
|
||||
)
|
||||
|
||||
add_dependencies(head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
@ -53,13 +57,14 @@ target_link_libraries(head
|
|||
|
||||
)
|
||||
add_executable(main src/main.cc)
|
||||
# add_executable(sub_dis src/sub_dis.cc)
|
||||
add_executable(ultrasonic src/ultrasonic.cc)
|
||||
add_dependencies(main ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
# add_dependencies(sub_dis ${${PROJECT_NAME}_EXPORTED_TARGETS} upbot_vision_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(ultrasonic
|
||||
${Boost_LIBRARIES} Boost::thread Boost::chrono
|
||||
${catkin_LIBRARIES}
|
||||
)
|
||||
|
||||
# target_link_libraries(sub_dis
|
||||
# ${catkin_LIBRARIES}
|
||||
# )
|
||||
target_link_libraries(main
|
||||
head
|
||||
${catkin_LIBRARIES}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
#include <ros/ros.h>
|
||||
#include <sensor_msgs/Range.h>
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
|
||||
class UltrasonicNode {
|
||||
private:
|
||||
ros::NodeHandle nh;
|
||||
ros::Publisher ultrasonic_pub;
|
||||
boost::asio::io_service io;
|
||||
boost::asio::serial_port serial;
|
||||
|
||||
public:
|
||||
UltrasonicNode() : nh("~"), serial(io), ultrasonic_pub(nh.advertise<sensor_msgs::Range>("ultrasonic", 1)) {
|
||||
std::string port_name;
|
||||
nh.param<std::string>("port", port_name, "/dev/ttyUSB0");
|
||||
serial.open(port_name);
|
||||
serial.set_option(boost::asio::serial_port_base::baud_rate(9600));
|
||||
}
|
||||
void readUltrasonic();
|
||||
};
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#include "upbot_vision/ultrasonic.h"
|
||||
|
||||
|
||||
void UltrasonicNode::readUltrasonic() {
|
||||
try {
|
||||
while (true) {
|
||||
// 发送数据
|
||||
serial.write_some(boost::asio::buffer("\xA0", 1));
|
||||
// ROS_INFO("Data sent: 0xA0");
|
||||
|
||||
// 读取数据
|
||||
char data[3];
|
||||
boost::asio::read(serial, boost::asio::buffer(data, 3));
|
||||
sensor_msgs::Range range_msg;
|
||||
range_msg.header.stamp = ros::Time::now();
|
||||
range_msg.header.frame_id = "ultrasonic_sensor";
|
||||
range_msg.radiation_type = sensor_msgs::Range::ULTRASOUND;
|
||||
range_msg.field_of_view = M_PI; // Assuming 180 degrees
|
||||
range_msg.min_range = 0.0; // Minimum range in meters
|
||||
range_msg.max_range = 5.0; // Maximum range in meters
|
||||
range_msg.range = ((data[0] << 16) + (data[1] << 8 ) + data[2]) / 1000.0; // Convert to meters
|
||||
ultrasonic_pub.publish(range_msg);
|
||||
ROS_INFO("Received ultrasonic data: %f mm", range_msg.range);
|
||||
|
||||
// 延迟一段时间
|
||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
|
||||
}
|
||||
} catch (std::exception& e) {
|
||||
ROS_ERROR("Error reading ultrasonic data: %s", e.what());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
ros::init(argc, argv, "ultrasonic_node");
|
||||
UltrasonicNode ultrasonic_node;
|
||||
ros::Rate rate(10); // 10 Hz
|
||||
|
||||
while (ros::ok()) {
|
||||
ultrasonic_node.readUltrasonic();
|
||||
ros::spinOnce();
|
||||
rate.sleep();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue