ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

kylerlaird's profile - activity

2022-06-09 23:02:35 -0500 received badge  Notable Question (source)
2022-06-09 10:03:26 -0500 marked best answer Is there a non-graphical rover simulation node?

Is there a simple node that subscribes to cmd_vel and publishes reasonable (for a rover) Pose and Twist messages? Something like turtlesim but with real Pose messages and no GUI.

2022-06-08 09:16:56 -0500 received badge  Popular Question (source)
2022-06-07 18:32:38 -0500 marked best answer Is micropython supported?

I have quite a collection of Arduinos but I always dread programming them. It takes so much effort to do simple things.

Is anyone working on rosserial for Micropython boards? That would be a wonderful solution for me.

2022-06-07 16:26:39 -0500 asked a question Is there a non-graphical rover simulation node?

Is there a non-graphical rover simulation node? Is there a simple node that subscribes to cmd_vel and publishes reasonab

2021-04-20 16:30:22 -0500 received badge  Famous Question (source)
2021-01-11 11:06:15 -0500 marked best answer How should I develop an Ackermann vehicle?

Last summer (2015) I used a simple ROS configuration to remotely control a small vehicle (Tractobot00) with Ackermann steering. I only used ROS for the joystick driver and message passing between nodes I wrote. https://www.youtube.com/watch?v=URQXU... I extended the control to navigating using a single RTK GPS with very limited success.

I see that there are cars with ROS interfaces now but I don't see any major development in ROS support for Ackermann vehicles. Is there a simple path to using ROS to control an Ackermann vehicle in a standard way? My initial goal is to be able to drive a large vehicle in a straight line using dual RTK GPS and an IMU. It looks like I could do this easily with APM Rover but I would much rather have the ROS infrastructure available.

[2016.05.29 update]

What did I do? Well...I got really frustrated - both with ROS and APM. Out of desperation, I decided to write my own monolithic Python script. It is amazingly dumb. It does not know about kinematics, vehicle geometry, or even correlation of steering value and steer angle. It does not even use the IMU. It just uses the GPS data for pose, and feeds a steering PID with the difference between the current and desired heading based on cross-track distance. It works surprisingly well for Tractobot01. https://youtu.be/HclgNBaS-Dg

Tractobot01 has been in the shop with transmission problems because it sat unused for decades. I brought it home yesterday and added a solenoid valve for implement control. I hope to have that working next week so that it can drill some soybeans without my assistance.

As my needs become more complex, I often have the urge to return to a ROS-based system. I could certainly port my existing work to ROS but I'd like to start fresh when I return to ROS and do better. I contacted Earle Robotics about continuing to port APM to ROS but it's apparently a bigger undertaking than I expected.

I would gladly pay for someone to port more pieces of APM to ROS and/or help me use existing ROS code to do what I need.

[2016.07.17 update]

It seems that there is interest in this, so here are a few more details on Tractobot01. Also, I'm returning to ROS for Tractobot02 so I'm very interested in porting my work.

Tractobot01 came out of the shop with a repaired transmission, went to the field, and blew a steering cylinder seal. Although I was very late, it did eventually drill about 45 acres of soybeans.

I will describe the guidance in more detail. For reference, here are videos of Tractobot01 in various phases. resuming operation: https://www.youtube.com/watch?v=LhKV-... midfield: https://www.youtube.com/watch?v=fNX1M... headland: https://www.youtube.com/watch?v=XWopH...

Tractobot01 had one capability: follow a line. That meant that it tried to minimize the ... (more)

2020-09-26 13:35:20 -0500 received badge  Necromancer (source)
2020-09-26 13:35:20 -0500 received badge  Teacher (source)
2020-09-26 13:35:20 -0500 received badge  Self-Learner (source)
2020-09-26 13:23:04 -0500 answered a question Is micropython supported?

I still like the idea of using rosserial and Micropython, but lately I've been using Firmata and Pymata. For some proje

2020-01-21 09:32:17 -0500 received badge  Famous Question (source)
2019-12-20 19:28:30 -0500 commented answer How do I specify the version of Python3 for ROS2?

