From:http://blog.csdn.net/f_season/article/details/9180061
通过前面一篇Android上ROS开发——android_core创建一个android应用 应该已经懂了怎么把消息发布给某主题,但是由于发送消息的格式不同,代码有些许改动。虽然通过eclipse可以自己琢磨出如何处理某消息格式下的数据,或者直接google ROS的格式,但是找起来还是有点麻烦,我这还是详细讲解下。
首先是最基本最简单的发送std_msg格式:
- package rosjava.wtf.pocketsphinx.version1;
- import org.ros.concurrent.CancellableLoop;
- import org.ros.namespace.GraphName;
- import org.ros.node.AbstractNodeMain;
- import org.ros.node.ConnectedNode;
- import org.ros.node.topic.Publisher;
- public class TalkChnString extends AbstractNodeMain {
- @Override
- public GraphName getDefaultNodeName() {
- return GraphName.of("rosjava_tutorial_pubsub/talkerchnstring");
- }
- @Override
- public void onStart(final ConnectedNode connectedNode) {
- final Publisher<std_msgs.String> publisher =
- connectedNode.newPublisher("chatter", std_msgs.String._TYPE);
- // This CancellableLoop will be canceled automatically when the node shuts
- // down.
- connectedNode.executeCancellableLoop(new CancellableLoop() {
- @Override
- protected void setup() {
- }
- @Override
- public void loop() throws InterruptedException {
- std_msgs.String chnstr = publisher.newMessage();
- chnstr.setData( IsrActivity.tmpchnstring );
- if(PocketSphinxROS.sendchnstring)
- {
- publisher.publish(chnstr);
- PocketSphinxROS.sendchnstring = false;
- }
- Thread.sleep(500);
- }
- });
- }
- }
- package rosjava.wtf.pocketsphinx.version1;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import org.ros.concurrent.CancellableLoop;
- import org.ros.namespace.GraphName;
- import org.ros.node.AbstractNodeMain;
- import org.ros.node.ConnectedNode;
- import org.ros.node.topic.Publisher;
- import android.R.string;
- import sensor_msgs.JointState;
- public class TalkServo extends AbstractNodeMain {
- public static double[] vel= {0.5,0.5};
- public static double[] pos= {-0.17,0.75};
- String[] s = {"pan","tilz"};
- ArrayList<String> list = new ArrayList<String>(Arrays.asList(s));
- @Override
- public GraphName getDefaultNodeName() {
- return GraphName.of("rosjava_tutorial_pubsub/talkerserver");
- }
- @Override
- public void onStart(final ConnectedNode connectedNode) {
- final Publisher<JointState> publisher =
- connectedNode.newPublisher("joint_states", "sensor_msgs/JointState");
- // This CancellableLoop will be canceled automatically when the node shuts
- // down.
- connectedNode.executeCancellableLoop(new CancellableLoop() {
- @Override
- protected void setup() {
- }
- @Override
- public void loop() throws InterruptedException {
- JointState joint = (JointState) publisher.newMessage();
- if(PocketSphinxROS.sendservo)
- {
- joint.setName(list);
- joint.setVelocity(vel);
- joint.setPosition(pos);
- publisher.publish(joint);
- }
- Thread.sleep(100);
- }
- });
- }
- }
- Header header
- string[] name
- float64[] position
- float64[] velocity
- float64[] effor
- package rosjava.wtf.pocketsphinx.version1;
- import geometry_msgs.Twist;
- import org.ros.concurrent.CancellableLoop;
- import org.ros.namespace.GraphName;
- import org.ros.node.AbstractNodeMain;
- import org.ros.node.ConnectedNode;
- import org.ros.node.topic.Publisher;
- public class TalkParam extends AbstractNodeMain {
- public static String tmpstring="WTF";
- public static float LX,LY,LZ,AX,AY,AZ;
- @Override
- public GraphName getDefaultNodeName() {
- return GraphName.of("rosjava_tutorial_pubsub/talker");
- }
- @Override
- public void onStart(final ConnectedNode connectedNode) {
- final Publisher<Twist> publisher =
- connectedNode.newPublisher("cmd_vel", "geometry_msgs/Twist");
- // This CancellableLoop will be canceled automatically when the node shuts
- // down.
- connectedNode.executeCancellableLoop(new CancellableLoop() {
- @Override
- protected void setup() {
- }
- @Override
- public void loop() throws InterruptedException {
- Twist cmd = publisher.newMessage();
- if(PocketSphinxROS.send)
- {
- cmd.getLinear().setX(LX);
- cmd.getLinear().setY(LY);
- cmd.getLinear().setZ(LZ);
- cmd.getAngular().setX(AX);
- cmd.getAngular().setY(AY);
- cmd.getAngular().setZ(AZ);
- publisher.publish(cmd);
- }
- Thread.sleep(100);
- }
- });
- }
- }
- Vector3 linear
- Vector3 angular
比如前进:
- TalkParam.AX=0;
- TalkParam.AY=0;
- TalkParam.AZ=0;
- TalkParam.LX=0.4f;
- TalkParam.LY=0;
- TalkParam.LZ=0;
左转:(这里的左转是原地左转,因为你也看到,没有给线速度)这里AZ表示绕Z轴转动。
- TalkParam.AX=0;
- TalkParam.AY=0;
- TalkParam.AZ= 0.6f;
- TalkParam.LX=0;
- TalkParam.LY=0;
- TalkParam.LZ=0;
以上给出的是机器人常用到的几种消息发送格式,你也可以找到官方提供的其他消息格式,当然你也可以自己定义所发送消息的格式。
by:season