-
-
Save alexsleat/1372845 to your computer and use it in GitHub Desktop.
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include "ros/ros.h" | |
| #include "std_msgs/MultiArrayLayout.h" | |
| #include "std_msgs/MultiArrayDimension.h" | |
| #include "std_msgs/Int32MultiArray.h" | |
| int main(int argc, char **argv) | |
| { | |
| ros::init(argc, argv, "arrayPublisher"); | |
| ros::NodeHandle n; | |
| ros::Publisher pub = n.advertise<std_msgs::Int32MultiArray>("array", 100); | |
| while (ros::ok()) | |
| { | |
| std_msgs::Int32MultiArray array; | |
| //Clear array | |
| array.data.clear(); | |
| //for loop, pushing data in the size of the array | |
| for (int i = 0; i < 90; i++) | |
| { | |
| //assign array a random number between 0 and 255. | |
| array.data.push_back(rand() % 255); | |
| } | |
| //Publish array | |
| pub.publish(array); | |
| //Let the world know | |
| ROS_INFO("I published something!"); | |
| //Do this. | |
| ros::spinOnce(); | |
| //Added a delay so not to spam | |
| sleep(2); | |
| } | |
| } |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <vector> | |
| #include <iostream> | |
| #include "ros/ros.h" | |
| #include "std_msgs/MultiArrayLayout.h" | |
| #include "std_msgs/MultiArrayDimension.h" | |
| #include "std_msgs/Int32MultiArray.h" | |
| int Arr[90]; | |
| void arrayCallback(const std_msgs::Int32MultiArray::ConstPtr& array); | |
| int main(int argc, char **argv) | |
| { | |
| ros::init(argc, argv, "arraySubscriber"); | |
| ros::NodeHandle n; | |
| ros::Subscriber sub3 = n.subscribe("array", 100, arrayCallback); | |
| ros::spinOnce(); | |
| for(j = 1; j < 90; j++) | |
| { | |
| printf("%d, ", Arr[j]); | |
| } | |
| printf("\n"); | |
| return 0; | |
| } | |
| void arrayCallback(const std_msgs::Int32MultiArray::ConstPtr& array) | |
| { | |
| int i = 0; | |
| // print all the remaining numbers | |
| for(std::vector<int>::const_iterator it = array->data.begin(); it != array->data.end(); ++it) | |
| { | |
| Arr[i] = *it; | |
| i++; | |
| } | |
| return; | |
| } |
In case I am running only the subscriber.
Please help me with the command line ros tool rostopic
$rostopic pub /bot/test/massrange std_msgs/Float32MultiArray "layout:
dim:
- label: min_step_max_time
size: 4
stride: 1
data_offset: 0
data: [0.0 1.0 2.0 3.0]"
Aiming to send
float var[4] = {0.0, 0.1, 0.2, 0.3};
getting following warning:
[WARN] [1524667914.429192]: Inbound TCP/IP connection failed: <class 'struct.error'>: 'required argument is not a float' when writing 'label: "min_step_max_time"
size: 4
stride: 1'
Hi,
Just wanted to add one thing, the code wasn't working for me until I changed
ros::spinOnce();toros::spinfor Subscribe.cpp.Thanks!
Of course spinOnce is used inside an infinite loop.
@rahuldeo2047 Have you found out how to subscibe to that topic and get the array data?
I would like to know how the message std_msgs/Int32MultiArray is defined. I mean how is the data is formatted or structured in such as Int32MultiArray.msg.
Hi,
Thanks for this, its helping me a lot
I'm new to ROS and learning to interface it with Arduino. When I run the Publish.cpp code, I encounter an error in line 19, this line of code
ros::Publisher pub = n.advertise<std_msgs::Int32MultiArray>("array", 100);`
This is the error message
expected primary-expression before '>' token
I will appreciate help from anyone who has an idea.
Thanks
@Gbouna looks likes it's been a while, but did you happen to find a solution to this problem above? Currently stuck on the same thing
Line 33 of publisher.cpp should be
pub.publish(array);