The dependency is certainly 3.6 for the package I have; it's the only one for which compiled modules are included. dpkg

2019-12-20 19:27:58 -0500 received badge  Rapid Responder (source)
2019-12-20 19:27:58 -0500 answered a question How do I specify the version of Python3 for ROS2?

The dependency is certainly 3.6 for the package I have; it's the only one for which compiled modules are included. # dp

2019-12-20 09:10:06 -0500 marked best answer How do I specify the version of Python3 for ROS2?

I'm new to ROS2. I've tried to install ROS2 from packages a few times and I've run into a lot of dependency issues. Recently I cleared out versions of ROS1 and I now have ros-eloquent-desktop installed.

The problem stopping me now is that I can't easily run Python programs. ros-eloquent-rclpy 0.8.3-1bionic.20191213.05 (amd64) supports only Python 3.6. However, I have Python 3.7 installed and it is the default. When I run something like "ros2 run demo_nodes_py listener", /usr/bin/python3 is used. That is a link to python3.7, so ros2 fails.

I can change the symlink to python3.6 and it works fine. I prefer to avoid that.

I tried changing ROS_PYTHON_VERSION from "3" to "3.6" but that seems to have no effect.

I also tried changing the interpreter for /opt/ros/eloquent/bin/ros2, but that was insufficient.

ros2 clearly depends on Python3.6. Is there a clean way of specifying this? Where should I have found it?

2019-12-20 09:09:26 -0500 commented answer How do I specify the version of Python3 for ROS2?

I think it's more precise to say that the binary packages of ROS2 have an undeclared dependency on python3 version 3.6.

2019-12-20 09:09:26 -0500 received badge  Commentator
2019-12-19 19:45:53 -0500 received badge  Notable Question (source)
2019-12-19 18:25:49 -0500 received badge  Rapid Responder
2019-12-19 18:25:49 -0500 answered a question How do I specify the version of Python3 for ROS2?

OK, so really there's a dependency on the version of the python3 package (must be 3.6.*). I'm reverting to bionic. Tha

2019-12-19 15:47:29 -0500 received badge  Popular Question (source)
2019-12-19 08:25:10 -0500 asked a question How do I specify the version of Python3 for ROS2?

How do I specify the version of Python3 for ROS2? I'm new to ROS2. I've tried to install ROS2 from packages a few times

2019-01-27 10:09:28 -0500 commented answer Advanced Nav Drivers and ROS

Sorry it took so long for me to return to this. Is the RTCM data appearing on the "rtcm" topic specified for the driver

2018-11-02 13:19:30 -0500 received badge  Notable Question (source)
2018-11-02 13:19:30 -0500 received badge  Famous Question (source)
2018-11-02 13:19:30 -0500 received badge  Popular Question (source)
2018-07-10 18:52:58 -0500 received badge  Famous Question (source)
2018-07-09 14:00:09 -0500 marked best answer Can I determine the topic which executed a callback in rosserial?

I have a few PWM input/output pairs connected to my Arduino Nano and defined in an array.

typedef struct {
        char *name;
        byte pin_in;
        byte pin_out;
        unsigned long rise_time;
        unsigned long fall_time;
        byte value_in;
        byte value_out;
        byte state;
} control_t;

control_t controls[]={
     { .name="throttle", .pin_in=3, .pin_out=11, },
     { .name="steering", .pin_in=4, .pin_out=10, },
     { .name="transmission", .pin_in=5, .pin_out=9, },
     { .name=NULL}
};

I want to create a subscriber and publisher for each one so that the input value (from the physical control) is published and the output value (sent to the robot) can be subscribed. I tried using classes but discovered that rosserial doesn't support using class methods for callbacks. So I thought I could have one subscriber callback for all of the controls. It just needs to know the topic used so that it can do a lookup on the control name and set the PWM output of the corresponding pin. For example, publishing 123 to /myrobot/steering/set(?) should put the value 123 on pin 10. (I also welcome help with topic names.)

