diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e1f710d026afc4c1b4b72e4b9c122cb0c644e9db --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Ignore the "build" and "devel" folder of the catkin_ws +catkin_ws/build/ +catkin_ws/devel/ + +# Ignore the ".catkin_workspace" file of the catkin_ws +catkin_ws/.catkin_workspace + +# Ignore the auto-generated "CMakeLists.txt" of the catkin_ws +catkin_ws/src/CMakeLists.txt + +# Ignore swp files and other typically unwanted files +*.swp +.DS_Store diff --git a/catkin_ws/.vscode/c_cpp_properties.json b/catkin_ws/.vscode/c_cpp_properties.json new file mode 100644 index 0000000000000000000000000000000000000000..d535515eab12dd1eb386768ddb625a29acf282d7 --- /dev/null +++ b/catkin_ws/.vscode/c_cpp_properties.json @@ -0,0 +1,22 @@ +{ + "configurations": [ + { + "browse": { + "databaseFilename": "${default}", + "limitSymbolsToIncludedHeaders": false + }, + "includePath": [ + "/opt/ros/noetic/include/**", + "/home/chenjiel/my-messages/catkin_ws/src/my_messages_pkg/include/**", + "/usr/include/**", + "/home/chenjiel/my-messages/catkin_ws/devel/include/**" + ], + "name": "ROS", + "intelliSenseMode": "gcc-x64", + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu11", + "cppStandard": "c++14" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/catkin_ws/.vscode/settings.json b/catkin_ws/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..20b3320327321b65b70b1f33cda044341e3a3942 --- /dev/null +++ b/catkin_ws/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "python.autoComplete.extraPaths": [ + "/opt/ros/noetic/lib/python3/dist-packages", + "/home/chenjiel/my-messages/catkin_ws/devel/lib/python3" + ], + "python.analysis.extraPaths": [ + "/opt/ros/noetic/lib/python3/dist-packages" + ], + "files.associations": { + "typeindex": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/CMakeLists.txt b/catkin_ws/src/my_messages_pkg/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..159df870e24674baa2091bbf111725d161dfa69d --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/CMakeLists.txt @@ -0,0 +1,226 @@ +cmake_minimum_required(VERSION 3.0.2) +project(my_messages_pkg) + +## Compile as C++11, supported in ROS Kinetic and newer +# add_compile_options(-std=c++11) + +## 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 + message_generation +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a exec_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +add_message_files( + FILES + person.msg +) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +generate_messages( + DEPENDENCIES + std_msgs +) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if your package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES my_messages_pkg + CATKIN_DEPENDS roscpp rospy std_msgs message_runtime +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +include_directories( +# include + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/my_messages_pkg.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/my_messages_pkg_node.cpp) +add_executable(c_publisher src/c_publisher.cpp) +add_executable(c_subscriber src/c_subscriber.cpp) +add_executable(demon_msg_pub src/demon_msg_pub.cpp) +add_executable(demon_msg_sub src/demon_msg_sub.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(demon_msg_pub ${PROJECT_NAME}_generate_messages_cpp) +add_dependencies(demon_msg_sub ${PROJECT_NAME}_generate_messages_cpp) + +## Specify libraries to link a library or executable target against +target_link_libraries(c_publisher + ${catkin_LIBRARIES} +) + +target_link_libraries(c_subscriber + ${catkin_LIBRARIES} +) + +target_link_libraries(demon_msg_pub + ${catkin_LIBRARIES} +) + +target_link_libraries(demon_msg_sub + ${catkin_LIBRARIES} +) +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +catkin_install_python(PROGRAMS + scripts/demo_pub_p.py + scripts/demo_sub_p.py + scripts/demo_pub_def.py + scripts/demo_sub_def.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +## Mark executables for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html +# install(TARGETS ${PROJECT_NAME}_node +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark libraries for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html +# install(TARGETS ${PROJECT_NAME} +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_my_messages_pkg.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/catkin_ws/src/my_messages_pkg/launch/pub_sub.launch b/catkin_ws/src/my_messages_pkg/launch/pub_sub.launch new file mode 100644 index 0000000000000000000000000000000000000000..29b4fac4749b6d56073b035ffed0f39f36d305f4 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/launch/pub_sub.launch @@ -0,0 +1,7 @@ +<launch> + + <node pkg = "my_messages_pkg" type = "c_publisher" name = "Pub_launch" /> + <node pkg = "my_messages_pkg" type = "c_subscriber" name = "Sub_launch" /> + + +</launch> \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/msg/person.msg b/catkin_ws/src/my_messages_pkg/msg/person.msg new file mode 100644 index 0000000000000000000000000000000000000000..eb170f6eb9844c21ca9ebee348cf0d742c013f88 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/msg/person.msg @@ -0,0 +1,3 @@ +string name +int32 age +float32 height \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/package.xml b/catkin_ws/src/my_messages_pkg/package.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1e21723665feebdd10ff595b8a854edeb44d88e --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/package.xml @@ -0,0 +1,72 @@ +<?xml version="1.0"?> +<package format="2"> + <name>my_messages_pkg</name> + <version>0.0.0</version> + <description>The my_messages_pkg package</description> + + <!-- One maintainer tag required, multiple allowed, one person per tag --> + <!-- Example: --> + <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --> + <maintainer email="chenjiel@todo.todo">chenjiel</maintainer> + + + <!-- One license tag required, multiple allowed, one license per tag --> + <!-- Commonly used license strings: --> + <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --> + <license>TODO</license> + + + <!-- Url tags are optional, but multiple are allowed, one per tag --> + <!-- Optional attribute type can be: website, bugtracker, or repository --> + <!-- Example: --> + <!-- <url type="website">http://wiki.ros.org/my_messages_pkg</url> --> + + + <!-- Author tags are optional, multiple are allowed, one per tag --> + <!-- Authors do not have to be maintainers, but could be --> + <!-- Example: --> + <!-- <author email="jane.doe@example.com">Jane Doe</author> --> + + + <!-- The *depend tags are used to specify dependencies --> + <!-- Dependencies can be catkin packages or system dependencies --> + <!-- Examples: --> + <!-- Use depend as a shortcut for packages that are both build and exec dependencies --> + <!-- <depend>roscpp</depend> --> + <!-- Note that this is equivalent to the following: --> + <!-- <build_depend>roscpp</build_depend> --> + <!-- <exec_depend>roscpp</exec_depend> --> + <!-- Use build_depend for packages you need at compile time: --> + <!-- <build_depend>message_generation</build_depend> --> + <!-- Use build_export_depend for packages you need in order to build against this package: --> + <!-- <build_export_depend>message_generation</build_export_depend> --> + <!-- Use buildtool_depend for build tool packages: --> + <!-- <buildtool_depend>catkin</buildtool_depend> --> + <!-- Use exec_depend for packages you need at runtime: --> + <!-- <exec_depend>message_runtime</exec_depend> --> + <!-- Use test_depend for packages you need only for testing: --> + <!-- <test_depend>gtest</test_depend> --> + <!-- Use doc_depend for packages you need only for building documentation: --> + <!-- <doc_depend>doxygen</doc_depend> --> + <buildtool_depend>catkin</buildtool_depend> + <build_depend>roscpp</build_depend> + <build_depend>rospy</build_depend> + <build_depend>std_msgs</build_depend> + <build_depend>message_generation</build_depend> + + <build_export_depend>roscpp</build_export_depend> + <build_export_depend>rospy</build_export_depend> + <build_export_depend>std_msgs</build_export_depend> + + <exec_depend>roscpp</exec_depend> + <exec_depend>rospy</exec_depend> + <exec_depend>std_msgs</exec_depend> + <exec_depend>message_runtime</exec_depend> + + + <!-- The export tag contains other, unspecified, tags --> + <export> + <!-- Other tools can request additional information be placed here --> + + </export> +</package> diff --git a/catkin_ws/src/my_messages_pkg/scripts/demo_pub_def.py b/catkin_ws/src/my_messages_pkg/scripts/demo_pub_def.py new file mode 100755 index 0000000000000000000000000000000000000000..be1ce2dcbc227f2a82145d7ab474dfba73170e8d --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/scripts/demo_pub_def.py @@ -0,0 +1,20 @@ +import rospy +from my_messages_pkg.msg import person + +if __name__ == "__main__": + + rospy.init_node("Define_msg") + + pub = rospy.Publisher("zidingyi",person,queue_size=10) + + p = person() + p.name = "chenjie" + p.age = 25 + p.height = 1.75 + rate = rospy.Rate(1) + + while not rospy.is_shutdown(): + pub.publish(p) + rate.sleep() + + pass \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/scripts/demo_pub_p.py b/catkin_ws/src/my_messages_pkg/scripts/demo_pub_p.py new file mode 100755 index 0000000000000000000000000000000000000000..daea500a38a1ee3ee6f0de20993bfaa6779489e5 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/scripts/demo_pub_p.py @@ -0,0 +1,24 @@ +import rospy +from std_msgs.msg import String + +if __name__ == "__main__": + + rospy.init_node("Chenjie_Python") + + pub = rospy.Publisher("che",String,queue_size=10) + + msg = String() + + rate = rospy.Rate(1) + + count = 0 + + while not rospy.is_shutdown(): + count += 1 + msg.data = "hello" + str(count) + pub.publish(msg) + rate.sleep() + + pass + + diff --git a/catkin_ws/src/my_messages_pkg/scripts/demo_sub_def.py b/catkin_ws/src/my_messages_pkg/scripts/demo_sub_def.py new file mode 100755 index 0000000000000000000000000000000000000000..700d8ba28190d85ac81c4787cff818d444e7f542 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/scripts/demo_sub_def.py @@ -0,0 +1,16 @@ +import rospy +from my_messages_pkg.msg import person + +def doMsg(p): + rospy.loginfo("subscription:%s,%d,%.2f",p.name,p.age,p.height) + + +if __name__ == "__main__": + + rospy.init_node("Define_msg_2") + + sub = rospy.Subscriber("zidingyi",person,doMsg,queue_size=10) + + rospy.spin() + + pass \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/scripts/demo_sub_p.py b/catkin_ws/src/my_messages_pkg/scripts/demo_sub_p.py new file mode 100755 index 0000000000000000000000000000000000000000..02c3fa12dd2f8148e9b5e2ccc58cc93e9a2692bd --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/scripts/demo_sub_p.py @@ -0,0 +1,16 @@ +import rospy +from std_msgs.msg import String + +def doMsg(msg): + rospy.loginfo("subscription:%s",msg.data) + + +if __name__ == "__main__": + + rospy.init_node("Chenjie_Python2") + + sub = rospy.Subscriber("che",String,doMsg,queue_size=10) + + rospy.spin() + + pass \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/src/c_publisher.cpp b/catkin_ws/src/my_messages_pkg/src/c_publisher.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6c3f91839b9be6dccaef59d1d3c77d9e6af2d446 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/src/c_publisher.cpp @@ -0,0 +1,19 @@ +#include "ros/ros.h" +#include <ros/package.h> +#include "std_msgs/String.h" + +int main(int argc, char* argv[]) +{ + // Initialise the node + ros::init(argc, argv, "chenjiel_node"); + ros::NodeHandle nh; + ros::Publisher pub = nh.advertise<std_msgs::String>("fang",10); + std_msgs::String msg; + while (ros::ok()) + { + msg.data = "hello"; + pub.publish(msg); + } + // Main has ended, return 0 + return 0; +} \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/src/c_subscriber.cpp b/catkin_ws/src/my_messages_pkg/src/c_subscriber.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fd57a450a8d76b90a55a47ce30a475f6fba81f3a --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/src/c_subscriber.cpp @@ -0,0 +1,19 @@ +#include "ros/ros.h" +#include <ros/package.h> +#include "std_msgs/String.h" + +void doMsg(const std_msgs::String::ConstPtr &msg){ + ROS_INFO("CHENJIEL:%s",msg->data.c_str()); +} + +int main(int argc, char* argv[]) +{ + // Initialise the node + ros::init(argc, argv, "chenjiel_node2"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("fang",10,doMsg); + + ros::spin(); + // Main has ended, return 0 + return 0; +} \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/src/demon_msg_pub.cpp b/catkin_ws/src/my_messages_pkg/src/demon_msg_pub.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4b71bd386b891c28ab75aed7ec4aed0e9c04de88 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/src/demon_msg_pub.cpp @@ -0,0 +1,29 @@ +#include "ros/ros.h" +#include "my_messages_pkg/person.h" + +int main(int argc, char* argv[]) +{ + // Initialise the node + setlocale(LC_ALL,""); + ros::init(argc, argv, "banzhuren"); + ros::NodeHandle nh; + ros::Publisher pub = nh.advertise<my_messages_pkg::person>("Chat",10); + + my_messages_pkg::person person_list; + person_list.name = "张三"; + person_list.age = 1; + person_list.height = 1.73; + + ros::Rate rate(1); + + while (ros::ok()) + { + person_list.age += 1; + pub.publish(person_list); + rate.sleep(); + + ros::spinOnce(); + } + // Main has ended, return 0 + return 0; +} \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/src/demon_msg_sub.cpp b/catkin_ws/src/my_messages_pkg/src/demon_msg_sub.cpp new file mode 100644 index 0000000000000000000000000000000000000000..aa8284face53de224b7d26e5445c53ef22a98ebe --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/src/demon_msg_sub.cpp @@ -0,0 +1,19 @@ +#include "ros/ros.h" +#include "my_messages_pkg/person.h" + +void doPerson(const my_messages_pkg::person::ConstPtr& person_list){ + ROS_INFO("订阅人的信息:%s,%d,%.2f",person_list->name.c_str(),person_list->age,person_list->height); + +} + +int main(int argc, char* argv[]) +{ + // Initialise the node + setlocale(LC_ALL,""); + ros::init(argc, argv, "jiazhang"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("Chat", 10, doPerson); + + ros::spin(); + return 0; +} \ No newline at end of file diff --git a/catkin_ws/src/my_messages_pkg/src/encoder_save.cpp b/catkin_ws/src/my_messages_pkg/src/encoder_save.cpp new file mode 100644 index 0000000000000000000000000000000000000000..75bd8117d78ba86b90fdc76ab49e25d39f6f94a4 --- /dev/null +++ b/catkin_ws/src/my_messages_pkg/src/encoder_save.cpp @@ -0,0 +1,44 @@ +#include "ros/ros.h" +#include <ros/package.h> +#include "asclinic_pkg/LeftRightInt32.h" +#include <fstream> + +ros::Subscriber m_subscriber; +std::ofstream data_save_file + +void Callback(const asclinic_pkg::LeftRightInt32& msg){ + ROS_INFO_STREAM("Received message - Left: " << msg.left << ", Right: " << msg.right << ", Seq_num: " << msg.seq_num); + + // Append received data to the CSV file + if (data_save_file.is_open()) { + data_save_file << msg.left << ", " << msg.right << ", " << msg.seq_num << std::endl; + } else { + ROS_ERROR_STREAM("File encoder_data.csv is not open for writing."); + } +} + +int main(int argc, char* argv[]){ + ros::init(argc, argv, "receive_encoder"); + ros::NodeHandle nh; + + // Subscribe to the "asc/encoder_counts" topic + m_subscriber = nh.subscribe("asc/encoder_counts", 1, Callback); + + // Open or clear the CSV file + outputFile.open("/home/asc/encoder_data.csv", std::ios::out | std::ios::trunc); + if (!data_save_file.is_open()) { + ROS_ERROR_STREAM("Unable to create/clear file encoder_data.csv"); + return 1; // Exit with error + } + + // Write header to the file + data_save_file << "Left, Right, Seq_num" << std::endl; + + ROS_INFO_STREAM("Node started"); + ros::spin(); + + // Close the file before exiting + data_save_file.close(); + return 0; +} +