Is it possible to get the topic name (or ID?) inside the callback? Or is there a better way to handle this?

Thank you.

--kyler

[updates to keep them all together...]

  1. There is good info here on how classes are implemented in C++: http://stackoverflow.com/questions/40...

  2. boost::bind and boost::function (from #1) appear to do what I want.

  3. There is a (partial) Boost library for Arduino: https://github.com/vancegroup/arduino...

  4. C++11 can do lambda/anonymous functions. C++11 still seems to be experimental for Arduino.

  5. I wonder if I should subclass the rosserial code to make it do what I need.

I'm going to try #4 first. I welcome alternatives.

[...]

I punted and made another option:

  1. Use the preprocessor.

I don't like that I have to both define and initialize the controls, but it's otherwise workable and should be easy to extend.

#define CONTROL(n, pi, po, ptmin, ptmax) \
        static control_t control_ ## n = { name:(char *)#n, pin_in:pi, pin_out:po, pt_min:ptmin, pt_max:ptmax, }; \
        void put_ ## n( const std_msgs::UInt8& msg ) { \
                sprintf(buf, "put %s: %u", control_ ## n.name, msg.data); \
                nh.logwarn(buf); \
                control_ ## n.value_out = msg.data; \
                analogWrite(control_ ## n.pin_out, control_ ## n.value_out); \
        } \


#define INIT_CONTROL(n) \
        control_ ## n.next=controls; \
        controls=&control_ ## n; \
        static ros::Subscriber<std_msgs::UInt8> n ## _sub("/" #n "/put", &put_ ## n ); \
        nh.subscribe(n ## _sub); \


control_t *controls = NULL;

CONTROL(throttle, 3, 11, 0, 0)
CONTROL(transmission, 4, 10, 0, 0)
CONTROL(steering, 5, 9, 110, 145)

void setup()
{
        nh.initNode();

        INIT_CONTROL(throttle);
        INIT_CONTROL(transmission);
        INIT_CONTROL(steering);
[...]

(I added support for a min/max range so that I can revert to passthrough mode if a control moves out of the range. IOW, if the steering wheel is moved, full control is passed to the local operator.

I've been a bit concerned about processing several 500 Hz PWM signals but it's working fairly well so far. I need to add at ... (more)

2018-07-06 07:50:13 -0500 commented answer Advanced Nav Drivers and ROS

I've uploaded the code I use for this: https://github.com/kylerlaird/ntrip_client

2018-06-06 08:09:58 -0500 received badge  Famous Question (source)
2018-06-06 07:23:05 -0500 commented answer Callback on transform available

I use the transforms that my INS produces in order to calculate guidance commands. I want updates quickly and efficient

2018-03-27 23:38:31 -0500 received badge  Notable Question (source)
2018-03-26 10:40:30 -0500 commented answer probleme with gmapping

Does the tf_tree you posted represent your use of "rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 1.0 base

2018-03-26 10:12:49 -0500 received badge  Notable Question (source)
2018-03-26 07:52:35 -0500 edited question How do I make an INS with ROS?

How do I make an INS with ROS? I have been using dual Real Time Kinematic (RTK) receivers for my tractor projects. This

2018-03-26 07:15:25 -0500 answered a question probleme with gmapping

[kesuke, I have only recently started understanding how to manipulate transforms. I enjoy working with them now but I d

2018-03-19 00:31:57 -0500 received badge  Popular Question (source)
2018-03-18 20:36:07 -0500 edited question How do I make an INS with ROS?

How do I make an INS with ROS? I have been using dual Real Time Kinematic (RTK) receivers for my tractor projects. This

2018-03-18 13:01:36 -0500 answered a question Advanced Nav Drivers and ROS

I have been modifying the Advanced Navigation driver. https://github.com/kylerlaird/advanced_navigation_driver It now o

2018-03-18 12:55:03 -0500 asked a question How do I make an INS with ROS?

How do I make an INS with ROS? I have been using dual RTK receivers for my tractor projects. This gives me reliable posi